chartbastan/_bmad-output/implementation-artifacts/2-3-implémenter-le-scraper-rss.md
2026-02-01 09:31:38 +01:00

146 lines
4.5 KiB
Markdown

# 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