# 🚀 PriceWatch - Démarrage rapide

## Installation

```bash
# Activer l'environnement virtuel
source venv/bin/activate

# Installer les navigateurs Playwright (pour anti-bot)
playwright install chromium
```

## Commandes essentielles

### 1. Vérifier l'installation
```bash
pricewatch doctor
```

### 2. Détecter un store depuis une URL
```bash
# Amazon
pricewatch detect "https://www.amazon.fr/dp/B08N5WRWNW"

# Cdiscount
pricewatch detect "https://www.cdiscount.com/informatique/exemple/f-123-exemple.html"
```

### 3. Tester la récupération d'une page
```bash
# Via HTTP (rapide)
pricewatch fetch "https://www.amazon.fr/" --http

# Via Playwright (anti-bot)
pricewatch fetch "https://www.amazon.fr/" --playwright

# Mode visible (voir le navigateur)
pricewatch fetch "https://www.amazon.fr/" --playwright --headful
```

### 4. Pipeline complet : YAML → JSON

**Étape 1** : Éditer `scrap_url.yaml` avec de vraies URLs

```yaml
urls:
  - "https://www.amazon.fr/dp/VOTRE_ASIN"
  - "https://www.cdiscount.com/votre/url/f-123-sku.html"

options:
  use_playwright: true
  headful: false
  save_html: true
  save_screenshot: true
  timeout_ms: 60000
```

**Étape 2** : Lancer le scraping

```bash
# Mode normal
pricewatch run --yaml scrap_url.yaml --out scraped_store.json

# Mode debug (logs détaillés)
pricewatch run --yaml scrap_url.yaml --out scraped_store.json --debug
```

**Étape 3** : Consulter les résultats

```bash
# Voir le JSON de sortie
cat scraped_store.json | python -m json.tool

# Voir les HTML sauvegardés (si save_html: true)
ls -lh scraped/

# Voir les screenshots (si save_screenshot: true)
ls -lh scraped/*.png
```

### 5. Parser un fichier HTML local

```bash
# Utile pour tester les sélecteurs
pricewatch parse amazon --in scraped/amazon_B08N5WRWNW.html
pricewatch parse cdiscount --in scraped/cdiscount_123-sku.html
```

## Structure des résultats JSON

Chaque produit scraped contient :

```json
{
  "source": "amazon",
  "url": "https://www.amazon.fr/dp/B08N5WRWNW",
  "fetched_at": "2026-01-13T11:30:00Z",
  "title": "Nom du produit",
  "price": 299.99,
  "currency": "EUR",
  "shipping_cost": null,
  "stock_status": "in_stock",
  "reference": "B08N5WRWNW",
  "category": "Électronique",
  "images": [
    "https://example.com/image1.jpg"
  ],
  "specs": {
    "Marque": "Example",
    "Couleur": "Noir"
  },
  "debug": {
    "method": "http",
    "status": "success",
    "errors": [],
    "notes": ["Récupération réussie"],
    "duration_ms": 1250,
    "html_size_bytes": 145000
  }
}
```

## Gestion des erreurs

### Erreur 403 (Anti-bot)
Le système bascule automatiquement sur Playwright si HTTP échoue avec `use_playwright: true`.

### Captcha détecté
Le snapshot contiendra `debug.status: "failed"` avec l'erreur dans `debug.errors`.

### Timeout
Ajustez `timeout_ms` dans le YAML (par défaut 60000 = 1 minute).

### Parsing incomplet
Si le titre ou le prix manque, `debug.status: "partial"` avec les champs disponibles.

## Logs détaillés

```bash
# Mode debug pour voir tous les détails
pricewatch run --debug

# Les logs incluent :
# - Détection du store avec score
# - Méthode de récupération (HTTP/Playwright)
# - Durée de chaque opération
# - Taille du HTML récupéré
# - Statut du parsing
# - Erreurs rencontrées
```

## Exemples de URLs testables

### Amazon.fr
```
https://www.amazon.fr/dp/B08N5WRWNW
https://www.amazon.fr/gp/product/B08N5WRWNW
```

### Cdiscount.com
```
https://www.cdiscount.com/informatique/r-clavier.html
```

**⚠️ Important** : Respectez les conditions d'utilisation et les robots.txt des sites.

## Prochaines étapes

1. **Ajouter des fixtures HTML** pour tester les parsers sans faire de requêtes
2. **Écrire des tests pytest** pour valider le fonctionnement
3. **Ajouter d'autres stores** (Fnac, Darty, etc.)
4. **Mettre en place une base de données** pour historiser les prix
5. **Créer un worker** pour automatiser le scraping quotidien

## Support

- Documentation : `README.md`
- Architecture : `CLAUDE.md`
- TODO : `TODO.md`
- Changelog : `CHANGELOG.md`

---

**Version** : 0.1.0
**Date** : 2026-01-13
**Statut** : ✅ Opérationnel (Phase 1 complétée)
