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=", "Communicatienetwerken": "https://ufora.ugent.be/d2l/le/news/rss/447014/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=", "Inleiding tot Telecommunicatie": "https://ufora.ugent.be/d2l/le/news/rss/450232/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=", "Wiskundige Modellering": "https://ufora.ugent.be/d2l/le/news/rss/446530/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]