aboutsummaryrefslogtreecommitdiff
path: root/data-collection/components/subscriptions/main.py
diff options
context:
space:
mode:
authorA Farzat <a@farzat.xyz>2025-08-19 19:49:21 +0300
committerA Farzat <a@farzat.xyz>2025-08-19 19:49:21 +0300
commitebd5d5b9c0c18d8905a4aafb8faf5f25710b9aee (patch)
treeca52edbaeb610a3d3d9c33a3510629a675bd9807 /data-collection/components/subscriptions/main.py
parent4b14119c651e3a7ce9425d015ccde26765b93e91 (diff)
downloadcsca5028-ebd5d5b9c0c18d8905a4aafb8faf5f25710b9aee.tar.gz
csca5028-ebd5d5b9c0c18d8905a4aafb8faf5f25710b9aee.zip
Add a Subscription dataclass
Diffstat (limited to 'data-collection/components/subscriptions/main.py')
-rw-r--r--data-collection/components/subscriptions/main.py36
1 files changed, 36 insertions, 0 deletions
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)