Actualiser api.php
This commit is contained in:
@@ -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 ──
|
||||||
|
|||||||
Reference in New Issue
Block a user