Actualiser api.php
This commit is contained in:
@@ -137,7 +137,7 @@ function detectFormat($title, $desc = '') {
|
|||||||
return 'Blu-ray';
|
return 'Blu-ray';
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ── FONCTION POUR RÉCUPÉRER LES IMAGES DEPUIS CINEMAPASSION.COM ──
|
// ── FONCTION POUR RÉCUPÉRER LES IMAGES DEPUIS CINEMAPASSION.COM ──
|
||||||
function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
|
function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
|
||||||
$defaultPoster = 'assets/img/default_physical_media.jpg';
|
$defaultPoster = 'assets/img/default_physical_media.jpg';
|
||||||
$cleanTitle = cleanTitle($title);
|
$cleanTitle = cleanTitle($title);
|
||||||
@@ -158,55 +158,69 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
|
|||||||
|
|
||||||
error_log("CinemaPassion: ✅ Recherche OK, " . strlen($searchRes) . " caractères reçus");
|
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
|
// ÉTAPE 2 : Extraire TOUS les liens vers des films (pattern plus flexible)
|
||||||
$filmUrl = null;
|
$filmUrl = null;
|
||||||
$filmName = null;
|
$filmName = null;
|
||||||
$filmId = null;
|
$filmId = null;
|
||||||
$bestMatch = null;
|
$bestMatch = null;
|
||||||
$bestMatchScore = 0;
|
$bestMatchScore = 0;
|
||||||
|
|
||||||
// Pattern pour extraire tous les films avec leurs titres affichés
|
// Pattern flexible : cherche film/XXX-NNN.php avec ou sans balises HTML autour
|
||||||
if (preg_match_all('/<a\s+href=["\']?(?:\.\.\/)?film\/([^"\'\s<>]+)-(\d+)\.php["\']?[^>]*>([^<]+)<\/a>/i', $searchRes, $allMatches, PREG_SET_ORDER)) {
|
if (preg_match_all('/film\/([A-Za-z0-9\-]+)-(\d+)\.php/i', $searchRes, $allMatches, PREG_SET_ORDER)) {
|
||||||
error_log("CinemaPassion: " . count($allMatches) . " liens de films trouvés");
|
error_log("CinemaPassion: " . count($allMatches) . " liens de films trouvés");
|
||||||
|
|
||||||
|
// Dédupliquer les résultats
|
||||||
|
$uniqueFilms = [];
|
||||||
foreach ($allMatches as $match) {
|
foreach ($allMatches as $match) {
|
||||||
$linkName = $match[1];
|
$key = $match[1] . '-' . $match[2];
|
||||||
$linkId = $match[2];
|
if (!isset($uniqueFilms[$key])) {
|
||||||
$linkTitle = trim($match[3]);
|
$uniqueFilms[$key] = [
|
||||||
|
'name' => $match[1],
|
||||||
|
'id' => $match[2]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Nettoyer le titre du lien pour comparaison
|
foreach ($uniqueFilms as $film) {
|
||||||
$linkTitleClean = cleanTitle($linkTitle);
|
$linkName = $film['name'];
|
||||||
$linkNameClean = str_replace('-', ' ', $linkName);
|
$linkId = $film['id'];
|
||||||
|
|
||||||
|
// Nettoyer le nom pour comparaison
|
||||||
|
$linkNameClean = str_replace(['-', '_'], ' ', $linkName);
|
||||||
|
$linkNameClean = preg_replace('/\s+/', ' ', trim($linkNameClean));
|
||||||
|
|
||||||
// Calculer un score de correspondance
|
// Calculer un score de correspondance
|
||||||
$score = 0;
|
$score = 0;
|
||||||
|
|
||||||
// Correspondance exacte (titre ou nom URL)
|
// Correspondance exacte
|
||||||
if (strcasecmp($linkTitleClean, $cleanTitle) === 0) {
|
if (strcasecmp($linkNameClean, $cleanTitle) === 0) {
|
||||||
$score = 100;
|
$score = 100;
|
||||||
error_log("CinemaPassion: ✅✅✅ CORRESPONDANCE EXACTE (titre): '{$linkTitle}'");
|
error_log("CinemaPassion: ✅✅✅ CORRESPONDANCE EXACTE: '{$linkName}'");
|
||||||
} 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)
|
// Le nom contient le titre recherché
|
||||||
elseif (stripos($linkTitleClean, $cleanTitle) === 0 || stripos($linkNameClean, $cleanTitle) === 0) {
|
elseif (stripos($linkNameClean, $cleanTitle) !== false) {
|
||||||
|
$score = 80;
|
||||||
|
error_log("CinemaPassion: ✅ Correspondance forte: '{$linkName}' contient '{$cleanTitle}'");
|
||||||
|
}
|
||||||
|
// Le titre recherché contient le nom
|
||||||
|
elseif (stripos($cleanTitle, $linkNameClean) !== false) {
|
||||||
$score = 70;
|
$score = 70;
|
||||||
error_log("CinemaPassion: ✅ Correspondance début: '{$linkTitle}' contient '{$cleanTitle}'");
|
error_log("CinemaPassion: ✅ Correspondance: '{$cleanTitle}' contient '{$linkName}'");
|
||||||
|
}
|
||||||
|
// Similarité partielle
|
||||||
|
else {
|
||||||
|
similar_text(strtolower($linkNameClean), strtolower($cleanTitle), $percent);
|
||||||
|
if ($percent > 60) {
|
||||||
|
$score = 60;
|
||||||
|
error_log("CinemaPassion: ⚠️ Similarité {$percent}%: '{$linkName}' vs '{$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) {
|
if ($score > $bestMatchScore) {
|
||||||
$bestMatchScore = $score;
|
$bestMatchScore = $score;
|
||||||
$bestMatch = [
|
$bestMatch = [
|
||||||
'name' => $linkName,
|
'name' => $linkName,
|
||||||
'id' => $linkId,
|
'id' => $linkId,
|
||||||
'title' => $linkTitle,
|
|
||||||
'score' => $score
|
'score' => $score
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -219,14 +233,11 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
|
|||||||
$filmId = $bestMatch['id'];
|
$filmId = $bestMatch['id'];
|
||||||
error_log("CinemaPassion: ✅ Meilleur match sélectionné (score: {$bestMatch['score']}): {$filmName}-{$filmId}");
|
error_log("CinemaPassion: ✅ Meilleur match sélectionné (score: {$bestMatch['score']}): {$filmName}-{$filmId}");
|
||||||
} else {
|
} else {
|
||||||
error_log("CinemaPassion: ❌ Aucune correspondance suffisante trouvée (meilleur score: " . ($bestMatch['score'] ?? 0) . ")");
|
error_log("CinemaPassion: ❌ Aucune correspondance suffisante (meilleur score: " . ($bestMatch['score'] ?? 0) . ")");
|
||||||
|
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
error_log("CinemaPassion: ❌ Aucun lien de film trouvé dans les résultats");
|
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'];
|
return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,11 +252,10 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
|
|||||||
|
|
||||||
error_log("CinemaPassion: ✅ Page film OK, " . strlen($filmPageRes) . " caractères reçus");
|
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 (pattern flexible)
|
||||||
$jaquetteUrl = null;
|
$jaquetteUrl = null;
|
||||||
|
|
||||||
// Pattern pour trouver le chemin de la jaquette
|
if (preg_match('/jaquette-(?:dvd|blu-ray)-[A-Za-z0-9\-]+-\d+\.php/i', $filmPageRes, $matches)) {
|
||||||
if (preg_match('/jaquette-(?:dvd|blu-ray)-[^"\'\s<>]+\.php/i', $filmPageRes, $matches)) {
|
|
||||||
$jaquettePath = $matches[0];
|
$jaquettePath = $matches[0];
|
||||||
$jaquettePath = str_replace('../', '', $jaquettePath);
|
$jaquettePath = str_replace('../', '', $jaquettePath);
|
||||||
$jaquetteUrl = "https://www.cinemapassion.com/" . $jaquettePath;
|
$jaquetteUrl = "https://www.cinemapassion.com/" . $jaquettePath;
|
||||||
@@ -254,7 +264,7 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
|
|||||||
error_log("CinemaPassion: ⚠️ Aucun lien de jaquette trouvé dans la page film");
|
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
|
||||||
if ($jaquetteUrl) {
|
if ($jaquetteUrl) {
|
||||||
error_log("CinemaPassion: Accès à la page jaquette: {$jaquetteUrl}");
|
error_log("CinemaPassion: Accès à la page jaquette: {$jaquetteUrl}");
|
||||||
$jaquettePageRes = httpGet($jaquetteUrl, 10);
|
$jaquettePageRes = httpGet($jaquetteUrl, 10);
|
||||||
@@ -262,15 +272,21 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
|
|||||||
if ($jaquettePageRes) {
|
if ($jaquettePageRes) {
|
||||||
error_log("CinemaPassion: ✅ Page jaquette OK, " . strlen($jaquettePageRes) . " caractères reçus");
|
error_log("CinemaPassion: ✅ Page jaquette OK, " . strlen($jaquettePageRes) . " caractères reçus");
|
||||||
|
|
||||||
// Chercher l'image dans covers_temp/ (les vraies jaquettes)
|
// Pattern flexible pour covers_temp
|
||||||
if (preg_match('/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg/i', $jaquettePageRes, $imgMatches)) {
|
if (preg_match('/covers_temp\/covers\d*\/[A-Za-z0-9\-_]+\.jpg/i', $jaquettePageRes, $imgMatches)) {
|
||||||
$posterUrl = $imgMatches[0];
|
$posterUrl = $imgMatches[0];
|
||||||
if (strpos($posterUrl, 'http') !== 0) {
|
if (strpos($posterUrl, 'http') !== 0) {
|
||||||
$posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/');
|
$posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/');
|
||||||
}
|
}
|
||||||
$posterUrl = str_replace('http://', 'https://', $posterUrl);
|
$posterUrl = str_replace('http://', 'https://', $posterUrl);
|
||||||
|
|
||||||
|
// Vérifier que l'image existe vraiment
|
||||||
|
if (urlExists($posterUrl, 3)) {
|
||||||
error_log("CinemaPassion: ✅✅✅ Image trouvée (jaquette): '{$cleanTitle}' → {$posterUrl}");
|
error_log("CinemaPassion: ✅✅✅ Image trouvée (jaquette): '{$cleanTitle}' → {$posterUrl}");
|
||||||
return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
|
return ['poster' => $posterUrl, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
|
||||||
|
} else {
|
||||||
|
error_log("CinemaPassion: ⚠️ Image trouvée mais inaccessible: {$posterUrl}");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
error_log("CinemaPassion: ❌ Image covers_temp non trouvée dans la page jaquette");
|
error_log("CinemaPassion: ❌ Image covers_temp non trouvée dans la page jaquette");
|
||||||
}
|
}
|
||||||
@@ -281,7 +297,7 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
|
|||||||
|
|
||||||
// ÉTAPE 6 : Fallback - Chercher covers_temp directement sur la page du film
|
// ÉTAPE 6 : Fallback - Chercher covers_temp directement sur la page du film
|
||||||
error_log("CinemaPassion: Tentative fallback sur la page film...");
|
error_log("CinemaPassion: Tentative fallback sur la page film...");
|
||||||
if (preg_match_all('/covers_temp\/covers\d*\/[^"\'\s<>]+\.jpg/i', $filmPageRes, $allMatches)) {
|
if (preg_match_all('/covers_temp\/covers\d*\/[A-Za-z0-9\-_]+\.jpg/i', $filmPageRes, $allMatches)) {
|
||||||
foreach ($allMatches[0] as $imgPath) {
|
foreach ($allMatches[0] as $imgPath) {
|
||||||
if (strpos($imgPath, 'miniature') === false && strpos($imgPath, 'vign') === false) {
|
if (strpos($imgPath, 'miniature') === false && strpos($imgPath, 'vign') === false) {
|
||||||
$posterUrl = $imgPath;
|
$posterUrl = $imgPath;
|
||||||
@@ -289,14 +305,16 @@ function fetchCinemaPassion($title, $year = '', $ean = '', $pdo = null) {
|
|||||||
$posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/');
|
$posterUrl = 'https://www.cinemapassion.com/' . ltrim($posterUrl, '/');
|
||||||
}
|
}
|
||||||
$posterUrl = str_replace('http://', 'https://', $posterUrl);
|
$posterUrl = str_replace('http://', 'https://', $posterUrl);
|
||||||
|
|
||||||
|
if (urlExists($posterUrl, 3)) {
|
||||||
error_log("CinemaPassion: ✅✅ Image trouvée (covers_temp direct): '{$cleanTitle}' → {$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'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ❌ SUPPRESSION du fallback sur lesaffiches/ qui donne de mauvaises images
|
error_log("CinemaPassion: ❌❌ Image NON trouvée pour '{$cleanTitle}'");
|
||||||
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'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user