Actualiser api.php

This commit is contained in:
2026-06-26 15:19:29 +02:00
parent 9b956029bb
commit df2554d4be
+64 -38
View File
@@ -146,51 +146,77 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
return ['poster' => $defaultPoster, 'title' => '', 'format' => 'Blu-ray']; return ['poster' => $defaultPoster, 'title' => '', 'format' => 'Blu-ray'];
} }
// 1. Recherche en GET (beaucoup plus fiable que le POST sur ce site) $baseUrl = 'http://www.cinemapassion.com';
$searchUrl = "https://www.cinemapassion.com/recherche.php?recherche=" . urlencode($cleanTitle);
$searchRes = httpGet($searchUrl, 10);
if ($searchRes) { // 1. Initialisation d'une session cURL UNIQUE (Partage des cookies)
// 2. Extraire directement le premier lien de film // C'est vital car moteur2.php utilise des sessions PHP pour la recherche
// On ne cherche plus à lire le contenu de la balise <a> pour éviter les bugs liés au HTML interne $ch = curl_init();
if (preg_match('/href=["\']?(?:\.\.\/)?(film\/[^"\'\s<>]+-\d+\.php)["\']?/i', $searchRes, $matches)) { curl_setopt_array($ch, [
$filmUrl = "https://www.cinemapassion.com/" . ltrim($matches[1], './'); CURLOPT_RETURNTRANSFER => true,
$filmRes = httpGet($filmUrl, 10); CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 5,
if ($filmRes) { CURLOPT_TIMEOUT => 10,
// 3. Chercher la page jaquette haute définition CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
$jaquetteUrl = null; CURLOPT_COOKIEFILE => '', // Active le stockage des cookies en RAM entre les requêtes
if (preg_match('/href=["\']?(?:\.\.\/)?(jaquette-(?:dvd|blu-ray)-[^"\'\s<>]+\.php)["\']?/i', $filmRes, $jaqMatches)) { CURLOPT_REFERER => $baseUrl . '/',
$jaquetteUrl = "https://www.cinemapassion.com/" . ltrim($jaqMatches[1], './'); CURLOPT_SSL_VERIFYPEER => false
$jaquetteRes = httpGet($jaquetteUrl, 10); ]);
if ($jaquetteRes) { // 2. Recherche via POST
// 4. Extraire l'image covers_temp curl_setopt($ch, CURLOPT_URL, $baseUrl . '/moteur2.php');
if (preg_match('/src=["\']?(https?:\/\/(?:www\.)?cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg)["\']?/i', $jaquetteRes, $imgMatches)) { curl_setopt($ch, CURLOPT_POST, true);
return [ curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['recherche' => $cleanTitle]));
'poster' => str_replace('http://', 'https://', $imgMatches[1]), $html = curl_exec($ch);
'title' => $cleanTitle,
'format' => 'Blu-ray' // 3. Extraction du lien du film
]; $filmUrl = null;
} if ($html && preg_match('/href=["\']?(?:.*?\/)?(film\/[^"\'\s>]+)["\']?/i', $html, $matches)) {
} $filmUrl = $baseUrl . '/' . $matches[1];
} } else {
// Plan B : Recherche via GET si le POST échoue
curl_setopt($ch, CURLOPT_URL, $baseUrl . '/recherche.php?recherche=' . urlencode($cleanTitle));
curl_setopt($ch, CURLOPT_POST, false);
$html = curl_exec($ch);
if ($html && preg_match('/href=["\']?(?:.*?\/)?(film\/[^"\'\s>]+)["\']?/i', $html, $matches)) {
$filmUrl = $baseUrl . '/' . $matches[1];
}
}
// 4. Si on a trouvé le film, on charge sa page
if ($filmUrl) {
curl_setopt($ch, CURLOPT_URL, $filmUrl);
curl_setopt($ch, CURLOPT_POST, false);
$filmHtml = curl_exec($ch);
if ($filmHtml) {
// 5. Chercher le lien de la page contenant la jaquette
if (preg_match('/href=["\']?(?:.*?\/)?(jaquette-(?:dvd|blu-ray)-[^"\'\s>]+)["\']?/i', $filmHtml, $jaqMatches)) {
$jaqUrl = $baseUrl . '/' . $jaqMatches[1];
// 5. Fallback : si pas de page jaquette, on cherche covers_temp sur la page principale du film // Charger la page de la jaquette
if (preg_match('/src=["\']?(https?:\/\/(?:www\.)?cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg)["\']?/i', $filmRes, $imgMatches)) { curl_setopt($ch, CURLOPT_URL, $jaqUrl);
if (strpos($imgMatches[1], 'miniature') === false && strpos($imgMatches[1], 'vign') === false) { $jaqHtml = curl_exec($ch);
return [
'poster' => str_replace('http://', 'https://', $imgMatches[1]), // 6. Extraire l'image haute définition (covers_temp/covers...)
'title' => $cleanTitle, if ($jaqHtml && preg_match('/src=["\']?(http:\/\/www\.cinemapassion\.com\/covers_temp\/covers[^"\'\s>]+)["\']?/i', $jaqHtml, $imgMatches)) {
'format' => 'Blu-ray' curl_close($ch);
]; // On convertit l'URL en HTTPS pour éviter les erreurs de contenu mixte sur votre site web
} return ['poster' => str_replace('http://', 'https://', $imgMatches[1]), 'title' => $cleanTitle, 'format' => 'Blu-ray'];
}
}
// Fallback : Si aucune sous-page jaquette n'existe, on cherche l'image directement sur la page du film
if (preg_match('/src=["\']?(http:\/\/www\.cinemapassion\.com\/covers_temp\/covers[^"\'\s>]+)["\']?/i', $filmHtml, $imgMatches)) {
// On s'assure qu'on ne prend pas les miniatures
if (strpos($imgMatches[1], 'miniature') === false) {
curl_close($ch);
return ['poster' => str_replace('http://', 'https://', $imgMatches[1]), 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} }
} }
} }
} }
// Si la recherche échoue, on retourne l'image par défaut curl_close($ch);
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray']; return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} }