2026-02-01 09:31:38 +01:00
..
2026-02-01 09:31:38 +01:00
2026-02-01 09:31:38 +01:00
2026-02-01 09:31:38 +01:00
2026-02-01 09:31:38 +01:00
2026-02-01 09:31:38 +01:00

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

pip install tweepy==4.14.0

Configuration

Variables d'environnement requises:

# Twitter API Bearer Token
TWITTER_BEARER_TOKEN="your_bearer_token_here"

Utilisation

Exemple de base

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

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:

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 pour plus de détails sur l'API Twitter.

Dépannage

Erreur: "Twitter API authentication failed"

Vérifiez votre bearer token:

client.get_me()  # Devrait retourner vos infos utilisateur

Rate limit atteint trop rapidement

Vérifiez l'utilisation:

print(f"API calls: {scraper.api_calls_made}/{scraper.max_tweets_per_hour}")

Mode dégradé activé sans raison

Vérifiez les seuils:

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