mirror of https://github.com/stijndcl/didier
72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
import re
|
|
|
|
from data.embeds import UforaNotification
|
|
import feedparser
|
|
import json
|
|
from settings import UFORA_TOKEN
|
|
|
|
|
|
course_urls = {
|
|
"Algoritmen en Datastructuren 3": "https://ufora.ugent.be/d2l/le/news/rss/437923/course?token=",
|
|
"Artificiële Intelligentie": "https://ufora.ugent.be/d2l/le/news/rss/439739/course?token=",
|
|
"Automaten, Berekenbaarheid en Complexiteit": "https://ufora.ugent.be/d2l/le/news/rss/439079/course?token=",
|
|
"Besturingssystemen": "https://ufora.ugent.be/d2l/le/news/rss/442814/course?token=",
|
|
"Computationele Biologie": "https://ufora.ugent.be/d2l/le/news/rss/448904/course?token=",
|
|
"Computerarchitectuur": "https://ufora.ugent.be/d2l/le/news/rss/439172/course?token=",
|
|
"Informatiebeveiliging": "https://ufora.ugent.be/d2l/le/news/rss/444476/course?token=",
|
|
"Logisch Programmeren": "https://ufora.ugent.be/d2l/le/news/rss/443368/course?token=",
|
|
"Modelleren en Simuleren": "https://ufora.ugent.be/d2l/le/news/rss/439235/course?token=",
|
|
"Parallelle Computersystemen": "https://ufora.ugent.be/d2l/le/news/rss/449671/course?token=",
|
|
"Software Engineering Lab 2": "https://ufora.ugent.be/d2l/le/news/rss/445170/course?token=",
|
|
"Statistiek en Probabiliteit": "https://ufora.ugent.be/d2l/le/news/rss/445169/course?token=",
|
|
"Wetenschappelijk Rekenen": "https://ufora.ugent.be/d2l/le/news/rss/445174/course?token="
|
|
}
|
|
|
|
|
|
def run():
|
|
"""
|
|
Check for new notifications
|
|
"""
|
|
# List of new notifications
|
|
new_notifications = []
|
|
|
|
# List of old notifications
|
|
with open("files/ufora_notifications.json", "r") as fp:
|
|
notifications = json.load(fp)
|
|
|
|
for course, url in course_urls.items():
|
|
# Automatically append new/missing courses
|
|
if course not in notifications:
|
|
notifications[course] = []
|
|
|
|
# Get the updated feed
|
|
feed = feedparser.parse(f"url{UFORA_TOKEN}")
|
|
|
|
# Filter out old notifications
|
|
feed = list(filter(lambda f: _parse_ids(f["id"])[0] not in notifications[course], feed.entries))
|
|
|
|
if feed:
|
|
for item in feed:
|
|
notif_id, course_id = _parse_ids(item["id"])
|
|
new_notifications.append(UforaNotification(item, course, notif_id, course_id))
|
|
|
|
notifications[course].append(notif_id)
|
|
|
|
# Update list of notifications
|
|
if new_notifications:
|
|
with open("files/ufora_notifications.json", "w") as fp:
|
|
json.dump(notifications, fp)
|
|
|
|
return new_notifications
|
|
|
|
|
|
def _parse_ids(url: str):
|
|
match = re.search(r"[0-9]+-[0-9]+$", url)
|
|
|
|
if not match:
|
|
return None, None
|
|
|
|
spl = match[0].split("-")
|
|
|
|
return spl[0], spl[1]
|