import imgkit, requests, os from dateutil.parser import parse from datetime import datetime, timedelta abbreviations = {} training = 0 event = 0 def EveryXDaysFromStartdate(startdate, x, numberofdates = 1): startdate = parse(startdate) days = [] while (len(days) < numberofdates): startdate += timedelta(days=x) if(datetime.today().date() <= startdate.date()): days.append(startdate) return days def EveryXWeeksFromStartdate(startdate, x, numberofdates = 1): return EveryXDaysFromStartdate(startdate, x * 7, numberofdates) def EveryWeekday(weekday, numberofdates=1): startdate = datetime.today() + timedelta((weekday - datetime.today().weekday()) % 7) days = [] while(len(days) < numberofdates): days.append(startdate) startdate += timedelta(7) return days def WholeWeek(shift = 0): days=[] startdate = datetime.today() + timedelta(shift) for i in range(0,7): days.append(startdate + timedelta(i)) return days def getDatePositionData(station, date, bookings): global abbreviations, training, event text = [] for booking in bookings[station]: color1 = color2 = "" if date.date() == booking['starts_at'].date(): abbr = booking['firstname'][:2] + booking['lastname'].split(" ")[-1][:2] abbreviations[abbr] = booking['firstname'] + " " + booking['lastname'] if(booking['event'] == 1): color1 = "" color2 = "" event = 1 if(booking['training'] == 1): color1 = "" color2 = "" training = 1 text.append(color1 + abbr + " " + booking['starts_at'].strftime("%H") + "-" + booking['ends_at'].strftime("%H") + color2) if len(text) < 1: text.append("--") return "
".join(text) def maketable(stations, displaydates, bookings): global abbreviations, training, event text = "" for date in displaydates: text += "" % (date.strftime("%a %d.%m.")) text += "" text += "" % (len(displaydates) + 1) for station in stations: if station == "--": text += "" % (len(displaydates) + 1) text += "" % (len(displaydates) + 1) continue datestext = "" for date in displaydates: datestext += "" % (getDatePositionData(station, date, bookings)) text += "%s" % (station, datestext) text += "
Stationen%s
%s
%s
" text += "
" if(training == 1): text += "Training " if(event == 1): text += "Event" text += "
" text += "
" i = 0 for key in sorted(abbreviations.keys()): text += "
%s: %s
" % (key, abbreviations[key]) i += 1 if i > 4: text += "
" i = 0 text += "
" return text def createImage(displaydates, stations, filename): global abbreviations, training, event training = event = 0 abbreviations = {} rawdata = fetchData(displaydates[0] - timedelta(1), displaydates[-1] + timedelta(1)) relbookings = {} for station in stations: relbookings[station] = [] for datum in rawdata: if datum['station']['ident'] in stations: relbookings[datum['station']['ident']].append({ 'starts_at': parse(datum['starts_at']), 'ends_at': parse(datum['ends_at']), 'lastname': datum['controller']['lastname'], 'firstname': datum['controller']['firstname'], 'training': datum['training'], 'event': datum['event'] }) print(relbookings) text = maketable(stations, displaydates, relbookings) directory, dontcare = os.path.split(__file__) css = directory + os.sep + 'layout.css' options = {'width': (100 + 75 * len(displaydates)), 'disable-smart-width': ''} # config = imgkit.config(wkhtmltoimage='C:/Program Files/wkhtmltopdf/bin/wkhtmltoimage.exe') config = imgkit.config(wkhtmltoimage='/usr/bin/wkhtmltoimage') imgkit.from_string(text, filename, css=css, options=options, config=config) return def fetchData(startdate = datetime.today(), enddate = (datetime.today() + timedelta(1))): url = 'https://vatsim-germany.org/api/booking/atc/daterange/%s/%s' % (startdate.strftime("%d.%m.%Y"), enddate.strftime("%d.%m.%Y")) print(url) r = requests.get(url=url,headers={'X-Requested-With': 'XMLHttpRequest'}) return r.json()