Actualiser api.php

This commit is contained in:
2026-06-26 09:54:57 +02:00
parent d8f49206ac
commit ae92659632
+81 -84
View File
@@ -124,65 +124,60 @@ function extractYear($dateStr) {
function fetchBluRayCom($ean, $title = '', $year = '', $pdo = null) { function fetchBluRayCom($ean, $title = '', $year = '', $pdo = null) {
$defaultPoster = 'assets/img/default_physical_media.jpg'; $defaultPoster = 'assets/img/default_physical_media.jpg';
if (empty($ean)) { if (empty($ean) && empty($title)) {
return ['poster' => $defaultPoster, 'title' => $title, 'format' => 'Blu-ray']; return ['poster' => $defaultPoster, 'title' => $title, 'format' => 'Blu-ray'];
} }
// Nettoyer l'EAN (supprimer les espaces, tirets, etc.) // Nettoyer l'EAN
$cleanEan = preg_replace('/[^0-9]/', '', $ean); $cleanEan = '';
if (!empty($ean)) {
if (empty($cleanEan)) { $cleanEan = preg_replace('/[^0-9]/', '', $ean);
return ['poster' => $defaultPoster, 'title' => $title, 'format' => 'Blu-ray'];
} }
// Recherche sur blu-ray.com par EAN/UPC $userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
$searchUrl = "https://www.blu-ray.com/search/?quicksearch=1&searchtype=products&q=" . urlencode($cleanEan);
$searchRes = httpGet($searchUrl, 5, '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
if (!empty($cleanEan)) {
$searchUrl = "https://www.blu-ray.com/search/?quicksearch=1&searchtype=products&q=" . urlencode($cleanEan);
$searchRes = httpGet($searchUrl, 5, $userAgent);
if (!$searchRes) { if ($searchRes && preg_match('/<a href="\/products\/\?id=(\d+)"[^>]*>/i', $searchRes, $matches)) {
return ['poster' => $defaultPoster, 'title' => $title, 'format' => 'Blu-ray']; $productId = $matches[1];
} $productUrl = "https://www.blu-ray.com/products/?id=" . $productId;
// Extraire le lien vers la page du produit $productRes = httpGet($productUrl, 5, $userAgent);
if (preg_match('/<a href="\/products\/\?id=(\d+)"[^>]*>/i', $searchRes, $matches)) {
$productId = $matches[1];
$productUrl = "https://www.blu-ray.com/products/?id=" . $productId;
// Récupérer la page du produit if ($productRes) {
$productRes = httpGet($productUrl, 5, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'); // Extraire l'image principale
if (preg_match('/<img[^>]*id="home_release_img"[^>]*src="([^"]+)"/i', $productRes, $imgMatches)) {
$posterUrl = $imgMatches[1];
// Convertir en haute résolution
$posterUrl = str_replace('/resized/', '/', $posterUrl);
if ($productRes) { return [
// Extraire l'image principale 'poster' => $posterUrl,
if (preg_match('/<img[^>]*src="([^"]*\/movies\/pictures\/[^"]*)"/i', $productRes, $imgMatches)) { 'title' => $title,
$posterUrl = $imgMatches[1]; 'format' => 'Blu-ray'
];
// Convertir en haute résolution si possible }
$posterUrl = str_replace('/resized/', '/', $posterUrl);
return [
'poster' => $posterUrl,
'title' => $title,
'format' => 'Blu-ray'
];
} }
} }
} }
// Si pas trouvé par EAN, essayer par titre // Fallback : recherche par titre
if (!empty($title)) { if (!empty($title)) {
$cleanTitle = cleanTitle($title); $cleanTitle = cleanTitle($title);
$searchUrl = "https://www.blu-ray.com/search/?quicksearch=1&searchtype=movies&q=" . urlencode($cleanTitle); $searchUrl = "https://www.blu-ray.com/search/?quicksearch=1&searchtype=movies&q=" . urlencode($cleanTitle);
$searchRes = httpGet($searchUrl, 5, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'); $searchRes = httpGet($searchUrl, 5, $userAgent);
if ($searchRes && preg_match('/<a href="\/movies\/\?id=(\d+)"[^>]*>/i', $searchRes, $matches)) { if ($searchRes && preg_match('/<a href="\/movies\/\?id=(\d+)"[^>]*>/i', $searchRes, $matches)) {
$movieId = $matches[1]; $movieId = $matches[1];
$movieUrl = "https://www.blu-ray.com/movies/?id=" . $movieId; $movieUrl = "https://www.blu-ray.com/movies/?id=" . $movieId;
$movieRes = httpGet($movieUrl, 5, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'); $movieRes = httpGet($movieUrl, 5, $userAgent);
if ($movieRes && preg_match('/<img[^>]*src="([^"]*\/movies\/pictures\/[^"]*)"/i', $movieRes, $imgMatches)) { if ($movieRes && preg_match('/<img[^>]*id="home_release_img"[^>]*src="([^"]+)"/i', $movieRes, $imgMatches)) {
$posterUrl = $imgMatches[1]; $posterUrl = $imgMatches[1];
$posterUrl = str_replace('/resized/', '/', $posterUrl); $posterUrl = str_replace('/resized/', '/', $posterUrl);
@@ -198,6 +193,8 @@ function fetchBluRayCom($ean, $title = '', $year = '', $pdo = null) {
return ['poster' => $defaultPoster, 'title' => $title, 'format' => 'Blu-ray']; return ['poster' => $defaultPoster, 'title' => $title, 'format' => 'Blu-ray'];
} }
// ── ROUTEUR PRINCIPAL ──
// Fonction pour vérifier si une URL existe // Fonction pour vérifier si une URL existe
function urlExists($url, $timeout = 3) { function urlExists($url, $timeout = 3) {
if (!function_exists('curl_init')) { if (!function_exists('curl_init')) {
@@ -487,63 +484,63 @@ case 'get_config_keys':
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 blu-ray.com pour récupérer l'image
$bluRayData = fetchBluRayCom($ean, $title, $year, $pdo); $bluRayData = fetchBluRayCom($ean, $title, $year, $pdo);
$poster = $bluRayData['poster']; $poster = $bluRayData['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'] ?? '';