Actualiser api.php

This commit is contained in:
2026-06-26 13:44:53 +02:00
parent 29adedb2b0
commit edc602c16e
+151 -16
View File
@@ -158,11 +158,9 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
if ($html) {
// ── ÉTAPE 2 : Extraire le lien vers la page du film ──
// Pattern : href='../film/Saw-3814.php'
if (preg_match('/href=["\']([^"\']*film\/[^"\'\/]+-\d+\.php)["\']/i', $html, $matches)) {
$filmPath = $matches[1];
// Normaliser l'URL
$filmPath = str_replace('../', '', $filmPath);
if (strpos($filmPath, '/') !== 0) {
$filmUrl = 'https://www.cinemapassion.com/' . $filmPath;
@@ -170,8 +168,6 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
$filmUrl = 'https://www.cinemapassion.com' . $filmPath;
}
// Extraire le nom-slug et l'ID numérique
// Ex: film/Saw-3814.php → filmName=Saw, filmId=3814
if (preg_match('/film\/([^\/]+)-(\d+)\.php/i', $filmUrl, $filmMatches)) {
$filmName = $filmMatches[1];
$filmId = $filmMatches[2];
@@ -188,13 +184,9 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
$pageRes = httpGet($pageUrl, 10, $userAgent);
if ($pageRes) {
// Pattern : src='http://www.cinemapassion.com/covers_temp/covers3/Saw-13005811062007.jpg'
$imgPattern = '/src=["\']?(https?:\/\/www\.cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s>]+\.jpg)["\']?/i';
if (preg_match($imgPattern, $pageRes, $imgMatches)) {
// Pattern plus flexible pour capturer l'image
if (preg_match('/src=["\']?(https?:\/\/[^"\'\s>]*cinemapassion\.com[^"\'\s>]*covers[^"\'\s>]*\.jpg)["\']?/i', $pageRes, $imgMatches)) {
$posterUrl = $imgMatches[1];
// Forcer HTTPS
$posterUrl = str_replace('http://', 'https://', $posterUrl);
error_log("CinemaPassion: Image trouvée pour '{$cleanTitle}' → {$posterUrl}");
@@ -211,8 +203,7 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
}
// ── FALLBACK : Chercher directement une image dans les résultats ──
$imgPattern = '/src=["\']?(https?:\/\/www\.cinemapassion\.com\/covers_temp\/covers\d*\/[^"\'\s>]+\.jpg)["\']?/i';
if (preg_match($imgPattern, $html, $imgMatches)) {
if (preg_match('/src=["\']?(https?:\/\/[^"\'\s>]*cinemapassion\.com[^"\'\s>]*covers[^"\'\s>]*\.jpg)["\']?/i', $html, $imgMatches)) {
$posterUrl = str_replace('http://', 'https://', $imgMatches[1]);
error_log("CinemaPassion: Image trouvée (fallback) pour '{$cleanTitle}' → {$posterUrl}");
return [
@@ -614,13 +605,157 @@ case 'get_config_keys':
echo json_encode(["success" => true, "imported" => $imported]);
break;
case 'debug_cinemapassion':
$title = $_GET['title'] ?? '';
// ── ENDPOINT DE DEBUG DÉTAILLÉ ──
case 'debug_cinemapassion_detailed':
$title = $_GET['title'] ?? 'Saw';
$year = $_GET['year'] ?? '';
$ean = $_GET['ean'] ?? '';
$result = fetchCinemaPassion($title, $year, $ean, $pdo);
echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
$debugInfo = [
'title' => $title,
'year' => $year,
'ean' => $ean,
'cleanTitle' => cleanTitle($title),
'steps' => []
];
$userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36';
// ÉTAPE 1 : Test de la recherche POST
$searchUrl = "https://www.cinemapassion.com/moteur2.php";
$ch = curl_init($searchUrl);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_USERAGENT => $userAgent,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(['recherche' => cleanTitle($title)]),
CURLOPT_REFERER => 'https://www.cinemapassion.com/',
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: fr-FR,fr;q=0.8',
'Origin: https://www.cinemapassion.com'
],
]);
$searchRes = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$debugInfo['steps']['search'] = [
'url' => $searchUrl,
'http_code' => $code,
'response_length' => strlen($searchRes),
'success' => ($code === 200 && !empty($searchRes))
];
if ($code === 200 && $searchRes) {
// ÉTAPE 2 : Extraction du lien film
if (preg_match('/href=["\']([^"\']*film\/[^"\'\/]+-\d+\.php)["\']/i', $searchRes, $matches)) {
$filmPath = $matches[1];
$filmPath = str_replace('../', '', $filmPath);
$filmUrl = 'https://www.cinemapassion.com/' . $filmPath;
$debugInfo['steps']['film_link'] = [
'found' => true,
'filmPath' => $filmPath,
'filmUrl' => $filmUrl
];
// ÉTAPE 3 : Extraction du nom et ID
if (preg_match('/film\/([^\/]+)-(\d+)\.php/i', $filmUrl, $filmMatches)) {
$filmName = $filmMatches[1];
$filmId = $filmMatches[2];
$debugInfo['steps']['film_details'] = [
'filmName' => $filmName,
'filmId' => $filmId
];
// ÉTAPE 4 : Test des pages de jaquettes
$pagesToTry = [
"https://www.cinemapassion.com/jaquette-dvd-{$filmName}-{$filmId}.php",
"https://www.cinemapassion.com/jaquette-blu-ray-{$filmName}-{$filmId}.php",
$filmUrl,
"https://www.cinemapassion.com/sticker-dvd-{$filmName}-{$filmId}.php",
];
foreach ($pagesToTry as $index => $pageUrl) {
$pageRes = httpGet($pageUrl, 10, $userAgent);
$pageDebug = [
'url' => $pageUrl,
'success' => !empty($pageRes),
'response_length' => strlen($pageRes)
];
if ($pageRes) {
// Test du pattern d'image
if (preg_match('/src=["\']?(https?:\/\/[^"\'\s>]*cinemapassion\.com[^"\'\s>]*covers[^"\'\s>]*\.jpg)["\']?/i', $pageRes, $imgMatches)) {
$posterUrl = str_replace('http://', 'https://', $imgMatches[1]);
$pageDebug['image_found'] = true;
$pageDebug['image_url'] = $posterUrl;
$debugInfo['steps']['pages_tested'][$index] = $pageDebug;
$debugInfo['final_result'] = [
'success' => true,
'poster' => $posterUrl,
'title' => cleanTitle($title),
'format' => 'Blu-ray'
];
echo json_encode($debugInfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
exit;
} else {
$pageDebug['image_found'] = false;
// Extraire un extrait du HTML pour debug
$pageDebug['html_snippet'] = substr($pageRes, 0, 500);
}
}
$debugInfo['steps']['pages_tested'][$index] = $pageDebug;
}
}
} else {
$debugInfo['steps']['film_link'] = [
'found' => false,
'html_snippet' => substr($searchRes, 0, 1000)
];
}
// Test du fallback
if (preg_match('/src=["\']?(https?:\/\/[^"\'\s>]*cinemapassion\.com[^"\'\s>]*covers[^"\'\s>]*\.jpg)["\']?/i', $searchRes, $imgMatches)) {
$posterUrl = str_replace('http://', 'https://', $imgMatches[1]);
$debugInfo['steps']['fallback'] = [
'success' => true,
'image_url' => $posterUrl
];
$debugInfo['final_result'] = [
'success' => true,
'poster' => $posterUrl,
'title' => cleanTitle($title),
'format' => 'Blu-ray'
];
} else {
$debugInfo['steps']['fallback'] = [
'success' => false
];
}
}
if (!isset($debugInfo['final_result'])) {
$debugInfo['final_result'] = [
'success' => false,
'poster' => 'assets/img/default_physical_media.jpg',
'title' => cleanTitle($title),
'format' => 'Blu-ray'
];
}
echo json_encode($debugInfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
exit;
break;
}