Actualiser api.php
This commit is contained in:
@@ -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) {
|
||||
// 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 (preg_match('/href=["\']?(?:\.\.\/)?(film\/[^"\'\s<>]+-\d+\.php)["\']?/i', $searchRes, $matches)) {
|
||||
$filmUrl = "https://www.cinemapassion.com/" . ltrim($matches[1], './');
|
||||
$filmRes = httpGet($filmUrl, 10);
|
||||
|
||||
if (!$searchRes) {
|
||||
error_log("CinemaPassion: ❌ Recherche échouée pour '{$cleanTitle}'");
|
||||
return ['poster' => $defaultPoster, '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);
|
||||
|
||||
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
|
||||
$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
|
||||
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'
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// 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'];
|
||||
// 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'];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user