Actualiser api.php

This commit is contained in:
2026-06-24 13:04:23 +02:00
parent b525ad6f76
commit c58816ec90
+32 -7
View File
@@ -193,29 +193,48 @@ function fetchDVDFr($ean, $pdo) {
return (!empty($result['poster']) || !empty($result['publisher'])) ? $result : null; return (!empty($result['poster']) || !empty($result['publisher'])) ? $result : null;
} }
// ── 3. API TMDB (SANS CACHE - Full Extract) ──
function fetchTMDBFull($title, $year, $apiKey, $pdo) { function fetchTMDBFull($title, $year, $apiKey, $pdo) {
if (empty($apiKey) || empty($title)) return null; if (empty($apiKey) || empty($title)) return null;
$cleanTitle = cleanTitle($title); $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"; $searchUrl = "https://api.themoviedb.org/3/search/movie?api_key={$apiKey}&query=" . urlencode($cleanTitle) . "&year={$year}&language=fr-FR";
$searchRes = httpGet($searchUrl, 5); $searchRes = httpGet($searchUrl, 5);
$searchData = $searchRes ? json_decode($searchRes, true) : []; $searchData = $searchRes ? json_decode($searchRes, true) : [];
// 2. Fallback sans l'année
if (empty($searchData['results'])) { if (empty($searchData['results'])) {
$searchUrl2 = "https://api.themoviedb.org/3/search/movie?api_key={$apiKey}&query=" . urlencode($cleanTitle) . "&language=fr-FR"; $searchUrl = "https://api.themoviedb.org/3/search/movie?api_key={$apiKey}&query=" . urlencode($cleanTitle) . "&language=fr-FR";
$searchRes2 = httpGet($searchUrl2, 5); $searchRes = httpGet($searchUrl, 5);
$searchData = $searchRes2 ? json_decode($searchRes2, true) : []; $searchData = $searchRes ? json_decode($searchRes, true) : [];
} }
if (empty($searchData['results'])) return null; if (empty($searchData['results'])) return null;
$movieId = $searchData['results'][0]['id']; $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); $detailsRes = httpGet($detailsUrl, 5);
if (!$detailsRes) return null; if (!$detailsRes) return null;
$details = json_decode($detailsRes, true); $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 = ''; $director = '';
if (!empty($details['credits']['crew'])) { if (!empty($details['credits']['crew'])) {
$directorsList = []; $directorsList = [];
@@ -225,14 +244,17 @@ function fetchTMDBFull($title, $year, $apiKey, $pdo) {
$director = implode(', ', $directorsList); $director = implode(', ', $directorsList);
} }
// Extraction Acteurs (Top 4)
$cast = []; $cast = [];
if (!empty($details['credits']['cast'])) { if (!empty($details['credits']['cast'])) {
$topCast = array_slice($details['credits']['cast'], 0, 4); $topCast = array_slice($details['credits']['cast'], 0, 4);
foreach ($topCast as $actor) $cast[] = $actor['name']; foreach ($topCast as $actor) $cast[] = $actor['name'];
} }
// Synopsis
$overview = $details['overview'] ?? ''; $overview = $details['overview'] ?? '';
// Streaming
$streaming = ''; $streaming = '';
$frProviders = $details['watch/providers']['results']['FR'] ?? []; $frProviders = $details['watch/providers']['results']['FR'] ?? [];
$platforms = []; $platforms = [];
@@ -243,8 +265,8 @@ function fetchTMDBFull($title, $year, $apiKey, $pdo) {
} }
if (!empty($platforms)) $streaming = implode(', ', array_unique($platforms)); if (!empty($platforms)) $streaming = implode(', ', array_unique($platforms));
return [ $result = [
'title' => $details['title'] ?? '', 'title' => $frenchTitle, // 🔥 Titre français prioritaire
'year' => !empty($details['release_date']) ? substr($details['release_date'], 0, 4) : '', 'year' => !empty($details['release_date']) ? substr($details['release_date'], 0, 4) : '',
'director' => $director, 'director' => $director,
'poster' => !empty($details['poster_path']) ? "https://image.tmdb.org/t/p/w500" . $details['poster_path'] : '', '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, 'overview' => $overview,
'cast' => $cast 'cast' => $cast
]; ];
setCache($pdo, $cacheKey, $result, 'tmdb');
return $result;
} }
// ── ROUTEUR PRINCIPAL ── // ── ROUTEUR PRINCIPAL ──