# Story 2.3: Implémenter le scraper RSS Status: review ## Story As a développeur, I want implémenter un scraper RSS, So que je peux collecter des articles de sources RSS sur les matchs. ## Acceptance Criteria **Given** des URLs RSS sont configurées (sources sportives) **When** le scraper RSS est exécuté **Then** il parse les flux RSS et extrait les articles pertinents **And** il extrait le titre, contenu, date de publication **And** les données sont stockées avec format cohérent **Given** une source RSS est indisponible **When** le scraper tente de la lire **Then** l'erreur est loggée **And** le scraper continue avec les autres sources RSS ## Tasks / Subtasks - [x] Installer les dépendances RSS (AC: #1) - [x] Installer `feedparser` pour parsing RSS - [x] Configurer les URLs RSS sources sportives - [x] Créer le module scraper RSS - [x] Configurer les sources RSS (ESPN, BBC Sport, etc.) - [x] Vérifier l'accès aux flux RSS - [x] Implémenter le parser RSS (AC: #1) - [x] Créer la fonction de parsing de flux RSS - [x] Extraire les données: titre, contenu, date - [x] Filtrer les articles pertinents (football) - [x] Stocker les articles dans la base de données - [x] Gérer les erreurs de parsing - [x] Créer les schémas de base de données pour articles RSS (AC: #1) - [x] Créer la table `articles_rss` dans SQLite - [x] Définir les colonnes: id, title, content, published_at - [x] Ajouter les colonnes pour source_url et match_id - [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] Continuer avec les autres sources RSS - [x] Configurer les timeouts appropriés - [x] Tester la gestion d'erreurs - [x] Tester le scraper RSS (AC: #1, #2) - [x] Tester le parsing de flux RSS - [x] Vérifier que les articles sont stockés correctement - [x] Tester la gestion d'erreurs - [x] Valider le format cohérent avec Twitter/Reddit ## Dev Notes ### Architecture Patterns et Contraintes **Stack Technique Imposé:** - **RSS Parser:** feedparser - **Database:** SQLite avec Drizzle (Next.js) et SQLAlchemy (FastAPI) - **Sources:** ESPN, BBC Sport, Goal.com, etc. - **Pondération:** RSS 15% (Twitter 60%, Reddit 25%) ### Technical Requirements **Configuration RSS:** ```python import feedparser # Sources RSS RSS_SOURCES = [ "http://www.espn.com/espn/rss/news", "http://feeds.bbci.co.uk/sport/football/rss.xml", "https://www.goal.com/rss" ] def parse_rss_feed(url: str): feed = feedparser.parse(url) return feed.entries ``` ### File Structure ``` backend/ ├── app/ │ ├── scrapers/ │ │ └── rss_scraper.py │ ├── models/ │ │ └── rss_article.py │ └── schemas/ │ └── rss_article.py ``` ### References - [Source: _bmad-output/planning-artifacts/epics.md#Story-2.3] ## Dev Agent Record ### Agent Model Used GLM-4.7 ### Completion Notes List - Scraper RSS implémenté avec succès - Articles collectés et stockés - Gestion d'erreurs robuste fonctionnelle ✅ **2026-01-17**: Implémentation complète du scraper RSS: - Création du modèle de base de données `RSSArticle` avec indexes appropriés - Création des schémas Pydantic pour validation - Implémentation du module `RSSScraper` avec parsing de flux RSS - Filtrage automatique des articles pertinents (mots-clés football) - Gestion d'erreurs robuste: continue avec les autres sources en cas d'erreur - Configuration par défaut avec 4 sources sportives (ESPN, BBC Sport, Goal.com, Sky Sports) - Timeout configurable (30 secondes par défaut) - Migration Alembic créée pour la table `rss_articles` - Tests unitaires complets créés avec mocks - Format cohérent avec les scrapers Twitter et Reddit ### File List - `backend/app/scrapers/rss_scraper.py` (nouveau) - `backend/app/models/rss_article.py` (nouveau) - `backend/app/schemas/rss_article.py` (nouveau) - `backend/app/models/__init__.py` (modifié) - `backend/app/schemas/__init__.py` (modifié) - `backend/alembic/versions/20260117_0007_create_rss_articles_table.py` (nouveau) - `backend/tests/test_rss_scraper.py` (nouveau) ## Change Log ### 2026-01-17 - Implémentation du scraper RSS complet avec feedparser - Création de la table `rss_articles` dans SQLite - Implémentation de la gestion d'erreurs robuste - Création de la migration Alembic `20260117_0007_create_rss_articles_table` - Ajout des tests unitaires pour le scraper RSS