4.5 KiB
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
-
Installer les dépendances RSS (AC: #1)
- Installer
feedparserpour parsing RSS - Configurer les URLs RSS sources sportives
- Créer le module scraper RSS
- Configurer les sources RSS (ESPN, BBC Sport, etc.)
- Vérifier l'accès aux flux RSS
- Installer
-
Implémenter le parser RSS (AC: #1)
- Créer la fonction de parsing de flux RSS
- Extraire les données: titre, contenu, date
- Filtrer les articles pertinents (football)
- Stocker les articles dans la base de données
- Gérer les erreurs de parsing
-
Créer les schémas de base de données pour articles RSS (AC: #1)
- Créer la table
articles_rssdans SQLite - Définir les colonnes: id, title, content, published_at
- Ajouter les colonnes pour source_url et match_id
- Créer les indexes appropriés
- Générer et appliquer les migrations
- Créer la table
-
Implémenter la gestion d'erreurs robuste (AC: #2)
- Logger toutes les erreurs sans arrêter le processus
- Continuer avec les autres sources RSS
- Configurer les timeouts appropriés
- Tester la gestion d'erreurs
-
Tester le scraper RSS (AC: #1, #2)
- Tester le parsing de flux RSS
- Vérifier que les articles sont stockés correctement
- Tester la gestion d'erreurs
- 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:
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
RSSArticleavec indexes appropriés - Création des schémas Pydantic pour validation
- Implémentation du module
RSSScraperavec 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_articlesdans 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