Select Git revision
-
NatureFreshMilk authoredNatureFreshMilk authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
program_info.py 4.41 KiB
#!/bin/env python3
import datetime
import json
import re
from argparse import ArgumentParser
from datetime import timedelta
from io import BytesIO
from pprint import pprint
import requests
from dateutil import parser as date_parser
from pytz import UTC
class Date:
weekday = ""
day = ""
month = ""
year = ""
time = ""
def __init__(self):
pass
class NextEvent:
date = Date()
title = ""
description = ""
movie_description = ""
tags = ""
link = ""
image = ""
trailer = ""
days = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]
month = [
"Januar",
"Februar",
"März",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember"
]
def __init__(self, next_event, now):
# passende Zeitangabe raussuchen
event_date = date_parser.parse(next_event["date"])
tomorrow = now + timedelta(days=1)
if event_date.day == now.day and event_date.month == now.month and event_date.year == now.year:
start = "Heute"
elif event_date.day == tomorrow.day and event_date.month == tomorrow.month and event_date.year == tomorrow.year:
start = "Morgen"
else:
start = self.days[event_date.weekday()]
self.date.weekday = start
self.date.day = event_date.day
self.date.month = self.month[event_date.month - 1]
self.date.year = event_date.year
self.date.time = event_date.strftime("%H:%M")
# Title des Events
self.title = next_event["title"]
# Beschreibung des Events
self.description = next_event["description"]
# Beschreibung des Films
self.movie_description = next_event["movie"]["description"]
# Baue die Tag-Reihe zusammen.
self.tags = " | ".join([w["description"] for w in next_event["tags"]])
# Generiere die URL zum Event, da diese nicht im JSON steht.
link = next_event["title"].lower().replace('ö', 'o').replace('ä', 'a').replace('ü', 'u').replace('ß', 'ss')
link = re.sub("[^[A-Za-z0-9]", '-', link)
link = re.sub(r"-{2,}", '-', link)
link: str = link.rstrip("-")
link = str(next_event["id"]) + "-" + link
self.link = "https://ufc.tu-dortmund.de/vorstellung/%s" % link
if next_event["movie"]["youtube_id"] != "":
self.trailer = "https://youtu.be/%s" % next_event["movie"]["youtube_id"]
response = requests.get("https://ufc.tu-dortmund.de/%s"
% next_event['movie']['image_url_medium']
.replace('medium', 'original'))
self.image = BytesIO(response.content)
class ProgramInfo:
semester = ""
next_event = ""
def __init__(self):
# Hole das UFC Semester
self.semester = json.loads(
requests.get(url="https://ufc.tu-dortmund.de/semesters/current.json").text
)
def get_next_event(self, wanted_day_diff, just_print=False):
# Finde das nächste Event, dass nach heute ist und in `day_diff` Tagen stattfindet.
now = UTC.localize(
datetime.datetime.now()
)
for i in self.semester:
d = date_parser.parse(i["date"])
if d < now:
continue
diff = (d - now)
if now.date() == d.date():
day_diff = 0
elif now.time() > d.time():
day_diff = diff.days + 1
elif now.time() <= d.time():
day_diff = diff.days
if day_diff == wanted_day_diff:
if just_print:
pprint(i)
else:
self.next_event = NextEvent(i, now)
return self.next_event
def get_image(self):
# return image data
return self.next_event.image
def main():
# Parse Arguments
aparser: ArgumentParser = ArgumentParser(
description="UFC Programminfo Bot"
)
aparser.add_argument(
"--preview",
dest='day_diff',
action="store_const",
const=7,
default=1,
help="Überprüfe die nächsten 7 Tage statt nur den nächsten Tag."
)
args = aparser.parse_args()
p_info = ProgramInfo()
p_info.get_next_event(args.day_diff, True)
if __name__ == "__main__":
main()