Actualiser api.php

This commit is contained in:
2026-06-26 15:16:29 +02:00
parent 1ce12806ec
commit 9b956029bb
+39 -137
View File
@@ -146,149 +146,51 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
return ['poster' => $defaultPoster, 'title' => '', 'format' => 'Blu-ray']; 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 if ($searchRes) {
$searchRes = httpPost('https://www.cinemapassion.com/moteur2.php', ['recherche' => $cleanTitle]); // 2. Extraire directement le premier lien de film
// On ne cherche plus à lire le contenu de la balise <a> pour éviter les bugs liés au HTML interne
if (!$searchRes) { if (preg_match('/href=["\']?(?:\.\.\/)?(film\/[^"\'\s<>]+-\d+\.php)["\']?/i', $searchRes, $matches)) {
error_log("CinemaPassion: ❌ Recherche échouée pour '{$cleanTitle}'"); $filmUrl = "https://www.cinemapassion.com/" . ltrim($matches[1], './');
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray']; $filmRes = httpGet($filmUrl, 10);
}
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('/<a\s+href=["\']?(?:\.\.\/)?film\/([^"\'\s<>]+)-(\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]);
// Nettoyer le titre du lien pour comparaison if ($filmRes) {
$linkTitleClean = cleanTitle($linkTitle); // 3. Chercher la page jaquette haute définition
$linkNameClean = str_replace('-', ' ', $linkName); $jaquetteUrl = null;
if (preg_match('/href=["\']?(?:\.\.\/)?(jaquette-(?:dvd|blu-ray)-[^"\'\s<>]+\.php)["\']?/i', $filmRes, $jaqMatches)) {
// Calculer un score de correspondance $jaquetteUrl = "https://www.cinemapassion.com/" . ltrim($jaqMatches[1], './');
$score = 0; $jaquetteRes = httpGet($jaquetteUrl, 10);
// Correspondance exacte (titre ou nom URL) if ($jaquetteRes) {
if (strcasecmp($linkTitleClean, $cleanTitle) === 0) { // 4. Extraire l'image covers_temp
$score = 100; if (preg_match('/src=["\']?(https?:\/\/(?:www\.)?cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg)["\']?/i', $jaquetteRes, $imgMatches)) {
error_log("CinemaPassion: ✅✅✅ CORRESPONDANCE EXACTE (titre): '{$linkTitle}'"); return [
} elseif (strcasecmp($linkNameClean, $cleanTitle) === 0) { 'poster' => str_replace('http://', 'https://', $imgMatches[1]),
$score = 90; 'title' => $cleanTitle,
error_log("CinemaPassion: ✅✅ CORRESPONDANCE EXACTE (URL): '{$linkName}'"); 'format' => 'Blu-ray'
} ];
// 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}'");
} // 5. Fallback : si pas de page jaquette, on cherche covers_temp sur la page principale du film
// Correspondance partielle faible if (preg_match('/src=["\']?(https?:\/\/(?:www\.)?cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg)["\']?/i', $filmRes, $imgMatches)) {
elseif (stripos($linkTitleClean, $cleanTitle) !== false || stripos($linkNameClean, $cleanTitle) !== false) { if (strpos($imgMatches[1], 'miniature') === false && strpos($imgMatches[1], 'vign') === false) {
$score = 50; return [
error_log("CinemaPassion: ⚠️ Correspondance partielle: '{$linkTitle}' contient '{$cleanTitle}'"); 'poster' => str_replace('http://', 'https://', $imgMatches[1]),
} 'title' => $cleanTitle,
'format' => 'Blu-ray'
// 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'];
} }
} }
} }
// ❌ SUPPRESSION du fallback sur lesaffiches/ qui donne de mauvaises images // Si la recherche échoue, on retourne l'image par défaut
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'];
} }