# Scraping images produit — Riffmatch

Objectif : récupérer **toutes** les images d'une fiche produit (pas seulement l'image principale), les normaliser, les dédupliquer, puis laisser le back-office choisir l'image la plus adaptée pour le comparatif.

## Principe

Pour chaque produit, on stocke :
- les métadonnées produit
- l'URL de la fiche source
- la liste complète des images détectées
- l'ordre d'apparition
- la source d'extraction (`json_ld`, `og:image`, `gallery`, `img_tag`, `script_json`, etc.)
- un score heuristique de priorité
- un champ `is_selected_for_comparison` modifiable ensuite en back-office

## Pourquoi tout récupérer

C'est le choix le plus robuste parce que :
- l'image listing n'est pas toujours la meilleure
- l'image principale marchande n'est pas toujours la plus lisible dans une hero card
- certaines fiches ont plusieurs angles, détails, ou visuels packaging
- on peut ensuite choisir manuellement ou semi-automatiquement la meilleure image

## Pipeline recommandé

1. Récupérer la page produit HTML
2. Extraire toutes les URLs image depuis plusieurs sources
3. Normaliser les URLs
4. Dédupliquer
5. Conserver un ordre stable + une priorité heuristique
6. Télécharger localement si nécessaire
7. Exposer ça en back-office avec un sélecteur d'image principale

## Sortie JSON attendue

Voir `image_schema.example.json`.

## Règle produit recommandée

Conserver deux notions séparées :
- `primary_image_url`: meilleure image détectée automatiquement
- `selected_image_url`: image choisie en back-office

Le front doit toujours utiliser :
- `selected_image_url` si définie
- sinon `primary_image_url`
- sinon première image valide du tableau `images`

## Remarques par marchand

### Thomann
Les fiches contiennent souvent une galerie assez structurée. Il faut inspecter :
- balises meta
- JSON-LD
- galeries HTML
- éventuels blobs JSON embarqués dans le HTML

### Woodbrass
Les images peuvent être plus irrégulières selon les templates. Il faut être plus tolérant et scanner :
- Open Graph
- JSON-LD
- balises `img`
- scripts inline contenant des URLs médias

## Back-office minimum à prévoir

Pour chaque produit :
- miniature des images extraites
- case / bouton pour définir l'image de comparaison
- indication `source`, `position`, `priority_score`
- possibilité d'exclure certaines images (packaging, zoom détail, dos uniquement, etc.)

## Étape suivante

Brancher ce script à un scraper produit Thomann / Woodbrass et persister la sortie dans la base produit ou un JSON d'import.
