Actualiser api.php

This commit is contained in:
2026-06-26 12:05:36 +02:00
parent 88ef24780a
commit b20ded263e
+99 -90
View File
@@ -120,43 +120,55 @@ function extractYear($dateStr) {
return ''; return '';
} }
// ── FONCTION POUR RÉCUPÉRER LES IMAGES DEPUIS BLU-RAY.COM ── // ── FONCTION POUR RÉCUPÉRER LES IMAGES DEPUIS NOTRECINEMA.COM ──
function fetchBluRayCom($ean, $title = '', $year = '', $pdo = null) { function fetchNotreCinema($title, $year = '', $ean = '', $pdo = null) {
$defaultPoster = 'assets/img/default_physical_media.jpg'; $defaultPoster = 'assets/img/default_physical_media.jpg';
if (empty($ean) && empty($title)) { if (empty($title)) {
return ['poster' => $defaultPoster, 'title' => $title, 'format' => 'Blu-ray']; return ['poster' => $defaultPoster, 'title' => '', 'format' => 'Blu-ray'];
}
// Nettoyer l'EAN
$cleanEan = '';
if (!empty($ean)) {
$cleanEan = preg_replace('/[^0-9]/', '', $ean);
} }
$cleanTitle = cleanTitle($title);
$userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'; $userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
// Recherche par EAN/UPC d'abord // ÉTAPE 1 : Recherche sur notrecinema.com
if (!empty($cleanEan)) { $searchUrl = "https://www.notrecinema.com/communaute/stubs.php?stub=" . urlencode($cleanTitle);
$searchUrl = "https://www.blu-ray.com/search/?quicksearch=1&searchtype=products&q=" . urlencode($cleanEan); if (!empty($year)) {
$searchRes = httpGet($searchUrl, 5, $userAgent); $searchUrl .= "&annee=" . $year;
}
if ($searchRes && preg_match('/<a href="\/products\/\?id=(\d+)"[^>]*>/i', $searchRes, $matches)) { $searchRes = httpGet($searchUrl, 10, $userAgent);
$productId = $matches[1];
$productUrl = "https://www.blu-ray.com/products/?id=" . $productId;
$productRes = httpGet($productUrl, 5, $userAgent); if ($searchRes) {
// Extraire le lien vers la page du film
if (preg_match('/<a href="\/communaute\/stubs\.php\?stub=([^"]+)"[^>]*>/i', $searchRes, $matches)) {
$filmSlug = $matches[1];
$filmUrl = "https://www.notrecinema.com/communaute/stubs.php?stub=" . $filmSlug;
if ($productRes) { $filmRes = httpGet($filmUrl, 10, $userAgent);
// Extraire l'image principale
if (preg_match('/<img[^>]*id="home_release_img"[^>]*src="([^"]+)"/i', $productRes, $imgMatches)) { if ($filmRes) {
// Extraire l'image d'affiche
$posterUrl = null;
// Chercher l'image principale du film
if (preg_match('/<img[^>]*class="[^"]*affiche[^"]*"[^>]*src="([^"]+)"/i', $filmRes, $imgMatches)) {
$posterUrl = $imgMatches[1]; $posterUrl = $imgMatches[1];
// Convertir en haute résolution } elseif (preg_match('/<div[^>]*class="[^"]*film_affiche[^"]*"[^>]*>.*?<img[^>]*src="([^"]+)"/is', $filmRes, $imgMatches)) {
$posterUrl = str_replace('/resized/', '/', $posterUrl); $posterUrl = $imgMatches[1];
} elseif (preg_match('/<img[^>]*src="(https:\/\/www\.notrecinema\.com\/images\/films\/[^"]+)"/i', $filmRes, $imgMatches)) {
$posterUrl = $imgMatches[1];
}
if (!empty($posterUrl)) {
// S'assurer que l'URL est absolue
if (strpos($posterUrl, 'http') !== 0) {
$posterUrl = 'https://www.notrecinema.com' . $posterUrl;
}
return [ return [
'poster' => $posterUrl, 'poster' => $posterUrl,
'title' => $title, 'title' => $cleanTitle,
'format' => 'Blu-ray' 'format' => 'Blu-ray'
]; ];
} }
@@ -164,33 +176,30 @@ function fetchBluRayCom($ean, $title = '', $year = '', $pdo = null) {
} }
} }
// Fallback : recherche par titre // ÉTAPE 2 : Recherche alternative par EAN si disponible
if (!empty($title)) { if (!empty($ean)) {
$cleanTitle = cleanTitle($title); $cleanEan = preg_replace('/[^0-9]/', '', $ean);
$searchUrl = "https://www.blu-ray.com/search/?quicksearch=1&searchtype=movies&q=" . urlencode($cleanTitle); $searchUrl = "https://www.notrecinema.com/communaute/recherche.php?recherche=" . urlencode($cleanEan);
$searchRes = httpGet($searchUrl, 5, $userAgent); $searchRes = httpGet($searchUrl, 10, $userAgent);
if ($searchRes && preg_match('/<a href="\/movies\/\?id=(\d+)"[^>]*>/i', $searchRes, $matches)) { if ($searchRes && preg_match('/<a href="\/communaute\/stubs\.php\?stub=([^"]+)"[^>]*>/i', $searchRes, $matches)) {
$movieId = $matches[1]; $filmSlug = $matches[1];
$movieUrl = "https://www.blu-ray.com/movies/?id=" . $movieId; $filmUrl = "https://www.notrecinema.com/communaute/stubs.php?stub=" . $filmSlug;
$movieRes = httpGet($movieUrl, 5, $userAgent); $filmRes = httpGet($filmUrl, 10, $userAgent);
if ($movieRes && preg_match('/<img[^>]*id="home_release_img"[^>]*src="([^"]+)"/i', $movieRes, $imgMatches)) {
$posterUrl = $imgMatches[1];
$posterUrl = str_replace('/resized/', '/', $posterUrl);
if ($filmRes && preg_match('/<img[^>]*src="(https:\/\/www\.notrecinema\.com\/images\/films\/[^"]+)"/i', $filmRes, $imgMatches)) {
return [ return [
'poster' => $posterUrl, 'poster' => $imgMatches[1],
'title' => $title, 'title' => $cleanTitle,
'format' => 'Blu-ray' 'format' => 'Blu-ray'
]; ];
} }
} }
} }
return ['poster' => $defaultPoster, 'title' => $title, 'format' => 'Blu-ray']; return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray'];
} }
// ── ROUTEUR PRINCIPAL ── // ── ROUTEUR PRINCIPAL ──
@@ -483,64 +492,64 @@ case 'get_config_keys':
else { http_response_code(400); echo json_encode(["success" => false, "error" => "Aucun élément sélectionné."]); } else { http_response_code(400); echo json_encode(["success" => false, "error" => "Aucun élément sélectionné."]); }
break; break;
case 'import_batch': case 'import_batch':
checkAuth($pdo); checkAuth($pdo);
$data = json_decode(file_get_contents("php://input"), true); $data = json_decode(file_get_contents("php://input"), true);
$type = $data['type'] ?? 'critique'; $type = $data['type'] ?? 'critique';
$items = $data['items'] ?? []; $items = $data['items'] ?? [];
$pdo->beginTransaction(); $pdo->beginTransaction();
$imported = 0; $imported = 0;
if ($type === 'videotheque') { if ($type === 'videotheque') {
$stmtVideo = $pdo->prepare("INSERT INTO videotheque (id, title, year, format, poster, ean_isbn13, description, length, number_of_discs, aspect_ratio, actors, publisher, director) $stmtVideo = $pdo->prepare("INSERT INTO videotheque (id, title, year, format, poster, ean_isbn13, description, length, number_of_discs, aspect_ratio, actors, publisher, director)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE ON DUPLICATE KEY UPDATE
ean_isbn13 = VALUES(ean_isbn13), ean_isbn13 = VALUES(ean_isbn13),
poster = VALUES(poster), poster = VALUES(poster),
description = VALUES(description), description = VALUES(description),
format = VALUES(format), format = VALUES(format),
length = VALUES(length), length = VALUES(length),
number_of_discs = VALUES(number_of_discs), number_of_discs = VALUES(number_of_discs),
aspect_ratio = VALUES(aspect_ratio), aspect_ratio = VALUES(aspect_ratio),
actors = VALUES(actors), actors = VALUES(actors),
publisher = VALUES(publisher)"); publisher = VALUES(publisher)");
foreach ($items as $item) { foreach ($items as $item) {
$title = $item['title'] ?? ''; $title = $item['title'] ?? '';
if (empty($title)) continue; if (empty($title)) continue;
$year = $item['year'] ?? ''; $year = $item['year'] ?? '';
$ean = $item['ean'] ?? ''; $ean = $item['ean'] ?? '';
$desc = $item['description'] ?? ''; $desc = $item['description'] ?? '';
$length = $item['length'] ?? ''; $length = $item['length'] ?? '';
$discs = $item['number_of_discs'] ?? 1; $discs = $item['number_of_discs'] ?? 1;
$aspect = $item['aspect_ratio'] ?? ''; $aspect = $item['aspect_ratio'] ?? '';
$actors = $item['actors'] ?? ''; $actors = $item['actors'] ?? '';
$publisher = $item['publisher'] ?? ''; $publisher = $item['publisher'] ?? '';
$director = $item['director'] ?? ''; $director = $item['director'] ?? '';
$id = makeStableId('videotheque', $title, $year); $id = makeStableId('videotheque', $title, $year);
// Utiliser blu-ray.com pour récupérer l'image // Utiliser notrecinema.com pour récupérer l'image
$bluRayData = fetchBluRayCom($ean, $title, $year, $pdo); $notreCinemaData = fetchNotreCinema($title, $year, $ean, $pdo);
$poster = $bluRayData['poster']; $poster = $notreCinemaData['poster'];
// Déterminer le format // Déterminer le format
$format = 'Blu-ray'; $format = 'Blu-ray';
if (stripos($title, '4K') !== false || stripos($title, 'UHD') !== false) { if (stripos($title, '4K') !== false || stripos($title, 'UHD') !== false) {
$format = '4K Ultra HD'; $format = '4K Ultra HD';
} elseif (stripos($desc, 'DVD') !== false) { } elseif (stripos($desc, 'DVD') !== false) {
$format = 'DVD'; $format = 'DVD';
}
$stmtVideo->execute([
$id, $title, $year, $format, $poster, $ean, $desc,
$length, $discs, $aspect, $actors, $publisher, $director
]);
$imported++;
} }
} else {
$stmtVideo->execute([
$id, $title, $year, $format, $poster, $ean, $desc,
$length, $discs, $aspect, $actors, $publisher, $director
]);
$imported++;
}
} else {
$ratingRaw = $rowData['Rating'] ?? $rowData['rating'] ?? ''; $ratingRaw = $rowData['Rating'] ?? $rowData['rating'] ?? '';
$rating = ($ratingRaw !== '' && $ratingRaw !== null) ? (float)$ratingRaw : null; $rating = ($ratingRaw !== '' && $ratingRaw !== null) ? (float)$ratingRaw : null;
$review = $rowData['Review'] ?? $rowData['review'] ?? ''; $review = $rowData['Review'] ?? $rowData['review'] ?? '';