Actualiser api.php

This commit is contained in:
2026-06-26 14:34:17 +02:00
parent ac08a2e441
commit 0d3416c332
+79 -31
View File
@@ -146,93 +146,141 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
return ['poster' => $defaultPoster, 'title' => '', 'format' => 'Blu-ray'];
}
error_log("=== CinemaPassion: Début recherche pour '{$cleanTitle}' ===");
// ÉTAPE 1 : Recherche POST sur /moteur2.php
$searchRes = httpPost('https://www.cinemapassion.com/moteur2.php', ['recherche' => $cleanTitle]);
if (!$searchRes) {
error_log("CinemaPassion: Recherche échouée pour '{$cleanTitle}'");
error_log("CinemaPassion: Recherche échouée pour '{$cleanTitle}'");
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
}
// ÉTAPE 2 : Trouver le lien qui correspond EXACTEMENT au titre
error_log("CinemaPassion: ✅ Recherche OK, " . strlen($searchRes) . " caractères reçus");
// ÉTAPE 2 : Trouver tous les liens vers des films (pattern simplifié)
$filmUrl = null;
$filmName = null;
$filmId = null;
if (preg_match_all('/<a\s+href=["\']?(?:\.\.\/)?film\/([^"\'\s]+)-(\d+)\.php["\']?[^>]*>([^<]+)<\/a>/i', $searchRes, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$linkTitle = trim($match[3]);
// Pattern simplifié : cherche film/XXX-NNN.php n'importe où dans le HTML
if (preg_match_all('/film\/([^"\'\s<>]+)-(\d+)\.php/i', $searchRes, $allMatches, PREG_SET_ORDER)) {
error_log("CinemaPassion: " . count($allMatches) . " liens de films trouvés");
// Essayer de trouver le bon film par correspondance de nom
foreach ($allMatches as $match) {
$linkName = $match[1];
$linkId = $match[2];
if (strcasecmp($linkTitle, $cleanTitle) === 0 ||
stripos($linkTitle, $cleanTitle) !== false ||
stripos($cleanTitle, $linkTitle) !== false) {
// Comparer le nom du film (dans l'URL) avec le titre recherché
$linkNameClean = str_replace('-', ' ', $linkName);
if (strcasecmp($linkNameClean, $cleanTitle) === 0 ||
stripos($linkNameClean, $cleanTitle) !== false ||
stripos($cleanTitle, $linkNameClean) !== false) {
$filmUrl = "https://www.cinemapassion.com/film/{$linkName}-{$linkId}.php";
$filmName = $linkName;
$filmId = $linkId;
error_log("CinemaPassion: ✅ Film trouvé par nom: {$filmName}-{$filmId}");
break;
}
}
if (!$filmUrl && !empty($matches)) {
$filmName = $matches[0][1];
$filmId = $matches[0][2];
// Si pas trouvé, prendre le premier résultat
if (!$filmUrl && !empty($allMatches)) {
$filmName = $allMatches[0][1];
$filmId = $allMatches[0][2];
$filmUrl = "https://www.cinemapassion.com/film/{$filmName}-{$filmId}.php";
error_log("CinemaPassion: ⚠️ Premier film utilisé: {$filmName}-{$filmId}");
}
} else {
error_log("CinemaPassion: ❌ Aucun lien de film trouvé dans les résultats");
}
if (!$filmUrl) {
error_log("CinemaPassion: Film non trouvé pour '{$cleanTitle}'");
error_log("CinemaPassion: Film non trouvé pour '{$cleanTitle}'");
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
}
// ÉTAPE 3 : Aller sur la page du film
error_log("CinemaPassion: Accès à la page film: {$filmUrl}");
$filmPageRes = httpGet($filmUrl, 10);
if (!$filmPageRes) {
error_log("CinemaPassion: Page film inaccessible : {$filmUrl}");
error_log("CinemaPassion: Page film inaccessible : {$filmUrl}");
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
}
error_log("CinemaPassion: ✅ Page film OK, " . strlen($filmPageRes) . " caractères reçus");
// ÉTAPE 4 : Chercher le lien vers la jaquette DVD ou Blu-ray
$jaquetteUrl = null;
if (preg_match('/href=["\']?(?:\.\.\/)?(jaquette-(?:dvd|blu-ray)-[^"\'\s]+\.php)["\']?/i', $filmPageRes, $matches)) {
$jaquettePath = $matches[1];
$jaquetteUrl = "https://www.cinemapassion.com/" . str_replace('../', '', $jaquettePath);
// Pattern simplifié pour trouver le chemin de la jaquette
if (preg_match('/jaquette-(?:dvd|blu-ray)-[^"\'\s<>]+\.php/i', $filmPageRes, $matches)) {
$jaquettePath = $matches[0];
// Nettoyer le chemin (supprimer ../)
$jaquettePath = str_replace('../', '', $jaquettePath);
$jaquetteUrl = "https://www.cinemapassion.com/" . $jaquettePath;
error_log("CinemaPassion: ✅ Page jaquette trouvée: {$jaquetteUrl}");
} else {
error_log("CinemaPassion: ⚠️ Aucun lien de jaquette trouvé dans la page film");
}
// ÉTAPE 5 : Si page jaquette trouvée, aller dessus et extraire l'image covers_temp
if ($jaquetteUrl) {
error_log("CinemaPassion: Accès à la page jaquette: {$jaquetteUrl}");
$jaquettePageRes = httpGet($jaquetteUrl, 10);
if ($jaquettePageRes) {
// Pattern SPÉCIFIQUE : chercher UNIQUEMENT dans covers_temp/ (les vraies jaquettes)
if (preg_match('/src=["\']?(https?:\/\/(?:www\.)?cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s>]+\.jpg)["\']?/i', $jaquettePageRes, $imgMatches)) {
$posterUrl = $imgMatches[1];
$posterUrl = str_replace('http://', 'https://', $posterUrl);
error_log("CinemaPassion OK (jaquette): '{$cleanTitle}' → {$posterUrl}");
return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
error_log("CinemaPassion: ✅ Page jaquette OK, " . strlen($jaquettePageRes) . " caractères reçus");
// Pattern simplifié pour chercher l'image dans covers_temp/
if (preg_match('/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg/i', $jaquettePageRes, $imgMatches)) {
$posterUrl = $imgMatches[0];
// S'assurer que l'URL est complète
if (strpos($posterUrl, 'http') !== 0) {
$posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/');
}
$posterUrl = str_replace('http://', 'https://', $posterUrl);
error_log("CinemaPassion: ✅✅✅ Image trouvée (jaquette): '{$cleanTitle}' → {$posterUrl}");
return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} else {
error_log("CinemaPassion: ❌ Image covers_temp non trouvée dans la page jaquette");
}
} else {
error_log("CinemaPassion: ❌ Page jaquette inaccessible: {$jaquetteUrl}");
}
}
// ÉTAPE 6 : Fallback - Chercher covers_temp directement sur la page du film
// Mais IGNORER les miniatures et les sections "Actuellement"
if (preg_match_all('/src=["\']?(https?:\/\/(?:www\.)?cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s>]+\.jpg)["\']?/i', $filmPageRes, $allMatches)) {
// Prendre la PREMIÈRE vraie jaquette (pas les miniatures)
foreach ($allMatches[1] as $imgUrl) {
// Vérifier que ce n'est pas une miniature
if (strpos($imgUrl, 'miniature') === false && strpos($imgUrl, 'vign') === false) {
$posterUrl = str_replace('http://', 'https://', $imgUrl);
error_log("CinemaPassion OK (covers_temp direct): '{$cleanTitle}' → {$posterUrl}");
error_log("CinemaPassion: Tentative fallback sur la page film...");
if (preg_match_all('/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg/i', $filmPageRes, $allMatches)) {
foreach ($allMatches[0] as $imgPath) {
if (strpos($imgPath, 'miniature') === false && strpos($imgPath, 'vign') === false) {
$posterUrl = $imgPath;
if (strpos($posterUrl, 'http') !== 0) {
$posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/');
}
$posterUrl = str_replace('http://', 'https://', $posterUrl);
error_log("CinemaPassion: ✅✅ Image trouvée (covers_temp direct): '{$cleanTitle}' → {$posterUrl}");
return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
}
}
}
error_log("CinemaPassion KO: Image NON trouvée pour '{$cleanTitle}'");
// ÉTAPE 7 : Fallback ultime - Chercher lesaffiches/
error_log("CinemaPassion: Tentative fallback ultime (affiches)...");
if (preg_match('/lesaffiches\/[^"\'\s<>]+\.jpg/i', $filmPageRes, $imgMatches)) {
$posterUrl = $imgMatches[0];
if (strpos($posterUrl, 'http') !== 0) {
$posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/');
}
$posterUrl = str_replace('http://', 'https://', $posterUrl);
error_log("CinemaPassion: ✅ Image trouvée (affiche fallback): '{$cleanTitle}' → {$posterUrl}");
return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
}
error_log("CinemaPassion: ❌❌❌ Image NON trouvée pour '{$cleanTitle}'");
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
}