Actualiser api.php

This commit is contained in:
2026-07-01 12:46:22 +02:00
parent 22927c02f5
commit ae5d08613d
+41 -44
View File
@@ -126,19 +126,15 @@ function urlExists($url) {
return $code === 200; return $code === 200;
} }
// Retire les accents/diacritiques et normalise une chaîne pour construire
// une URL de type moviecovers.com (ex: "L'Étrange Noël" -> "L ETRANGE NOEL")
function removeAccentsForUrl($str) { function removeAccentsForUrl($str) {
$str = str_replace(['œ', 'Œ'], ['oe', 'OE'], $str); $str = str_replace(['œ', 'Œ'], ['oe', 'OE'], $str);
$str = str_replace(['æ', 'Æ'], ['ae', 'AE'], $str); $str = str_replace(['æ', 'Æ'], ['ae', 'AE'], $str);
// Translittère les accents (fonctionne même si l'extension intl est absente)
$transliterated = @iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str); $transliterated = @iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str);
if ($transliterated !== false && $transliterated !== '') { if ($transliterated !== false && $transliterated !== '') $str = $transliterated;
$str = $transliterated;
}
return $str; return $str;
} }
function cleanTitle($title) { function cleanTitle($title) {
$clean = preg_replace('/\s*[\[\(].*?[\]\)]\s*/', '', $title); $clean = preg_replace('/\s*[\[\(].*?[\]\)]\s*/', '', $title);
$clean = preg_replace('/\s*-\s*(Édition|Edition|Collector|Simple|Spéciale|Digibook|Ultimate|Intégrale|Combo|SteelBook|Boîtier).*$/i', '', $clean); $clean = preg_replace('/\s*-\s*(Édition|Edition|Collector|Simple|Spéciale|Digibook|Ultimate|Intégrale|Combo|SteelBook|Boîtier).*$/i', '', $clean);
@@ -592,7 +588,6 @@ function fetchFromMovieCovers($title, $year = '') {
]; ];
if (empty($title)) return $empty; if (empty($title)) return $empty;
// ✅ CORRECTION : Utiliser removeAccentsForUrl
$cleanTitle = removeAccentsForUrl($title); $cleanTitle = removeAccentsForUrl($title);
$urlTitle = strtoupper(str_replace(' ', '+', $cleanTitle)); $urlTitle = strtoupper(str_replace(' ', '+', $cleanTitle));
$url = "https://moviecovers.com/film/titre_{$urlTitle}.html"; $url = "https://moviecovers.com/film/titre_{$urlTitle}.html";
@@ -918,44 +913,48 @@ case 'import_batch':
director=IF(VALUES(director)!='', VALUES(director), director)"); director=IF(VALUES(director)!='', VALUES(director), director)");
foreach ($items as $item) { foreach ($items as $item) {
// ✅ ON NE RÉCUPÈRE QUE L'EAN
$ean = preg_replace('/[^0-9]/', '', (string)($item['ean'] ?? '')); $ean = preg_replace('/[^0-9]/', '', (string)($item['ean'] ?? ''));
$csvTitle = trim($item['title'] ?? '');
// Récupération des données déjà présentes dans le CSV if (strlen($ean) < 8) {
$csvYear = trim($item['year'] ?? ''); $skipped++;
$csvPublisher = trim($item['publisher'] ?? ''); continue;
$csvLength = trim($item['length'] ?? ''); }
$csvDiscs = (int)($item['number_of_discs'] ?? 1);
$csvAspect = trim($item['aspect_ratio'] ?? '');
$csvActors = trim($item['actors'] ?? '');
$csvSynopsis = trim($item['synopsis'] ?? '');
if (strlen($ean) < 8 && empty($csvTitle)) { $skipped++; continue; } // 1. BLU-RAY.COM (Métadonnées physiques et affiche de base)
$blurayData = fetchFromBlurayCom($ean);
// 1. BLU-RAY.COM (Métadonnées physiques)
$blurayData = (!empty($ean)) ? fetchFromBlurayCom($ean) : [];
if (!is_array($blurayData)) $blurayData = []; if (!is_array($blurayData)) $blurayData = [];
$title = !empty($blurayData['title']) ? $blurayData['title'] : $csvTitle; $title = $blurayData['title'] ?? '';
$year = $blurayData['year'] ?? $csvYear; $year = $blurayData['year'] ?? '';
$format = $blurayData['format'] ?: detectFormat($title); $format = $blurayData['format'] ?: detectFormat($title);
$publisher = $blurayData['publisher'] ?: $csvPublisher; $publisher = $blurayData['publisher'] ?? '';
$discs = $blurayData['number_of_discs'] ?: ($csvDiscs ?: 1); $discs = $blurayData['number_of_discs'] ?: 1;
$aspect = $blurayData['aspect_ratio'] ?: $csvAspect; $aspect = $blurayData['aspect_ratio'] ?? '';
$length = $blurayData['length'] ?: (!empty($csvLength) ? $csvLength . ' min' : ''); $length = $blurayData['length'] ?? '';
$poster = $blurayData['poster'] ?? '';
$desc = $blurayData['description'] ?? '';
$director = $blurayData['director'] ?? '';
$actors = $blurayData['actors'] ?? '';
// 2. MOVIECOVERS (Jaquettes HD Physiques) // 2. MOVIECOVERS (Pour l'affiche HD physique et complément d'infos)
$mcData = fetchFromMovieCovers($title, $year); if (!empty($title)) {
if (!is_array($mcData)) $mcData = []; $mcData = fetchFromMovieCovers($title, $year);
if (!is_array($mcData)) $mcData = [];
$poster = !empty($mcData['poster']) ? $mcData['poster'] : (!empty($blurayData['poster']) ? $blurayData['poster'] : ''); // Priorité à l'affiche HD de MovieCovers
$desc = !empty($csvSynopsis) ? $csvSynopsis : (!empty($mcData['description']) ? $mcData['description'] : ($blurayData['description'] ?? '')); if (!empty($mcData['poster'])) $poster = $mcData['poster'];
$director = !empty($mcData['director']) ? $mcData['director'] : ($blurayData['director'] ?? ''); if (empty($director) && !empty($mcData['director'])) $director = $mcData['director'];
$actors = !empty($csvActors) ? $csvActors : (!empty($mcData['actors']) ? $mcData['actors'] : ($blurayData['actors'] ?? '')); if (empty($actors) && !empty($mcData['actors'])) $actors = $mcData['actors'];
if (empty($desc) && !empty($mcData['description'])) $desc = $mcData['description'];
if (empty($length) && !empty($mcData['length'])) $length = $mcData['length'];
if (empty($year) && !empty($mcData['year'])) $year = $mcData['year'];
}
// 3. FALLBACK TMDB (Si des données manquent encore) // 3. FALLBACK TMDB (Si des données manquent encore)
if (empty($poster) || empty($director) || empty($actors) || empty($desc)) { if (empty($poster) || empty($director) || empty($actors) || empty($desc) || empty($title)) {
$tmdb = fetchTmdbPosterAndSynopsis($title, $year, $pdo); $tmdb = fetchTmdbPosterAndSynopsis($title, $year, $pdo);
if (empty($title)) $title = $tmdb['title'] ?? "EAN: $ean";
if (empty($poster) || $poster === 'assets/img/default_physical_media.jpg') $poster = $tmdb['poster']; if (empty($poster) || $poster === 'assets/img/default_physical_media.jpg') $poster = $tmdb['poster'];
if (empty($director)) $director = $tmdb['director'] ?? ''; if (empty($director)) $director = $tmdb['director'] ?? '';
if (empty($actors)) $actors = $tmdb['actors'] ?? ''; if (empty($actors)) $actors = $tmdb['actors'] ?? '';
@@ -964,12 +963,17 @@ case 'import_batch':
if (empty($year) && !empty($tmdb['year'])) $year = $tmdb['year']; if (empty($year) && !empty($tmdb['year'])) $year = $tmdb['year'];
} }
if (empty($title)) {
$skipped++;
continue;
}
$id = makeStableId('videotheque', $title, $year); $id = makeStableId('videotheque', $title, $year);
$stmt->execute([$id, $title, $year, $format, $poster, $ean, $desc, $length, $discs, $aspect, $actors, $publisher, $director]); $stmt->execute([$id, $title, $year, $format, $poster, $ean, $desc, $length, $discs, $aspect, $actors, $publisher, $director]);
$imported++; $imported++;
} }
} else { } else {
// IMPORT CRITIQUES // Import critiques (inchangé)
$stmtCritiques = $pdo->prepare("INSERT INTO critiques (id, title, year, director, poster, rating, review, streaming) $stmtCritiques = $pdo->prepare("INSERT INTO critiques (id, title, year, director, poster, rating, review, streaming)
VALUES (?, ?, ?, ?, ?, ?, ?, ?) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE title=VALUES(title), year=VALUES(year), director=VALUES(director), ON DUPLICATE KEY UPDATE title=VALUES(title), year=VALUES(year), director=VALUES(director),
@@ -979,20 +983,13 @@ case 'import_batch':
$title = $rowData['Title'] ?? $rowData['title'] ?? ''; $title = $rowData['Title'] ?? $rowData['title'] ?? '';
if (empty($title)) continue; if (empty($title)) continue;
// Extraction de l'année depuis publish_date si disponible
$year = ''; $year = '';
if (!empty($rowData['publish_date'])) { if (!empty($rowData['publish_date'])) $year = substr($rowData['publish_date'], 0, 4);
$year = substr($rowData['publish_date'], 0, 4); else $year = $rowData['Year'] ?? $rowData['year'] ?? '';
} else {
$year = $rowData['Year'] ?? $rowData['year'] ?? '';
}
$id = makeStableId('critique', $title, $year); $id = makeStableId('critique', $title, $year);
$ratingRaw = $rowData['Rating'] ?? $rowData['rating'] ?? ''; $ratingRaw = $rowData['Rating'] ?? $rowData['rating'] ?? '';
$rating = ($ratingRaw !== '' && $ratingRaw !== null) ? (float)$ratingRaw : null; $rating = ($ratingRaw !== '' && $ratingRaw !== null) ? (float)$ratingRaw : null;
// Utilise 'review' sinon retombe sur 'description' (cas de votre CSV)
$review = $rowData['Review'] ?? $rowData['review'] ?? $rowData['description'] ?? ''; $review = $rowData['Review'] ?? $rowData['review'] ?? $rowData['description'] ?? '';
$director = ''; $director = '';