From b20ded263e4ff95b4e315273649719bb8498fc8a Mon Sep 17 00:00:00 2001 From: Cedric Date: Fri, 26 Jun 2026 12:05:36 +0200 Subject: [PATCH] Actualiser api.php --- api.php | 201 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 105 insertions(+), 96 deletions(-) diff --git a/api.php b/api.php index d584a65..1e7e1a8 100644 --- a/api.php +++ b/api.php @@ -120,43 +120,55 @@ function extractYear($dateStr) { return ''; } -// ── FONCTION POUR RÉCUPÉRER LES IMAGES DEPUIS BLU-RAY.COM ── -function fetchBluRayCom($ean, $title = '', $year = '', $pdo = null) { +// ── FONCTION POUR RÉCUPÉRER LES IMAGES DEPUIS NOTRECINEMA.COM ── +function fetchNotreCinema($title, $year = '', $ean = '', $pdo = null) { $defaultPoster = 'assets/img/default_physical_media.jpg'; - if (empty($ean) && empty($title)) { - return ['poster' => $defaultPoster, 'title' => $title, 'format' => 'Blu-ray']; - } - - // Nettoyer l'EAN - $cleanEan = ''; - if (!empty($ean)) { - $cleanEan = preg_replace('/[^0-9]/', '', $ean); + if (empty($title)) { + return ['poster' => $defaultPoster, 'title' => '', 'format' => 'Blu-ray']; } + $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'; - // 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 && preg_match('/]*>/i', $searchRes, $matches)) { - $productId = $matches[1]; - $productUrl = "https://www.blu-ray.com/products/?id=" . $productId; + // ÉTAPE 1 : Recherche sur notrecinema.com + $searchUrl = "https://www.notrecinema.com/communaute/stubs.php?stub=" . urlencode($cleanTitle); + if (!empty($year)) { + $searchUrl .= "&annee=" . $year; + } + + $searchRes = httpGet($searchUrl, 10, $userAgent); + + if ($searchRes) { + // Extraire le lien vers la page du film + if (preg_match('/]*>/i', $searchRes, $matches)) { + $filmSlug = $matches[1]; + $filmUrl = "https://www.notrecinema.com/communaute/stubs.php?stub=" . $filmSlug; - $productRes = httpGet($productUrl, 5, $userAgent); + $filmRes = httpGet($filmUrl, 10, $userAgent); - if ($productRes) { - // Extraire l'image principale - if (preg_match('/]*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('/]*class="[^"]*affiche[^"]*"[^>]*src="([^"]+)"/i', $filmRes, $imgMatches)) { $posterUrl = $imgMatches[1]; - // Convertir en haute résolution - $posterUrl = str_replace('/resized/', '/', $posterUrl); + } elseif (preg_match('/]*class="[^"]*film_affiche[^"]*"[^>]*>.*?]*src="([^"]+)"/is', $filmRes, $imgMatches)) { + $posterUrl = $imgMatches[1]; + } elseif (preg_match('/]*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 [ 'poster' => $posterUrl, - 'title' => $title, + 'title' => $cleanTitle, 'format' => 'Blu-ray' ]; } @@ -164,33 +176,30 @@ function fetchBluRayCom($ean, $title = '', $year = '', $pdo = null) { } } - // Fallback : recherche par titre - if (!empty($title)) { - $cleanTitle = cleanTitle($title); - $searchUrl = "https://www.blu-ray.com/search/?quicksearch=1&searchtype=movies&q=" . urlencode($cleanTitle); + // ÉTAPE 2 : Recherche alternative par EAN si disponible + if (!empty($ean)) { + $cleanEan = preg_replace('/[^0-9]/', '', $ean); + $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('/]*>/i', $searchRes, $matches)) { - $movieId = $matches[1]; - $movieUrl = "https://www.blu-ray.com/movies/?id=" . $movieId; + if ($searchRes && preg_match('/]*>/i', $searchRes, $matches)) { + $filmSlug = $matches[1]; + $filmUrl = "https://www.notrecinema.com/communaute/stubs.php?stub=" . $filmSlug; - $movieRes = httpGet($movieUrl, 5, $userAgent); + $filmRes = httpGet($filmUrl, 10, $userAgent); - if ($movieRes && preg_match('/]*id="home_release_img"[^>]*src="([^"]+)"/i', $movieRes, $imgMatches)) { - $posterUrl = $imgMatches[1]; - $posterUrl = str_replace('/resized/', '/', $posterUrl); - + if ($filmRes && preg_match('/]*src="(https:\/\/www\.notrecinema\.com\/images\/films\/[^"]+)"/i', $filmRes, $imgMatches)) { return [ - 'poster' => $posterUrl, - 'title' => $title, + 'poster' => $imgMatches[1], + 'title' => $cleanTitle, 'format' => 'Blu-ray' ]; } } } - return ['poster' => $defaultPoster, 'title' => $title, 'format' => 'Blu-ray']; + return ['poster' => $defaultPoster, 'title' => $cleanTitle, 'format' => 'Blu-ray']; } // ── 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é."]); } break; - case 'import_batch': - checkAuth($pdo); - $data = json_decode(file_get_contents("php://input"), true); - $type = $data['type'] ?? 'critique'; - $items = $data['items'] ?? []; + case 'import_batch': + checkAuth($pdo); + $data = json_decode(file_get_contents("php://input"), true); + $type = $data['type'] ?? 'critique'; + $items = $data['items'] ?? []; + + $pdo->beginTransaction(); + $imported = 0; + + 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) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + ean_isbn13 = VALUES(ean_isbn13), + poster = VALUES(poster), + description = VALUES(description), + format = VALUES(format), + length = VALUES(length), + number_of_discs = VALUES(number_of_discs), + aspect_ratio = VALUES(aspect_ratio), + actors = VALUES(actors), + publisher = VALUES(publisher)"); - $pdo->beginTransaction(); - $imported = 0; - - 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) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - ON DUPLICATE KEY UPDATE - ean_isbn13 = VALUES(ean_isbn13), - poster = VALUES(poster), - description = VALUES(description), - format = VALUES(format), - length = VALUES(length), - number_of_discs = VALUES(number_of_discs), - aspect_ratio = VALUES(aspect_ratio), - actors = VALUES(actors), - publisher = VALUES(publisher)"); + foreach ($items as $item) { + $title = $item['title'] ?? ''; + if (empty($title)) continue; - foreach ($items as $item) { - $title = $item['title'] ?? ''; - if (empty($title)) continue; - - $year = $item['year'] ?? ''; - $ean = $item['ean'] ?? ''; - $desc = $item['description'] ?? ''; - $length = $item['length'] ?? ''; - $discs = $item['number_of_discs'] ?? 1; - $aspect = $item['aspect_ratio'] ?? ''; - $actors = $item['actors'] ?? ''; - $publisher = $item['publisher'] ?? ''; - $director = $item['director'] ?? ''; - - $id = makeStableId('videotheque', $title, $year); - - // Utiliser blu-ray.com pour récupérer l'image - $bluRayData = fetchBluRayCom($ean, $title, $year, $pdo); - $poster = $bluRayData['poster']; - - // Déterminer le format - $format = 'Blu-ray'; - if (stripos($title, '4K') !== false || stripos($title, 'UHD') !== false) { - $format = '4K Ultra HD'; - } elseif (stripos($desc, 'DVD') !== false) { - $format = 'DVD'; - } - - $stmtVideo->execute([ - $id, $title, $year, $format, $poster, $ean, $desc, - $length, $discs, $aspect, $actors, $publisher, $director - ]); - $imported++; + $year = $item['year'] ?? ''; + $ean = $item['ean'] ?? ''; + $desc = $item['description'] ?? ''; + $length = $item['length'] ?? ''; + $discs = $item['number_of_discs'] ?? 1; + $aspect = $item['aspect_ratio'] ?? ''; + $actors = $item['actors'] ?? ''; + $publisher = $item['publisher'] ?? ''; + $director = $item['director'] ?? ''; + + $id = makeStableId('videotheque', $title, $year); + + // Utiliser notrecinema.com pour récupérer l'image + $notreCinemaData = fetchNotreCinema($title, $year, $ean, $pdo); + $poster = $notreCinemaData['poster']; + + // Déterminer le format + $format = 'Blu-ray'; + if (stripos($title, '4K') !== false || stripos($title, 'UHD') !== false) { + $format = '4K Ultra HD'; + } elseif (stripos($desc, 'DVD') !== false) { + $format = 'DVD'; } - } else { + + $stmtVideo->execute([ + $id, $title, $year, $format, $poster, $ean, $desc, + $length, $discs, $aspect, $actors, $publisher, $director + ]); + $imported++; + } + } else { $ratingRaw = $rowData['Rating'] ?? $rowData['rating'] ?? ''; $rating = ($ratingRaw !== '' && $ratingRaw !== null) ? (float)$ratingRaw : null; $review = $rowData['Review'] ?? $rowData['review'] ?? '';