diff --git a/api.php b/api.php
index dfdcbc8..2ed692e 100644
--- a/api.php
+++ b/api.php
@@ -146,149 +146,51 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
return ['poster' => $defaultPoster, 'title' => '', 'format' => 'Blu-ray'];
}
- error_log("=== CinemaPassion: Début recherche pour '{$cleanTitle}' ===");
+ // 1. Recherche en GET (beaucoup plus fiable que le POST sur ce site)
+ $searchUrl = "https://www.cinemapassion.com/recherche.php?recherche=" . urlencode($cleanTitle);
+ $searchRes = httpGet($searchUrl, 10);
- // É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}'");
- return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
- }
-
- error_log("CinemaPassion: ✅ Recherche OK, " . strlen($searchRes) . " caractères reçus");
-
- // ÉTAPE 2 : Trouver TOUS les liens vers des films et chercher une correspondance EXACTE
- $filmUrl = null;
- $filmName = null;
- $filmId = null;
- $bestMatch = null;
- $bestMatchScore = 0;
-
- // Pattern pour extraire tous les films avec leurs titres affichés
- if (preg_match_all('/]+)-(\d+)\.php["\']?[^>]*>([^<]+)<\/a>/i', $searchRes, $allMatches, PREG_SET_ORDER)) {
- error_log("CinemaPassion: " . count($allMatches) . " liens de films trouvés");
-
- foreach ($allMatches as $match) {
- $linkName = $match[1];
- $linkId = $match[2];
- $linkTitle = trim($match[3]);
+ if ($searchRes) {
+ // 2. Extraire directement le premier lien de film
+ // On ne cherche plus à lire le contenu de la balise pour éviter les bugs liés au HTML interne
+ if (preg_match('/href=["\']?(?:\.\.\/)?(film\/[^"\'\s<>]+-\d+\.php)["\']?/i', $searchRes, $matches)) {
+ $filmUrl = "https://www.cinemapassion.com/" . ltrim($matches[1], './');
+ $filmRes = httpGet($filmUrl, 10);
- // Nettoyer le titre du lien pour comparaison
- $linkTitleClean = cleanTitle($linkTitle);
- $linkNameClean = str_replace('-', ' ', $linkName);
-
- // Calculer un score de correspondance
- $score = 0;
-
- // Correspondance exacte (titre ou nom URL)
- if (strcasecmp($linkTitleClean, $cleanTitle) === 0) {
- $score = 100;
- error_log("CinemaPassion: ✅✅✅ CORRESPONDANCE EXACTE (titre): '{$linkTitle}'");
- } elseif (strcasecmp($linkNameClean, $cleanTitle) === 0) {
- $score = 90;
- error_log("CinemaPassion: ✅✅ CORRESPONDANCE EXACTE (URL): '{$linkName}'");
- }
- // Correspondance partielle forte (le titre recherché est contenu dans le lien)
- elseif (stripos($linkTitleClean, $cleanTitle) === 0 || stripos($linkNameClean, $cleanTitle) === 0) {
- $score = 70;
- error_log("CinemaPassion: ✅ Correspondance début: '{$linkTitle}' contient '{$cleanTitle}'");
- }
- // Correspondance partielle faible
- elseif (stripos($linkTitleClean, $cleanTitle) !== false || stripos($linkNameClean, $cleanTitle) !== false) {
- $score = 50;
- error_log("CinemaPassion: ⚠️ Correspondance partielle: '{$linkTitle}' contient '{$cleanTitle}'");
- }
-
- // Si on a trouvé une meilleure correspondance, on la garde
- if ($score > $bestMatchScore) {
- $bestMatchScore = $score;
- $bestMatch = [
- 'name' => $linkName,
- 'id' => $linkId,
- 'title' => $linkTitle,
- 'score' => $score
- ];
- }
- }
-
- // Utiliser la meilleure correspondance SI le score est suffisant (au moins 70)
- if ($bestMatch && $bestMatch['score'] >= 70) {
- $filmUrl = "https://www.cinemapassion.com/film/{$bestMatch['name']}-{$bestMatch['id']}.php";
- $filmName = $bestMatch['name'];
- $filmId = $bestMatch['id'];
- error_log("CinemaPassion: ✅ Meilleur match sélectionné (score: {$bestMatch['score']}): {$filmName}-{$filmId}");
- } else {
- error_log("CinemaPassion: ❌ Aucune correspondance suffisante trouvée (meilleur score: " . ($bestMatch['score'] ?? 0) . ")");
- }
- } else {
- error_log("CinemaPassion: ❌ Aucun lien de film trouvé dans les résultats");
- }
-
- if (!$filmUrl) {
- 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}");
- 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;
-
- // Pattern pour trouver le chemin de la jaquette
- if (preg_match('/href=["\']?(?:\.\.\/)?(jaquette-(?:dvd|blu-ray)-[^"\'\s<>]+\.php)["\']?/i', $filmPageRes, $matches)) {
- $jaquettePath = $matches[1];
- $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) {
- error_log("CinemaPassion: ✅ Page jaquette OK, " . strlen($jaquettePageRes) . " caractères reçus");
-
- // ✅ CORRECTION : Chercher l'URL COMPLÈTE dans src (pas juste le chemin)
- if (preg_match('/src=["\']?(https?:\/\/[^"\'\s<>]*cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg)["\']?/i', $jaquettePageRes, $imgMatches)) {
- $posterUrl = $imgMatches[1];
- $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
- error_log("CinemaPassion: Tentative fallback sur la page film...");
- if (preg_match_all('/src=["\']?(https?:\/\/[^"\'\s<>]*cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg)["\']?/i', $filmPageRes, $allMatches)) {
- foreach ($allMatches[1] as $imgUrl) {
- if (strpos($imgUrl, 'miniature') === false && strpos($imgUrl, 'vign') === false) {
- $posterUrl = str_replace('http://', 'https://', $imgUrl);
- error_log("CinemaPassion: ✅✅ Image trouvée (covers_temp direct): '{$cleanTitle}' → {$posterUrl}");
- return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
+ if ($filmRes) {
+ // 3. Chercher la page jaquette haute définition
+ $jaquetteUrl = null;
+ if (preg_match('/href=["\']?(?:\.\.\/)?(jaquette-(?:dvd|blu-ray)-[^"\'\s<>]+\.php)["\']?/i', $filmRes, $jaqMatches)) {
+ $jaquetteUrl = "https://www.cinemapassion.com/" . ltrim($jaqMatches[1], './');
+ $jaquetteRes = httpGet($jaquetteUrl, 10);
+
+ if ($jaquetteRes) {
+ // 4. Extraire l'image covers_temp
+ if (preg_match('/src=["\']?(https?:\/\/(?:www\.)?cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg)["\']?/i', $jaquetteRes, $imgMatches)) {
+ return [
+ 'poster' => str_replace('http://', 'https://', $imgMatches[1]),
+ 'title' => $cleanTitle,
+ 'format' => 'Blu-ray'
+ ];
+ }
+ }
+ }
+
+ // 5. Fallback : si pas de page jaquette, on cherche covers_temp sur la page principale du film
+ if (preg_match('/src=["\']?(https?:\/\/(?:www\.)?cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg)["\']?/i', $filmRes, $imgMatches)) {
+ if (strpos($imgMatches[1], 'miniature') === false && strpos($imgMatches[1], 'vign') === false) {
+ return [
+ 'poster' => str_replace('http://', 'https://', $imgMatches[1]),
+ 'title' => $cleanTitle,
+ 'format' => 'Blu-ray'
+ ];
+ }
+ }
}
}
}
- // ❌ SUPPRESSION du fallback sur lesaffiches/ qui donne de mauvaises images
- error_log("CinemaPassion: ❌❌ Image NON trouvée pour '{$cleanTitle}' - Pas de fallback sur les affiches");
+ // Si la recherche échoue, on retourne l'image par défaut
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
}