Actualiser api.php

This commit is contained in:
2026-06-26 15:06:55 +02:00
parent 0d3416c332
commit be7fce22c5
+53 -37
View File
@@ -137,7 +137,7 @@ function detectFormat($title, $desc = '') {
return 'Blu-ray'; 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) { function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
$defaultPoster = 'assets/img/default_physical_media.jpg'; $defaultPoster = 'assets/img/default_physical_media.jpg';
$cleanTitle = cleanTitle($title); $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"); 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; $filmUrl = null;
$filmName = null; $filmName = null;
$filmId = null; $filmId = null;
$bestMatch = null;
$bestMatchScore = 0;
// Pattern simplifié : cherche film/XXX-NNN.php n'importe où dans le HTML // Pattern pour extraire tous les films avec leurs titres affichés
if (preg_match_all('/film\/([^"\'\s<>]+)-(\d+)\.php/i', $searchRes, $allMatches, PREG_SET_ORDER)) { if (preg_match_all('/<a\s+href=["\']?(?:\.\.\/)?film\/([^"\'\s<>]+)-(\d+)\.php["\']?[^>]*>([^<]+)<\/a>/i', $searchRes, $allMatches, PREG_SET_ORDER)) {
error_log("CinemaPassion: " . count($allMatches) . " liens de films trouvés"); error_log("CinemaPassion: " . count($allMatches) . " liens de films trouvés");
// Essayer de trouver le bon film par correspondance de nom
foreach ($allMatches as $match) { foreach ($allMatches as $match) {
$linkName = $match[1]; $linkName = $match[1];
$linkId = $match[2]; $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); $linkNameClean = str_replace('-', ' ', $linkName);
if (strcasecmp($linkNameClean, $cleanTitle) === 0 ||
stripos($linkNameClean, $cleanTitle) !== false || // Calculer un score de correspondance
stripos($cleanTitle, $linkNameClean) !== false) { $score = 0;
$filmUrl = "https://www.cinemapassion.com/film/{$linkName}-{$linkId}.php";
$filmName = $linkName; // Correspondance exacte (titre ou nom URL)
$filmId = $linkId; if (strcasecmp($linkTitleClean, $cleanTitle) === 0) {
error_log("CinemaPassion: ✅ Film trouvé par nom: {$filmName}-{$filmId}"); $score = 100;
break; 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 // Utiliser la meilleure correspondance SI le score est suffisant (au moins 70)
if (!$filmUrl && !empty($allMatches)) { if ($bestMatch && $bestMatch['score'] >= 70) {
$filmName = $allMatches[0][1]; $filmUrl = "https://www.cinemapassion.com/film/{$bestMatch['name']}-{$bestMatch['id']}.php";
$filmId = $allMatches[0][2]; $filmName = $bestMatch['name'];
$filmUrl = "https://www.cinemapassion.com/film/{$filmName}-{$filmId}.php"; $filmId = $bestMatch['id'];
error_log("CinemaPassion: ⚠️ Premier film utilisé: {$filmName}-{$filmId}"); 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 { } else {
error_log("CinemaPassion: ❌ Aucun lien de film trouvé dans les résultats"); 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 // ÉTAPE 4 : Chercher le lien vers la jaquette DVD ou Blu-ray
$jaquetteUrl = null; $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)) { if (preg_match('/jaquette-(?:dvd|blu-ray)-[^"\'\s<>]+\.php/i', $filmPageRes, $matches)) {
$jaquettePath = $matches[0]; $jaquettePath = $matches[0];
// Nettoyer le chemin (supprimer ../)
$jaquettePath = str_replace('../', '', $jaquettePath); $jaquettePath = str_replace('../', '', $jaquettePath);
$jaquetteUrl = "https://www.cinemapassion.com/" . $jaquettePath; $jaquetteUrl = "https://www.cinemapassion.com/" . $jaquettePath;
error_log("CinemaPassion: ✅ Page jaquette trouvée: {$jaquetteUrl}"); error_log("CinemaPassion: ✅ Page jaquette trouvée: {$jaquetteUrl}");
@@ -234,10 +262,9 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
if ($jaquettePageRes) { if ($jaquettePageRes) {
error_log("CinemaPassion: ✅ Page jaquette OK, " . strlen($jaquettePageRes) . " caractères reçus"); 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)) { if (preg_match('/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg/i', $jaquettePageRes, $imgMatches)) {
$posterUrl = $imgMatches[0]; $posterUrl = $imgMatches[0];
// S'assurer que l'URL est complète
if (strpos($posterUrl, 'http') !== 0) { if (strpos($posterUrl, 'http') !== 0) {
$posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/'); $posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/');
} }
@@ -268,19 +295,8 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
} }
} }
// ÉTAPE 7 : Fallback ultime - Chercher lesaffiches/ // ❌ SUPPRESSION du fallback sur lesaffiches/ qui donne de mauvaises images
error_log("CinemaPassion: Tentative fallback ultime (affiches)..."); error_log("CinemaPassion: ❌❌ Image NON trouvée pour '{$cleanTitle}' - Pas de fallback sur les 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']; return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} }