diff --git a/api.php b/api.php index 7e5085b..4e16b7f 100644 --- a/api.php +++ b/api.php @@ -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>/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]; + 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 OK (jaquette): '{$cleanTitle}' → {$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']; }