diff --git a/api.php b/api.php index 26d8cd4..9642482 100644 --- a/api.php +++ b/api.php @@ -93,6 +93,25 @@ function httpGet($url, $timeout = 3, $ua = null) { return $res ?: null; } +// Vérifie si une URL existe (HEAD request) +function urlExists($url, $timeout = 3) { + if (!function_exists('curl_init')) return false; + $ch = curl_init($url); + curl_setopt_array($ch, [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_NOBODY => true, + CURLOPT_TIMEOUT => $timeout, + CURLOPT_CONNECTTIMEOUT => 2, + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + CURLOPT_FOLLOWLOCATION => true, + ]); + curl_exec($ch); + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + return ($code >= 200 && $code < 400); +} + function cleanTitle($title) { $clean = preg_replace('/\s*[\[\(].*?[\]\)]\s*/', '', $title); $clean = preg_replace('/\s*-\s*(Édition|Edition|Collector|Simple|Spéciale|Digibook|Ultimate|Intégrale|Combo|SteelBook|Boîtier).*$/i', '', $clean); @@ -115,98 +134,101 @@ function extractYear($dateStr) { return ''; } -function fetchDVDCover($title, $year = '', $format = 'bluray') { +// ── COVERCENTURY.COM ── +// Structure : https://www.covercentury.com/covers/{format}/{première_lettre}/{Nom_Normalisé}{numéro}.jpg +// Exemple : https://www.covercentury.com/covers/dvd/t/The_Matrix_Reloaded1.jpg +function fetchCoverCentury($title, $year = '', $format = 'bluray') { if (empty($title)) return null; - - $ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'; + $cleanTitle = cleanTitle($title); - $searchUrl = "https://www.dvdcover.com/?s=" . urlencode($cleanTitle); - - $html = httpGet($searchUrl, 10, $ua); - if (!$html) { - error_log("DVDCover: Erreur réseau pour '$title'"); - return null; - } - - $dom = new DOMDocument(); - @$dom->loadHTML($html); - $xpath = new DOMXPath($dom); - - // Les résultats sont dans des