From c58816ec90299d7e508285586774cd51f134a53d Mon Sep 17 00:00:00 2001 From: Cedric Date: Wed, 24 Jun 2026 13:04:23 +0200 Subject: [PATCH] Actualiser api.php --- api.php | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/api.php b/api.php index df53bd1..8eb3c26 100644 --- a/api.php +++ b/api.php @@ -193,29 +193,48 @@ function fetchDVDFr($ean, $pdo) { return (!empty($result['poster']) || !empty($result['publisher'])) ? $result : null; } -// ── 3. API TMDB (SANS CACHE - Full Extract) ── function fetchTMDBFull($title, $year, $apiKey, $pdo) { if (empty($apiKey) || empty($title)) return null; $cleanTitle = cleanTitle($title); + $cacheKey = 'tmdb_full_' . md5(strtolower($cleanTitle) . '|' . $year); + $cached = getCache($pdo, $cacheKey); + if ($cached) return $cached; + // 1. Recherche avec l'année $searchUrl = "https://api.themoviedb.org/3/search/movie?api_key={$apiKey}&query=" . urlencode($cleanTitle) . "&year={$year}&language=fr-FR"; $searchRes = httpGet($searchUrl, 5); $searchData = $searchRes ? json_decode($searchRes, true) : []; + // 2. Fallback sans l'année if (empty($searchData['results'])) { - $searchUrl2 = "https://api.themoviedb.org/3/search/movie?api_key={$apiKey}&query=" . urlencode($cleanTitle) . "&language=fr-FR"; - $searchRes2 = httpGet($searchUrl2, 5); - $searchData = $searchRes2 ? json_decode($searchRes2, true) : []; + $searchUrl = "https://api.themoviedb.org/3/search/movie?api_key={$apiKey}&query=" . urlencode($cleanTitle) . "&language=fr-FR"; + $searchRes = httpGet($searchUrl, 5); + $searchData = $searchRes ? json_decode($searchRes, true) : []; } if (empty($searchData['results'])) return null; $movieId = $searchData['results'][0]['id']; - $detailsUrl = "https://api.themoviedb.org/3/movie/{$movieId}?api_key={$apiKey}&append_to_response=credits,watch/providers&language=fr-FR"; + // 🔥 AJOUT : On demande aussi les translations pour récupérer le titre français + $detailsUrl = "https://api.themoviedb.org/3/movie/{$movieId}?api_key={$apiKey}&append_to_response=credits,watch/providers,translations&language=fr-FR"; $detailsRes = httpGet($detailsUrl, 5); if (!$detailsRes) return null; $details = json_decode($detailsRes, true); + // 🔥 RÉCUPÉRATION DU TITRE FRANÇAIS + $frenchTitle = $details['title'] ?? ''; // Titre par défaut (peut être l'original) + + // Chercher le titre français dans les traductions + if (!empty($details['translations']['translations'])) { + foreach ($details['translations']['translations'] as $translation) { + if ($translation['iso_3166_1'] === 'FR' && !empty($translation['data']['title'])) { + $frenchTitle = $translation['data']['title']; + break; + } + } + } + + // Extraction Réalisateurs $director = ''; if (!empty($details['credits']['crew'])) { $directorsList = []; @@ -225,14 +244,17 @@ function fetchTMDBFull($title, $year, $apiKey, $pdo) { $director = implode(', ', $directorsList); } + // Extraction Acteurs (Top 4) $cast = []; if (!empty($details['credits']['cast'])) { $topCast = array_slice($details['credits']['cast'], 0, 4); foreach ($topCast as $actor) $cast[] = $actor['name']; } + // Synopsis $overview = $details['overview'] ?? ''; + // Streaming $streaming = ''; $frProviders = $details['watch/providers']['results']['FR'] ?? []; $platforms = []; @@ -243,8 +265,8 @@ function fetchTMDBFull($title, $year, $apiKey, $pdo) { } if (!empty($platforms)) $streaming = implode(', ', array_unique($platforms)); - return [ - 'title' => $details['title'] ?? '', + $result = [ + 'title' => $frenchTitle, // 🔥 Titre français prioritaire 'year' => !empty($details['release_date']) ? substr($details['release_date'], 0, 4) : '', 'director' => $director, 'poster' => !empty($details['poster_path']) ? "https://image.tmdb.org/t/p/w500" . $details['poster_path'] : '', @@ -253,6 +275,9 @@ function fetchTMDBFull($title, $year, $apiKey, $pdo) { 'overview' => $overview, 'cast' => $cast ]; + + setCache($pdo, $cacheKey, $result, 'tmdb'); + return $result; } // ── ROUTEUR PRINCIPAL ──