Actualiser api.php

This commit is contained in:
2026-06-26 15:12:16 +02:00
parent 5f6e193b98
commit 1ce12806ec
+47 -73
View File
@@ -158,69 +158,55 @@ 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 : Extraire TOUS les liens vers des films (pattern plus flexible) // É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; $bestMatch = null;
$bestMatchScore = 0; $bestMatchScore = 0;
// Pattern flexible : cherche film/XXX-NNN.php avec ou sans balises HTML autour // Pattern pour extraire tous les films avec leurs titres affichés
if (preg_match_all('/film\/([A-Za-z0-9\-]+)-(\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");
// Dédupliquer les résultats
$uniqueFilms = [];
foreach ($allMatches as $match) { foreach ($allMatches as $match) {
$key = $match[1] . '-' . $match[2]; $linkName = $match[1];
if (!isset($uniqueFilms[$key])) { $linkId = $match[2];
$uniqueFilms[$key] = [ $linkTitle = trim($match[3]);
'name' => $match[1],
'id' => $match[2]
];
}
}
foreach ($uniqueFilms as $film) { // Nettoyer le titre du lien pour comparaison
$linkName = $film['name']; $linkTitleClean = cleanTitle($linkTitle);
$linkId = $film['id']; $linkNameClean = str_replace('-', ' ', $linkName);
// Nettoyer le nom pour comparaison
$linkNameClean = str_replace(['-', '_'], ' ', $linkName);
$linkNameClean = preg_replace('/\s+/', ' ', trim($linkNameClean));
// Calculer un score de correspondance // Calculer un score de correspondance
$score = 0; $score = 0;
// Correspondance exacte // Correspondance exacte (titre ou nom URL)
if (strcasecmp($linkNameClean, $cleanTitle) === 0) { if (strcasecmp($linkTitleClean, $cleanTitle) === 0) {
$score = 100; $score = 100;
error_log("CinemaPassion: ✅✅✅ CORRESPONDANCE EXACTE: '{$linkName}'"); error_log("CinemaPassion: ✅✅✅ CORRESPONDANCE EXACTE (titre): '{$linkTitle}'");
} elseif (strcasecmp($linkNameClean, $cleanTitle) === 0) {
$score = 90;
error_log("CinemaPassion: ✅✅ CORRESPONDANCE EXACTE (URL): '{$linkName}'");
} }
// Le nom contient le titre recherché // Correspondance partielle forte (le titre recherché est contenu dans le lien)
elseif (stripos($linkNameClean, $cleanTitle) !== false) { elseif (stripos($linkTitleClean, $cleanTitle) === 0 || stripos($linkNameClean, $cleanTitle) === 0) {
$score = 80;
error_log("CinemaPassion: ✅ Correspondance forte: '{$linkName}' contient '{$cleanTitle}'");
}
// Le titre recherché contient le nom
elseif (stripos($cleanTitle, $linkNameClean) !== false) {
$score = 70; $score = 70;
error_log("CinemaPassion: ✅ Correspondance: '{$cleanTitle}' contient '{$linkName}'"); error_log("CinemaPassion: ✅ Correspondance début: '{$linkTitle}' contient '{$cleanTitle}'");
} }
// Similarité partielle // Correspondance partielle faible
else { elseif (stripos($linkTitleClean, $cleanTitle) !== false || stripos($linkNameClean, $cleanTitle) !== false) {
similar_text(strtolower($linkNameClean), strtolower($cleanTitle), $percent); $score = 50;
if ($percent > 60) { error_log("CinemaPassion: ⚠️ Correspondance partielle: '{$linkTitle}' contient '{$cleanTitle}'");
$score = 60;
error_log("CinemaPassion: ⚠️ Similarité {$percent}%: '{$linkName}' vs '{$cleanTitle}'");
}
} }
// Si on a trouvé une meilleure correspondance, on la garde
if ($score > $bestMatchScore) { if ($score > $bestMatchScore) {
$bestMatchScore = $score; $bestMatchScore = $score;
$bestMatch = [ $bestMatch = [
'name' => $linkName, 'name' => $linkName,
'id' => $linkId, 'id' => $linkId,
'title' => $linkTitle,
'score' => $score 'score' => $score
]; ];
} }
@@ -233,11 +219,14 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
$filmId = $bestMatch['id']; $filmId = $bestMatch['id'];
error_log("CinemaPassion: ✅ Meilleur match sélectionné (score: {$bestMatch['score']}): {$filmName}-{$filmId}"); error_log("CinemaPassion: ✅ Meilleur match sélectionné (score: {$bestMatch['score']}): {$filmName}-{$filmId}");
} else { } else {
error_log("CinemaPassion: ❌ Aucune correspondance suffisante (meilleur score: " . ($bestMatch['score'] ?? 0) . ")"); error_log("CinemaPassion: ❌ Aucune correspondance suffisante trouvée (meilleur score: " . ($bestMatch['score'] ?? 0) . ")");
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} }
} 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");
}
if (!$filmUrl) {
error_log("CinemaPassion: ❌ Film non trouvé pour '{$cleanTitle}'");
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray']; return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} }
@@ -252,19 +241,19 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
error_log("CinemaPassion: ✅ Page film OK, " . strlen($filmPageRes) . " caractères reçus"); error_log("CinemaPassion: ✅ Page film OK, " . strlen($filmPageRes) . " caractères reçus");
// ÉTAPE 4 : Chercher le lien vers la jaquette DVD ou Blu-ray (pattern flexible) // ÉTAPE 4 : Chercher le lien vers la jaquette DVD ou Blu-ray
$jaquetteUrl = null; $jaquetteUrl = null;
if (preg_match('/jaquette-(?:dvd|blu-ray)-[A-Za-z0-9\-]+-\d+\.php/i', $filmPageRes, $matches)) { // Pattern pour trouver le chemin de la jaquette
$jaquettePath = $matches[0]; if (preg_match('/href=["\']?(?:\.\.\/)?(jaquette-(?:dvd|blu-ray)-[^"\'\s<>]+\.php)["\']?/i', $filmPageRes, $matches)) {
$jaquettePath = str_replace('../', '', $jaquettePath); $jaquettePath = $matches[1];
$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}");
} else { } else {
error_log("CinemaPassion: ⚠️ Aucun lien de jaquette trouvé dans la page film"); 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 // ÉTAPE 5 : Si page jaquette trouvée, aller dessus et extraire l'image covers_temp
if ($jaquetteUrl) { if ($jaquetteUrl) {
error_log("CinemaPassion: Accès à la page jaquette: {$jaquetteUrl}"); error_log("CinemaPassion: Accès à la page jaquette: {$jaquetteUrl}");
$jaquettePageRes = httpGet($jaquetteUrl, 10); $jaquettePageRes = httpGet($jaquetteUrl, 10);
@@ -272,21 +261,12 @@ 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 flexible pour covers_temp // ✅ CORRECTION : Chercher l'URL COMPLÈTE dans src (pas juste le chemin)
if (preg_match('/covers_temp\/covers\d*\/[A-Za-z0-9\-_]+\.jpg/i', $jaquettePageRes, $imgMatches)) { if (preg_match('/src=["\']?(https?:\/\/[^"\'\s<>]*cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg)["\']?/i', $jaquettePageRes, $imgMatches)) {
$posterUrl = $imgMatches[0]; $posterUrl = $imgMatches[1];
if (strpos($posterUrl, 'http') !== 0) {
$posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/');
}
$posterUrl = str_replace('http://', 'https://', $posterUrl); $posterUrl = str_replace('http://', 'https://', $posterUrl);
error_log("CinemaPassion: ✅✅✅ Image trouvée (jaquette): '{$cleanTitle}' → {$posterUrl}");
// Vérifier que l'image existe vraiment return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
if (urlExists($posterUrl, 3)) {
error_log("CinemaPassion: ✅✅✅ Image trouvée (jaquette): '{$cleanTitle}' → {$posterUrl}");
return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} else {
error_log("CinemaPassion: ⚠️ Image trouvée mais inaccessible: {$posterUrl}");
}
} else { } else {
error_log("CinemaPassion: ❌ Image covers_temp non trouvée dans la page jaquette"); error_log("CinemaPassion: ❌ Image covers_temp non trouvée dans la page jaquette");
} }
@@ -297,24 +277,18 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
// ÉTAPE 6 : Fallback - Chercher covers_temp directement sur la page du film // ÉTAPE 6 : Fallback - Chercher covers_temp directement sur la page du film
error_log("CinemaPassion: Tentative fallback sur la page film..."); error_log("CinemaPassion: Tentative fallback sur la page film...");
if (preg_match_all('/covers_temp\/covers\d*\/[A-Za-z0-9\-_]+\.jpg/i', $filmPageRes, $allMatches)) { if (preg_match_all('/src=["\']?(https?:\/\/[^"\'\s<>]*cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg)["\']?/i', $filmPageRes, $allMatches)) {
foreach ($allMatches[0] as $imgPath) { foreach ($allMatches[1] as $imgUrl) {
if (strpos($imgPath, 'miniature') === false && strpos($imgPath, 'vign') === false) { if (strpos($imgUrl, 'miniature') === false && strpos($imgUrl, 'vign') === false) {
$posterUrl = $imgPath; $posterUrl = str_replace('http://', 'https://', $imgUrl);
if (strpos($posterUrl, 'http') !== 0) { error_log("CinemaPassion: ✅✅ Image trouvée (covers_temp direct): '{$cleanTitle}' → {$posterUrl}");
$posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/'); return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
}
$posterUrl = str_replace('http://', 'https://', $posterUrl);
if (urlExists($posterUrl, 3)) {
error_log("CinemaPassion: ✅✅ Image trouvée (covers_temp direct): '{$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']; return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} }