diff --git a/src/feed.py b/src/feed.py index 4183187..63184b0 100644 --- a/src/feed.py +++ b/src/feed.py @@ -21,19 +21,19 @@ class Feeds(Enum): @dataclass class Source: - name: str - url: str - icon_url: str + name: str | None + url: str | None + icon_url: str | None feed: FeedParserDict @classmethod def from_parsed(cls, feed:FeedParserDict): - # print(json.dumps(feed, indent=8)) + return cls( - name=feed.channel.title, - url=feed.channel.link, - icon_url=feed.feed.image.href, + name=feed.get("channel", {}).get("title"), + url=feed.get("channel", {}).get("link"), + icon_url=feed.get("feed", {}).get("image", {}).get("href"), feed=feed ) @@ -44,10 +44,10 @@ class Source: @dataclass class Article: - title: str - description: str - url: str - published: datetime + title: str | None + description: str | None + url: str | None + published: datetime | None author: str | None @classmethod @@ -55,12 +55,15 @@ class Article: entry = feed.entries[0] # log.debug(json.dumps(entry, indent=8)) + published_parsed = entry.get("published_parsed") + published = datetime(*entry.published_parsed[0:-2]) if published_parsed else None + return cls( - title=entry.title, - description=entry.description, - url=entry.link, - published=datetime(*entry.published_parsed[0:-2]), - author = entry.get("author", None) + title=entry.get("title"), + description=entry.get("description"), + url=entry.get("link"), + published=published, + author = entry.get("author") ) async def get_thumbnail_url(self): @@ -78,12 +81,12 @@ class Article: return image_element.get("content") if image_element else None -def get_source(feed: Feeds) -> Source: +def get_source(rss_url: str) -> Source: """ """ - parsed_feed = parse("https://gitea.corbz.dev/corbz/BBC-News-Bot/rss/branch/main/src/extensions/news.py") + parsed_feed = parse(rss_url) return Source.from_parsed(parsed_feed)