import imgkit, requests from dateutil.parser import parse from datetime import datetime, timedelta abbreviations = {} def EveryXDaysFromStartdate(startdate, x, numberofdates = 1): startdate = parse(startdate) days = [] while (len(days) < numberofdates): startdate += timedelta(days=x) if(datetime.today() <= startdate): 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 text = [] for booking in bookings[station]: if date.date() == booking['starts_at'].date(): abbr = booking['firstname'][:2] + booking['lastname'].split(" ")[-1][:2] abbreviations[abbr] = booking['firstname'] + " " + booking['lastname'] text.append(abbr + " " + booking['starts_at'].strftime("%H") + "-" + booking['ends_at'].strftime("%H")) if len(text) < 1: text.append("--") return "
".join(text) def maketable(stations, displaydates, bookings): global abbreviations 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
" i = 0 for key in sorted(abbreviations.keys()): text += "
%s: %s
" % (key, abbreviations[key]) i += 1 if i > 4: text += "
" i = 0 return text + "
" def createImage(displaydates, stations, filename): rawdata = fetchData(displaydates[0], displaydates[-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']}) text = maketable(stations, displaydates, relbookings) css = '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")) r = requests.get(url=url,headers={'X-Requested-With': 'XMLHttpRequest'}) return r.json()