Actualiser api.php

This commit is contained in:
2026-06-26 08:17:00 +02:00
parent 1d5f24a17a
commit bd73d00d51
+21 -43
View File
@@ -120,7 +120,7 @@ function extractYear($dateStr) {
return '';
}
// ── Fanart.tv API (Jaquettes DVD/Blu-ray françaises uniquement) ──
// ── Fanart.tv API (Jaquettes exclusives) ──
function fetchFanartTv($title, $year = '', $format = 'bluray', $pdo = null) {
if (empty($title)) return null;
@@ -138,7 +138,7 @@ function fetchFanartTv($title, $year = '', $format = 'bluray', $pdo = null) {
}
}
// Étape 1 : Chercher le film sur TMDB pour obtenir son ID
// 1. Récupération silencieuse de l'ID via TMDB
$tmdbKey = getTmdbApiKey($pdo);
if (!$tmdbKey) {
error_log("Fanart.tv: Clé TMDB requise");
@@ -156,71 +156,49 @@ function fetchFanartTv($title, $year = '', $format = 'bluray', $pdo = null) {
if (empty($searchData['results'])) {
error_log("Fanart.tv: Film non trouvé sur TMDB pour '$title'");
return null;
// Verrouillage : TMDB ne le trouve pas, on force l'image par défaut
return ['poster' => 'assets/img/default_physical_media.jpg', 'title' => $cleanTitle, 'format' => $format];
}
$tmdbId = $searchData['results'][0]['id'];
$poster = null; // Initialisation stricte
// Étape 2 : Récupérer les artworks depuis fanart.tv
// 2. Interrogation exclusive de Fanart.tv avec l'ID obtenu
$fanartUrl = "https://webservice.fanart.tv/v3/movies/{$tmdbId}?api_key={$apiKey}";
$fanartRes = httpGet($fanartUrl, 5);
$fanartData = $fanartRes ? json_decode($fanartRes, true) : [];
if (isset($fanartData['error'])) {
error_log("Fanart.tv: Erreur API - " . $fanartData['error']);
return null;
}
$poster = '';
// PRIORITÉ 1 : movieposter en français (jaquettes DVD/Blu-ray FR)
if (!empty($fanartData['movieposter'])) {
if (!isset($fanartData['error']) && !empty($fanartData['movieposter'])) {
$posters = $fanartData['movieposter'];
// Filtrer uniquement les jaquettes françaises
$frenchPosters = array_filter($posters, function($p) {
return isset($p['lang']) && $p['lang'] === 'fr';
});
// Trier par likes (le plus populaire en premier)
// PRIORITÉ 1 : Français
$frenchPosters = array_filter($posters, function($p) { return isset($p['lang']) && $p['lang'] === 'fr'; });
if (!empty($frenchPosters)) {
usort($frenchPosters, function($a, $b) {
return ($b['likes'] ?? 0) - ($a['likes'] ?? 0);
});
usort($frenchPosters, function($a, $b) { return ($b['likes'] ?? 0) - ($a['likes'] ?? 0); });
$poster = $frenchPosters[0]['url'];
error_log("Fanart.tv: Jaquette FR trouvée - {$poster}");
}
}
// PRIORITÉ 2 : Si pas de jaquette FR, prendre movieposter en anglais
if (empty($poster) && !empty($fanartData['movieposter'])) {
$posters = $fanartData['movieposter'];
$englishPosters = array_filter($posters, function($p) {
return isset($p['lang']) && $p['lang'] === 'en';
});
// PRIORITÉ 2 : Anglais (fallback)
if (empty($poster)) {
$englishPosters = array_filter($posters, function($p) { return isset($p['lang']) && $p['lang'] === 'en'; });
if (!empty($englishPosters)) {
usort($englishPosters, function($a, $b) {
return ($b['likes'] ?? 0) - ($a['likes'] ?? 0);
});
usort($englishPosters, function($a, $b) { return ($b['likes'] ?? 0) - ($a['likes'] ?? 0); });
$poster = $englishPosters[0]['url'];
error_log("Fanart.tv: Jaquette EN trouvée (fallback) - {$poster}");
}
}
// PRIORITÉ 3 : Fallback sur n'importe quelle langue
if (empty($poster) && !empty($fanartData['movieposter'])) {
$posters = $fanartData['movieposter'];
usort($posters, function($a, $b) {
return ($b['likes'] ?? 0) - ($a['likes'] ?? 0);
});
// PRIORITÉ 3 : N'importe quelle langue
if (empty($poster)) {
usort($posters, function($a, $b) { return ($b['likes'] ?? 0) - ($a['likes'] ?? 0); });
$poster = $posters[0]['url'];
error_log("Fanart.tv: Jaquette trouvée (toute langue) - {$poster}");
}
}
// 3. Verrouillage final
if (empty($poster)) {
error_log("Fanart.tv: Aucune jaquette trouvée pour TMDB ID {$tmdbId}");
return null;
// AUCUN retour vers TMDB, on force l'image locale
$poster = 'assets/img/default_physical_media.jpg';
}
return [