# Twitter Scraper

Module de scraping Twitter avec gestion des rate limiting et mode dégradé.

## Fonctionnalités

- ✅ Collecte de tweets pour les matchs de football
- ✅ Rate limiting (1000 req/heure) avec alertes prédictives (>90%)
- ✅ Mode dégradé avec priorisation des matchs VIP
- ✅ Retry avec backoff exponentiel
- ✅ Logging structuré pour monitoring
- ✅ Stockage en base de données partagée

## Installation

```bash
pip install tweepy==4.14.0
```

## Configuration

Variables d'environnement requises:

```bash
# Twitter API Bearer Token
TWITTER_BEARER_TOKEN="your_bearer_token_here"
```

## Utilisation

### Exemple de base

```python
from app.scrapers.twitter_scraper import create_twitter_scraper
from app.database import SessionLocal

# Créer le scraper
scraper = create_twitter_scraper(
    bearer_token="your_bearer_token",
    vip_match_ids=[1, 2, 3]  # Matchs VIP pour mode dégradé
)

# Scrapper des tweets pour un match
db = SessionLocal()
try:
    tweets = scraper.scrape_and_save(
        match_id=1,
        keywords=["#MatchName", "Team1 vs Team2"],
        db=db,
        max_results=100
    )
    print(f"✅ {len(tweets)} tweets collectés")
finally:
    db.close()
```

### Configuration avancée

```python
from app.scrapers.twitter_scraper import TwitterScraper

scraper = TwitterScraper(
    bearer_token="your_bearer_token",
    max_tweets_per_hour=1000,  # Limite par défaut
    rate_limit_alert_threshold=0.9,  # Alert à 90%
    vip_match_ids=[1, 2, 3, 4, 5]
)
```

## Architecture

### Rate Limiting

Le scraper implémente:
- **Tracking en temps réel** des appels API
- **Alertes prédictives** quand la limite est atteinte à >90%
- **Mode dégradé automatique** quand la limite est atteinte
- **Backoff exponentiel** pour éviter les blocages

### Mode Dégradé

Quand le rate limit est atteint:
- Le scraper passe en mode VIP seulement
- Seuls les matchs VIP sont scrapés
- Alertes loggées pour monitoring
- Les données sont sauvegardées avant arrêt

## Tests

Exécuter les tests:

```bash
cd backend
pytest tests/test_twitter_scraper.py -v
```

## Intégration

Le module s'intègre avec:
- **SQLite**: Base de données partagée avec Next.js
- **SQLAlchemy**: ORM pour le backend FastAPI
- **Drizzle ORM**: ORM pour le frontend Next.js
- **RabbitMQ** (Phase 2+): Queue asynchrone pour découplage

## Conventions de Code

- **Nommage Python**: `snake_case`
- **Nommage Base de données**: `snake_case`
- **Logging**: Structuré avec `logging` module
- **Type hints**: Obligatoires avec `typing`

## Documentation API

Voir [documentation Tweepy](https://docs.tweepy.org/) pour plus de détails sur l'API Twitter.

## Dépannage

### Erreur: "Twitter API authentication failed"

Vérifiez votre bearer token:
```python
client.get_me()  # Devrait retourner vos infos utilisateur
```

### Rate limit atteint trop rapidement

Vérifiez l'utilisation:
```python
print(f"API calls: {scraper.api_calls_made}/{scraper.max_tweets_per_hour}")
```

### Mode dégradé activé sans raison

Vérifiez les seuils:
```python
print(f"Usage: {scraper.rate_limit_info.usage_percentage * 100:.1f}%")
```

## Prochaines Étapes

- [ ] Intégration avec RabbitMQ (Phase 2)
- [ ] Système de priorisation dynamique
- [ ] Dashboard de monitoring en temps réel
- [ ] Tests d'intégration E2E
