Actualiser api.php

This commit is contained in:
2026-06-26 14:34:17 +02:00
parent ac08a2e441
commit 0d3416c332
+79 -31
View File
@@ -146,93 +146,141 @@ 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}' ===");
// ÉTAPE 1 : Recherche POST sur /moteur2.php // ÉTAPE 1 : Recherche POST sur /moteur2.php
$searchRes = httpPost('https://www.cinemapassion.com/moteur2.php', ['recherche' => $cleanTitle]); $searchRes = httpPost('https://www.cinemapassion.com/moteur2.php', ['recherche' => $cleanTitle]);
if (!$searchRes) { if (!$searchRes) {
error_log("CinemaPassion: Recherche échouée pour '{$cleanTitle}'"); error_log("CinemaPassion: Recherche échouée pour '{$cleanTitle}'");
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray']; return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} }
// ÉTAPE 2 : Trouver le lien qui correspond EXACTEMENT au titre error_log("CinemaPassion: ✅ Recherche OK, " . strlen($searchRes) . " caractères reçus");
// ÉTAPE 2 : Trouver tous les liens vers des films (pattern simplifié)
$filmUrl = null; $filmUrl = null;
$filmName = null; $filmName = null;
$filmId = null; $filmId = null;
if (preg_match_all('/<a\s+href=["\']?(?:\.\.\/)?film\/([^"\'\s]+)-(\d+)\.php["\']?[^>]*>([^<]+)<\/a>/i', $searchRes, $matches, PREG_SET_ORDER)) { // Pattern simplifié : cherche film/XXX-NNN.php n'importe où dans le HTML
foreach ($matches as $match) { if (preg_match_all('/film\/([^"\'\s<>]+)-(\d+)\.php/i', $searchRes, $allMatches, PREG_SET_ORDER)) {
$linkTitle = trim($match[3]); 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]; $linkName = $match[1];
$linkId = $match[2]; $linkId = $match[2];
if (strcasecmp($linkTitle, $cleanTitle) === 0 || // Comparer le nom du film (dans l'URL) avec le titre recherché
stripos($linkTitle, $cleanTitle) !== false || $linkNameClean = str_replace('-', ' ', $linkName);
stripos($cleanTitle, $linkTitle) !== false) { if (strcasecmp($linkNameClean, $cleanTitle) === 0 ||
stripos($linkNameClean, $cleanTitle) !== false ||
stripos($cleanTitle, $linkNameClean) !== false) {
$filmUrl = "https://www.cinemapassion.com/film/{$linkName}-{$linkId}.php"; $filmUrl = "https://www.cinemapassion.com/film/{$linkName}-{$linkId}.php";
$filmName = $linkName; $filmName = $linkName;
$filmId = $linkId; $filmId = $linkId;
error_log("CinemaPassion: ✅ Film trouvé par nom: {$filmName}-{$filmId}");
break; break;
} }
} }
if (!$filmUrl && !empty($matches)) { // Si pas trouvé, prendre le premier résultat
$filmName = $matches[0][1]; if (!$filmUrl && !empty($allMatches)) {
$filmId = $matches[0][2]; $filmName = $allMatches[0][1];
$filmId = $allMatches[0][2];
$filmUrl = "https://www.cinemapassion.com/film/{$filmName}-{$filmId}.php"; $filmUrl = "https://www.cinemapassion.com/film/{$filmName}-{$filmId}.php";
error_log("CinemaPassion: ⚠️ Premier film utilisé: {$filmName}-{$filmId}");
} }
} else {
error_log("CinemaPassion: ❌ Aucun lien de film trouvé dans les résultats");
} }
if (!$filmUrl) { if (!$filmUrl) {
error_log("CinemaPassion: Film non trouvé pour '{$cleanTitle}'"); error_log("CinemaPassion: Film non trouvé pour '{$cleanTitle}'");
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray']; return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} }
// ÉTAPE 3 : Aller sur la page du film // ÉTAPE 3 : Aller sur la page du film
error_log("CinemaPassion: Accès à la page film: {$filmUrl}");
$filmPageRes = httpGet($filmUrl, 10); $filmPageRes = httpGet($filmUrl, 10);
if (!$filmPageRes) { if (!$filmPageRes) {
error_log("CinemaPassion: Page film inaccessible : {$filmUrl}"); error_log("CinemaPassion: Page film inaccessible : {$filmUrl}");
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray']; 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 // ÉTAPE 4 : Chercher le lien vers la jaquette DVD ou Blu-ray
$jaquetteUrl = null; $jaquetteUrl = null;
if (preg_match('/href=["\']?(?:\.\.\/)?(jaquette-(?:dvd|blu-ray)-[^"\'\s]+\.php)["\']?/i', $filmPageRes, $matches)) { // Pattern simplifié pour trouver le chemin de la jaquette
$jaquettePath = $matches[1]; if (preg_match('/jaquette-(?:dvd|blu-ray)-[^"\'\s<>]+\.php/i', $filmPageRes, $matches)) {
$jaquetteUrl = "https://www.cinemapassion.com/" . str_replace('../', '', $jaquettePath); $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}");
} 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 // É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}");
$jaquettePageRes = httpGet($jaquetteUrl, 10); $jaquettePageRes = httpGet($jaquetteUrl, 10);
if ($jaquettePageRes) { if ($jaquettePageRes) {
// Pattern SPÉCIFIQUE : chercher UNIQUEMENT dans covers_temp/ (les vraies jaquettes) error_log("CinemaPassion: ✅ Page jaquette OK, " . strlen($jaquettePageRes) . " caractères reçus");
if (preg_match('/src=["\']?(https?:\/\/(?:www\.)?cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s>]+\.jpg)["\']?/i', $jaquettePageRes, $imgMatches)) {
$posterUrl = $imgMatches[1]; // Pattern simplifié pour chercher l'image dans covers_temp/
$posterUrl = str_replace('http://', 'https://', $posterUrl); if (preg_match('/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg/i', $jaquettePageRes, $imgMatches)) {
error_log("CinemaPassion OK (jaquette): '{$cleanTitle}' → {$posterUrl}"); $posterUrl = $imgMatches[0];
return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray']; // S'assurer que l'URL est complète
if (strpos($posterUrl, 'http') !== 0) {
$posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/');
} }
$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 // ÉTAPE 6 : Fallback - Chercher covers_temp directement sur la page du film
// Mais IGNORER les miniatures et les sections "Actuellement" error_log("CinemaPassion: Tentative fallback sur la page film...");
if (preg_match_all('/src=["\']?(https?:\/\/(?:www\.)?cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s>]+\.jpg)["\']?/i', $filmPageRes, $allMatches)) { if (preg_match_all('/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg/i', $filmPageRes, $allMatches)) {
// Prendre la PREMIÈRE vraie jaquette (pas les miniatures) foreach ($allMatches[0] as $imgPath) {
foreach ($allMatches[1] as $imgUrl) { if (strpos($imgPath, 'miniature') === false && strpos($imgPath, 'vign') === false) {
// Vérifier que ce n'est pas une miniature $posterUrl = $imgPath;
if (strpos($imgUrl, 'miniature') === false && strpos($imgUrl, 'vign') === false) { if (strpos($posterUrl, 'http') !== 0) {
$posterUrl = str_replace('http://', 'https://', $imgUrl); $posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/');
error_log("CinemaPassion OK (covers_temp direct): '{$cleanTitle}' → {$posterUrl}"); }
$posterUrl = str_replace('http://', 'https://', $posterUrl);
error_log("CinemaPassion: ✅✅ Image trouvée (covers_temp direct): '{$cleanTitle}' → {$posterUrl}");
return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray']; return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} }
} }
} }
error_log("CinemaPassion KO: Image NON trouvée pour '{$cleanTitle}'"); // É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}'");
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray']; return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} }