diff --git a/api.php b/api.php index cc5ca26..a782f54 100644 --- a/api.php +++ b/api.php @@ -882,55 +882,64 @@ case 'import_batch': publisher=IF(VALUES(publisher)!='', VALUES(publisher), publisher), director=IF(VALUES(director)!='', VALUES(director), director)"); - foreach ($items as $item) { - $ean = preg_replace('/[^0-9]/', '', (string)($item['ean'] ?? '')); - $csvTitle = trim($item['title'] ?? ''); // ✅ Titre du CSV - - if (strlen($ean) < 8 && empty($csvTitle)) { - $skipped++; - continue; +foreach ($items as $item) { + $ean = preg_replace('/[^0-9]/', '', (string)($item['ean'] ?? '')); + $csvTitle = trim($item['title'] ?? ''); + if (strlen($ean) < 8 && empty($csvTitle)) { $skipped++; continue; } + + // 1. Récupération depuis Blu-ray.com (si EAN) + $blurayData = !empty($ean) ? fetchFromBlurayCom($ean) : []; + $title = !empty($blurayData['title']) ? $blurayData['title'] : $csvTitle; + $year = $blurayData['year'] ?? ''; + $format = $blurayData['format'] ?: detectFormat($title); + $publisher = $blurayData['publisher'] ?? ''; + $discs = $blurayData['number_of_discs'] ?: 1; + $aspect = $blurayData['aspect_ratio'] ?? ''; + $length = $blurayData['length'] ?? ''; + $poster = $blurayData['poster'] ?? ''; + $desc = $blurayData['description'] ?? ''; + $director = $blurayData['director'] ?? ''; + $actors = $blurayData['actors'] ?? ''; + + // Si le titre est vide, on utilise celui du CSV + if (empty($title)) $title = $csvTitle; + if (empty($title)) { $skipped++; continue; } + + // 2. COMPLÉMENT AVEC MOVIECOVERS.COM (NOUVEAU) + $movieCoversData = fetchFromMovieCovers($title, $year); + if (!empty($movieCoversData)) { + if (empty($poster) || $poster === 'assets/img/default_physical_media.jpg') { + $poster = $movieCoversData['poster'] ?? $poster; } - - // 1. Essayer Blu-ray.com (peut échouer sans bloquer) - $blurayData = !empty($ean) ? fetchFromBlurayCom($ean) : []; - - // ✅ Si Blu-ray.com trouve le film, utiliser son titre. Sinon, utiliser celui du CSV. - $title = !empty($blurayData['title']) ? $blurayData['title'] : $csvTitle; - - if (empty($title)) { - $skipped++; - continue; + if (empty($director)) $director = $movieCoversData['director'] ?? ''; + if (empty($actors)) $actors = $movieCoversData['actors'] ?? ''; + if (empty($desc)) $desc = $movieCoversData['description'] ?? ''; + if (empty($length) && !empty($movieCoversData['length'])) $length = $movieCoversData['length']; + if (empty($year) && !empty($movieCoversData['year'])) $year = $movieCoversData['year']; + // Optionnel : si le titre de MovieCovers est plus propre, on peut le préférer + if (!empty($movieCoversData['title'])) { + $title = cleanTitle($movieCoversData['title']); // nettoyage supplémentaire } - - $year = $blurayData['year'] ?? ''; - $format = $blurayData['format'] ?: detectFormat($title); - $publisher = $blurayData['publisher'] ?? ''; - $discs = $blurayData['number_of_discs'] ?: 1; - $aspect = $blurayData['aspect_ratio'] ?? ''; - $length = $blurayData['length'] ?? ''; - $poster = $blurayData['poster'] ?? ''; - $desc = $blurayData['description'] ?? ''; - $director = $blurayData['director'] ?? ''; - $actors = $blurayData['actors'] ?? ''; - - // 2. ✅ FALLBACK TMDB si Blu-ray.com n'a pas trouvé certaines données - if (empty($poster) || empty($director) || empty($actors) || empty($desc) || empty($year)) { - $tmdb = fetchTmdbPosterAndSynopsis($title, $year, $pdo); - - if (empty($poster) || $poster === 'assets/img/default_physical_media.jpg') { - $poster = $tmdb['poster']; - } - if (empty($director)) $director = $tmdb['director'] ?? ''; - if (empty($actors)) $actors = $tmdb['actors'] ?? ''; - if (empty($desc)) $desc = $tmdb['description'] ?? ''; - if (empty($length) && !empty($tmdb['length'])) $length = $tmdb['length']; - if (empty($year) && !empty($tmdb['year'])) $year = $tmdb['year']; - } - - $id = makeStableId('videotheque', $title, $year); - $stmt->execute([$id, $title, $year, $format, $poster, $ean, $desc, $length, $discs, $aspect, $actors, $publisher, $director]); - $imported++; } + + // 3. Fallback TMDB pour ce qui manque encore + if (empty($poster) || empty($director) || empty($actors) || empty($desc) || empty($year)) { + $tmdb = fetchTmdbPosterAndSynopsis($title, $year, $pdo); + if (empty($poster) || $poster === 'assets/img/default_physical_media.jpg') { + $poster = $tmdb['poster']; + } + if (empty($director)) $director = $tmdb['director'] ?? ''; + if (empty($actors)) $actors = $tmdb['actors'] ?? ''; + if (empty($desc)) $desc = $tmdb['description'] ?? ''; + if (empty($length) && !empty($tmdb['length'])) $length = $tmdb['length']; + if (empty($year) && !empty($tmdb['year'])) $year = $tmdb['year']; + } + + // 4. Insertion en base + $id = makeStableId('videotheque', $title, $year); + $stmt->execute([$id, $title, $year, $format, $poster, $ean, $desc, $length, $discs, $aspect, $actors, $publisher, $director]); + $imported++; +} } else { // Import critiques (inchangé) $stmtCritiques = $pdo->prepare("INSERT INTO critiques (id, title, year, director, poster, rating, review, streaming)