From be7fce22c57fe01a2ad7f890b81b79d1a873a8b9 Mon Sep 17 00:00:00 2001 From: Cedric Date: Fri, 26 Jun 2026 15:06:55 +0200 Subject: [PATCH] Actualiser api.php --- api.php | 90 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 53 insertions(+), 37 deletions(-) diff --git a/api.php b/api.php index 4e16b7f..dbda8ee 100644 --- a/api.php +++ b/api.php @@ -137,7 +137,7 @@ function detectFormat($title, $desc = '') { return 'Blu-ray'; } -// ── FONCTION POUR RÉCUPÉRER LES IMAGES DEPUIS CINEMAPASSION.COM ── +/// ── FONCTION POUR RÉCUPÉRER LES IMAGES DEPUIS CINEMAPASSION.COM ── function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) { $defaultPoster = 'assets/img/default_physical_media.jpg'; $cleanTitle = cleanTitle($title); @@ -158,39 +158,68 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) { error_log("CinemaPassion: ✅ Recherche OK, " . strlen($searchRes) . " caractères reçus"); - // ÉTAPE 2 : Trouver tous les liens vers des films (pattern simplifié) + // É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 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)) { + // 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"); - // Essayer de trouver le bon film par correspondance de nom foreach ($allMatches as $match) { $linkName = $match[1]; $linkId = $match[2]; + $linkTitle = trim($match[3]); - // Comparer le nom du film (dans l'URL) avec le titre recherché + // Nettoyer le titre du lien pour comparaison + $linkTitleClean = cleanTitle($linkTitle); $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; + + // 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 + ]; } } - // 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}"); + // 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"); @@ -215,10 +244,9 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) { // ÉTAPE 4 : Chercher le lien vers la jaquette DVD ou Blu-ray $jaquetteUrl = null; - // Pattern simplifié pour trouver le chemin de la jaquette + // Pattern 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}"); @@ -234,10 +262,9 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) { if ($jaquettePageRes) { error_log("CinemaPassion: ✅ Page jaquette OK, " . strlen($jaquettePageRes) . " caractères reçus"); - // Pattern simplifié pour chercher l'image dans covers_temp/ + // Chercher l'image dans covers_temp/ (les vraies jaquettes) 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, '/'); } @@ -268,19 +295,8 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) { } } - // É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}'"); + // ❌ 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"); return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray']; }