diff options
Diffstat (limited to 'data-collection/components')
| -rw-r--r-- | data-collection/components/subscriptions.py | 8 | ||||
| -rw-r--r-- | data-collection/components/subscriptions/main.py | 36 | ||||
| -rw-r--r-- | data-collection/components/subscriptions/typing.py | 12 |
3 files changed, 48 insertions, 8 deletions
diff --git a/data-collection/components/subscriptions.py b/data-collection/components/subscriptions.py deleted file mode 100644 index 31a0500..0000000 --- a/data-collection/components/subscriptions.py +++ /dev/null @@ -1,8 +0,0 @@ -from types import TypedDict -from datetime import datetime - -class SubscriptionDict(TypedDict): - id: str - link: str - time_between_fetches: float # In hours. - last_update: datetime diff --git a/data-collection/components/subscriptions/main.py b/data-collection/components/subscriptions/main.py new file mode 100644 index 0000000..352cf1b --- /dev/null +++ b/data-collection/components/subscriptions/main.py @@ -0,0 +1,36 @@ +from dataclasses import dataclass, field +from datetime import datetime +from sys import stderr +from typing import TypedDict, List +from bson.objectid import ObjectId +from feedparser import parse # type: ignore +import requests +import schedule +from components.videos import VideoTuple + +@dataclass +class Subscription: + id: str + link: str + time_between_fetches: int + last_update: datetime = datetime.min + videos: List[VideoTuple] = field(default_factory=list) + subscribers: List[ObjectId] = field(default_factory=list) + + def __post_init__(self) -> None: + self._job: schedule.Job = schedule.every(self.time_between_fetches).second.do(self.update) + + def update(self) -> None: + try: + for entry in parse(self.link)["entries"]: + self.videos.append(VideoTuple( + id = entry.id, + link = entry.link, + title = entry.title, + published = datetime.fromisoformat(entry.published), + updated = datetime.fromisoformat(entry.updated), + thumbnail = entry.media_thumbnail[0]["url"], + summary = entry.summary, + )) + except Exception as e: + print("Ran into exception", e, file=stderr) diff --git a/data-collection/components/subscriptions/typing.py b/data-collection/components/subscriptions/typing.py new file mode 100644 index 0000000..eebcece --- /dev/null +++ b/data-collection/components/subscriptions/typing.py @@ -0,0 +1,12 @@ +from datetime import datetime +from typing import TypedDict, List +from bson.objectid import ObjectId +from components.videos import VideoTuple + +class SubsDict(TypedDict): + id: str + link: str + time_between_fetches: int # In hours. + last_update: datetime + videos: List[VideoTuple] + subscribers: List[ObjectId] |
