diff --git a/api.php b/api.php
index f01558f..9b7b4e4 100644
--- a/api.php
+++ b/api.php
@@ -189,66 +189,107 @@ function fetchDVDFr($ean, $pdo) {
}
// Étape 4 : Extraire les données depuis le HTML
- $result = [
- 'poster' => '',
- 'publisher' => '',
- 'format' => '',
- 'length' => '',
- 'aspect' => '',
- 'discs' => '',
- ];
-
- // Extraction de l'affiche
- if (preg_match('/
]+class=["\'][^"\']*cover[^"\']*["\'][^>]+src=["\']([^"\']+)["\']/i', $ficheHtml, $matches)) {
- $result['poster'] = $matches[1];
- } elseif (preg_match('/
]+alt=["\'][^"\']*(?:jaquette|cover|pochette)[^"\']*["\'][^>]+src=["\']([^"\']+)["\']/i', $ficheHtml, $matches)) {
- $result['poster'] = $matches[1];
- } elseif (preg_match('/src=["\']([^"\']+(?:cover|jaquette|pochette)[^"\']*\.(?:jpg|png|webp))["\']/i', $ficheHtml, $matches)) {
- $result['poster'] = $matches[1];
- }
-
- // Extraction de l'éditeur
- if (preg_match('/(?:éditeur|distributeur|studio)\s*[:<\/]>\s*([^<]+)/i', $ficheHtml, $matches)) {
- $result['publisher'] = trim(strip_tags($matches[1]));
- }
-
- // Extraction du format
- if (preg_match('/(4k\s*ultra\s*hd|ultra\s*hd|blu[\s-]?ray|dvd|coffret)/i', $ficheHtml, $matches)) {
- $format = strtoupper(trim($matches[1]));
- if (strpos($format, '4K') !== false || strpos($format, 'ULTRA') !== false) {
- $result['format'] = '4K Ultra HD';
- } elseif (strpos($format, 'BLU') !== false) {
- $result['format'] = 'Blu-ray';
- } elseif (strpos($format, 'DVD') !== false) {
- $result['format'] = 'DVD';
- } elseif (strpos($format, 'COFFRET') !== false) {
- $result['format'] = 'Coffret';
+$result = [
+ 'poster' => '',
+ 'publisher' => '',
+ 'format' => '',
+ 'length' => '',
+ 'aspect' => '',
+ 'discs' => '',
+];
+
+// 🔥 EXTRACTION ROBUSTE DE L'AFFICHE (plusieurs méthodes fallback)
+// Méthode 1 : Chercher toutes les images et filtrer par taille/URL
+preg_match_all('/
]+src=["\']([^"\']+)["\'][^>]*>/i', $ficheHtml, $allImages);
+if (!empty($allImages[1])) {
+ foreach ($allImages[1] as $imgUrl) {
+ // Filtrer les images qui ressemblent à une jaquette
+ if (preg_match('/(cover|jaquette|pochette|affiche|poster|front)/i', $imgUrl) ||
+ preg_match('/\.(jpg|jpeg|png|webp)$/i', $imgUrl)) {
+ // Vérifier que c'est bien une URL complète
+ if (strpos($imgUrl, 'http') === 0) {
+ $result['poster'] = $imgUrl;
+ error_log("DVDFr: Affiche trouvée (méthode 1) - $imgUrl");
+ break;
+ } elseif (strpos($imgUrl, '//') === 0) {
+ $result['poster'] = 'https:' . $imgUrl;
+ error_log("DVDFr: Affiche trouvée (méthode 1b) - " . $result['poster']);
+ break;
+ } elseif (strpos($imgUrl, '/') === 0) {
+ $result['poster'] = 'https://www.dvdfr.com' . $imgUrl;
+ error_log("DVDFr: Affiche trouvée (méthode 1c) - " . $result['poster']);
+ break;
+ }
}
}
-
- // Extraction de la durée
- if (preg_match('/(?:durée|duree|duration)\s*[:<\/]>\s*(\d+)\s*(?:min|mn|h)/i', $ficheHtml, $matches)) {
- $result['length'] = trim($matches[1]) . ' min';
+}
+
+// Méthode 2 : Chercher dans les balises meta (Open Graph)
+if (empty($result['poster']) && preg_match('/]+property=["\']og:image["\'][^>]+content=["\']([^"\']+)["\']/i', $ficheHtml, $matches)) {
+ $result['poster'] = $matches[1];
+ error_log("DVDFr: Affiche trouvée (méthode 2 - og:image) - " . $result['poster']);
+}
+
+// Méthode 3 : Chercher dans les balises link (rel="image_src")
+if (empty($result['poster']) && preg_match('/]+rel=["\']image_src["\'][^>]+href=["\']([^"\']+)["\']/i', $ficheHtml, $matches)) {
+ $result['poster'] = $matches[1];
+ error_log("DVDFr: Affiche trouvée (méthode 3 - link image_src) - " . $result['poster']);
+}
+
+// Méthode 4 : Chercher dans les données JSON-LD (structured data)
+if (empty($result['poster']) && preg_match('/