Files
scrap/fonctionnement.md
Gilles Soulier cf7c415e22 before claude
2026-01-17 13:40:26 +01:00

27 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Fonctionnement général de PriceWatch
Lorsquun utilisateur colle une URL dans la web UI et déclenche lajout/déclenchement dun scrap, voici le cheminement principal entre le **frontend Vue** et le **backend FastAPI** :
1. **Entrée utilisateur / validation**
* Le popup "Ajouter un produit" envoie `POST /scrape/preview` avec lURL + le mode (HTTP ou Playwright).
* Les boutons "Ajouter" et "Enregistrer" sont accessibles après que la preview ait renvoyé un `ProductSnapshot`, sinon une erreur est affichée dans le popup.
2. **Backend (API)**
* Lendpoint `/scrape/preview` reçoit lURL, détermine le store (via `pricewatch/app/core/registry.py`) et utilise un parser adapté (`pricewatch/app/stores/<store>/`) pour extraire titre, prix, images, description, caractéristiques, stock, etc.
* Si la page nécessite un navigateur, la stratégie Playwright (avec `pricewatch/app/scraping/playwright.py`) est déclenchée, sinon le fetch HTTP simple (`pricewatch/app/scraping/http.py`) suffit.
* Le snapshot structuré `ProductSnapshot` contient les métadonnées, la liste dimages (jpg/webp) et les champs `msrp`, `discount`, `categories`, `specs`, etc.
* En cas de succès, la preview renvoie un JSON que le frontend affiche dans le popup. En cas derreur (404, 401, scraping bloqué), lutilisateur voit directement le message retourné.
3. **Confirmation / persist**
* Quand lutilisateur clique sur "Enregistrer", la web UI déclenche `POST /scrape/commit` avec lobjet snapshot.
* Le backend réinsère les données dans la base (`pricewatch/app/core/io.py`) et lAPI `/products` ou `/enqueue` peut ensuite réafficher ou re-scraper ce produit.
4. **Cycle de rafraîchissement**
* Le frontend peut aussi appeler `/enqueue` pour forcer un nouveau scrap dune URL existante (bouton refresh dans la carte ou le détail).
* Le backend place la requête dans Redis (via `pricewatch/app/core/queue.py`), un worker la consomme, met à jour la base, et le frontend récupère les nouvelles données via `GET /products`.
5. **Observabilité / logs**
* Les étapes critiques (preview, commit, enqueue) génèrent des logs (backend/uvicorn) disponibles dans la web UI via les boutons logs. Les erreurs sont mises en rouge et peuvent être copiées pour diagnostic.
Ce flux respecte les contraintes : la web UI déroule les interactions, le backend orchestre le scraping (HTTP vs Playwright), applique la logique store et diffuse le résultat via les endpoints REST existants.