# Story 2.2: Implémenter le scraper Reddit Status: review ## Story As a développeur, I want implémenter un scraper Reddit, So que je peux collecter des discussions Reddit sur les matchs de football. ## Acceptance Criteria **Given** les credentials Reddit API sont configurés **When** le scraper Reddit est exécuté **Then** il collecte des posts et commentaires de subreddits pertinents (r/soccer, r/football, etc.) **And** il extrait le texte, upvotes, et timestamp **And** les données sont stockées avec format cohérent avec Twitter **Given** le scraper Reddit fonctionne **When** il rencontre une erreur **Then** l'erreur est loggée sans arrêter le processus global **And** le scraper continue avec les autres sources ## Tasks / Subtasks - [x] Installer les dépendances Reddit API (AC: #1) - [x] Installer `praw` (Python Reddit API Wrapper) - [x] Configurer les credentials Reddit API - [x] Créer le module scraper Reddit - [x] Vérifier l'authentification Reddit - [x] Configurer les subreddits à scrapper - [x] Implémenter le collecteur de posts Reddit (AC: #1) - [x] Créer la fonction de collecte de posts par subreddit - [x] Extraire les données: texte, upvotes, timestamp - [x] Implémenter le parsing des données Reddit - [x] Stocker les posts dans la base de données - [x] Gérer les erreurs de connexion/timeout - [x] Implémenter le collecteur de commentaires (AC: #1) - [x] Créer la fonction de collecte de commentaires - [x] Extraire les données: texte, upvotes, timestamp - [x] Lier les commentaires aux posts parent - [x] Stocker les commentaires dans la base de données - [x] Gérer les erreurs - [x] Créer les schémas de base de données pour posts Reddit (AC: #1) - [x] Créer la table `posts_reddit` dans SQLite - [x] Définir les colonnes: id, title, text, upvotes, created_at - [x] Ajouter les colonnes pour match_id et source - [x] Créer les indexes appropriés - [x] Générer et appliquer les migrations - [x] Implémenter la gestion d'erreurs robuste (AC: #2) - [x] Logger toutes les erreurs sans arrêter le processus - [x] Implémenter le retry pour les erreurs temporaires - [x] Continuer avec les autres sources en cas d'erreur - [x] Configurer les timeouts appropriés - [x] Tester la gestion d'erreurs - [x] Tester le scraper Reddit (AC: #1, #2) - [x] Tester la collecte de posts pour un match - [x] Vérifier que les données sont stockées correctement - [x] Tester la gestion d'erreurs - [x] Vérifier que le scraper continue avec autres sources - [x] Valider le format cohérent avec Twitter ## Dev Notes ### Architecture Patterns et Contraintes **Stack Technique Imposé:** - **Reddit API:** PRAW (Python Reddit API Wrapper) - **Database:** SQLite avec Drizzle (Next.js) et SQLAlchemy (FastAPI) - **Logging:** Structuré avec gestion d'erreurs robuste - **Pondération:** Reddit 25% (Twitter 60%, RSS 15%) **Configuration Requise:** - Credentials Reddit API: Client ID, Client Secret - Subreddits: r/soccer, r/football, r/Ligue1, etc. - Stockage: Tables `posts_reddit` dans SQLite - Format cohérent avec Twitter (même structure de données) ### Technical Requirements **Configuration Reddit API:** ```python import praw # Configuration Reddit API reddit = praw.Reddit( client_id="YOUR_CLIENT_ID", client_secret="YOUR_CLIENT_SECRET", user_agent="Chartbastan/1.0" ) # Subreddits à scrapper SUBREDDITS = ["soccer", "football", "Ligue1", "PremierLeague"] ``` ### File Structure ``` backend/ ├── app/ │ ├── scrapers/ │ │ └── reddit_scraper.py │ ├── models/ │ │ └── reddit_post.py │ └── schemas/ │ └── reddit_post.py ``` ### References - [Source: _bmad-output/planning-artifacts/epics.md#Story-2.2] ## Dev Agent Record ### Agent Model Used GLM-4.7 ### Completion Notes List - Scraper Reddit implémenté avec succès - Posts et commentaires collectés et stockés - Gestion d'erreurs robuste fonctionnelle - Tests unitaires complets créés - Migrations Alembic générées pour tables Reddit - Schémas Pydantic créés pour validation - Intégration avec base de données SQLite via SQLAlchemy - Structure cohérente avec scraper Twitter existant - Logging structuré avec gestion d'erreurs - Support de multiples subreddits - Filtre par mots-clés optionnel - Relation posts-commentaires via SQLAlchemy ORM ### File List - `backend/app/scrapers/reddit_scraper.py` - Module principal scraper Reddit - `backend/app/models/reddit_post.py` - Modèles SQLAlchemy pour posts et commentaires Reddit - `backend/app/schemas/reddit_post.py` - Schémas Pydantic pour validation - `backend/tests/test_reddit_scraper.py` - Tests unitaires complets - `backend/alembic/versions/20260117_0002_create_reddit_tables.py` - Migration pour tables Reddit - `backend/requirements.txt` - Ajout de dépendance praw==7.8.1 - `backend/app/models/__init__.py` - Export des nouveaux modèles - `backend/app/schemas/__init__.py` - Export des nouveaux schémas