feat: Semaine 8
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
from domain.entities import Alert
|
||||
from ports.outbound.notifier_protocol import Notifier
|
||||
|
||||
class CliNotifierAdapter(Notifier):
|
||||
def send_alert(self, alert: Alert) -> None:
|
||||
print("-" * 30)
|
||||
print(f"Mots-clefs : {alert.matched_keywords}")
|
||||
print(f"Titre : {alert.article.title}")
|
||||
print(f"Lien : {alert.article.url}")
|
||||
print("-" * 30)
|
||||
@@ -0,0 +1,25 @@
|
||||
import feedparser
|
||||
from datetime import datetime
|
||||
from time import mktime
|
||||
from domain.entities import Article
|
||||
|
||||
class RssFeedAdapter():
|
||||
def __init__(self, feed_url: str):
|
||||
self.feed_url = feed_url
|
||||
|
||||
def fetch_articles(self) -> list[Article]:
|
||||
# On consomme le flux externe
|
||||
feed = feedparser.parse(self.feed_url)
|
||||
articles = []
|
||||
|
||||
for entry in feed.entries:
|
||||
# On convertit le format spécifique RSS vers notre Entité
|
||||
published = datetime.fromtimestamp(mktime(entry.published_parsed)) #type: ignore
|
||||
|
||||
articles.append(Article(
|
||||
title=entry.title,
|
||||
url=entry.link,
|
||||
published_at=published,
|
||||
source=feed.feed.title
|
||||
))
|
||||
return articles
|
||||
Reference in New Issue
Block a user