commit d437b5a88280228bedfbc69c09e9f4e49297d0e8 Author: SuperNovaa41 Date: Thu Jun 15 19:54:14 2023 -0400 initial commit diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bdf18b8 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +build: + g++ -I/usr/include/python3.11 -lpython3.11 main.cpp -o schedule diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..3a1c5ee --- /dev/null +++ b/main.cpp @@ -0,0 +1,47 @@ +#include "crow.h" +#include +#include +#include + +void run_schedule_getter(std::string); + +int main() +{ + crow::SimpleApp app; + + CROW_ROUTE(app, "/") + ([](){ + crow::response main(200); + main.set_static_file_info("src/index.html"); + main.set_header("content-type", "text/html"); + return main; + }); + + CROW_ROUTE(app, "/schedule/") + ([](std::string id){ + crow::response schedule(200); + run_schedule_getter(id); + schedule.set_static_file_info("calendar.ics"); + schedule.set_header("content-type", "text/calendar"); + schedule.set_header("content-disposition", "attachement; filename=\"work-schedule.ics\""); + return schedule; + }); + + app.port(18080).run(); + + return 0; +} + +void run_schedule_getter(std::string id) +{ + Py_Initialize(); + + std::ofstream file("id.txt"); + file << id; + file.close(); + + FILE *fd = fopen("main.py", "r"); + PyRun_SimpleFileEx(fd, "main.py", 1); + + Py_Finalize(); +} diff --git a/main.py b/main.py new file mode 100644 index 0000000..6a826f2 --- /dev/null +++ b/main.py @@ -0,0 +1,58 @@ +import requests +import json +from datetime import datetime +import sys + +def get_id(): + with open("id.txt", "r") as file: + return file.read() + +def cleanse_hour(hour): + split_hour = hour.split(":", 1) + return (split_hour[0] if (len(split_hour[0]) == 2) else "0" + split_hour[0]) + split_hour[1] + +def get_shift(schedule_day): + shift = schedule_day["DailyShift"][0] + if (shift == "-"): + return + + datestr = schedule_day["StartDate"] + date = datestr[0:4] + datestr[5:7] + datestr[8:10] + "T" + + split_shift = shift.split("-", 1) + startdate = date + cleanse_hour(split_shift[0]) + "00" + + split_shift = split_shift[1].split(" ", 1) + enddate = date + cleanse_hour(split_shift[0]) + "00" + + dept = split_shift[1] + + return (startdate, enddate, dept) + +sess = requests.Session() + +employee_id = get_id() + +sess.get("https://myschedule.metro.ca/api/Login/" + employee_id) +total_schedule = sess.get("https://myschedule.metro.ca/api/Employee/" + employee_id).json() + +with open("calendar.ics", "w") as file: + file.write("BEGIN:VCALENDAR\n") + file.write("VERSION:2.0\n") + file.write("PRODID:SuperNovaa41\n") + +for i in range(-1, -8, -1): + res = get_shift(total_schedule["WorkTime"][i]) + if (res is None): + continue + + with open("calendar.ics", "a") as file: + file.write("BEGIN:VEVENT\n") + file.write("DTSTART:" + res[0] + "\n") + file.write("DTEND:" + res[1] + "\n") + file.write("SUMMARY: Work (" + res[2] + ")\n") + file.write("END:VEVENT\n") + +with open("calendar.ics", "a") as file: + file.write("END:VCALENDAR\n") + diff --git a/schedule b/schedule new file mode 100755 index 0000000..25522d0 Binary files /dev/null and b/schedule differ diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..820f3b0 --- /dev/null +++ b/src/index.html @@ -0,0 +1,47 @@ + + + + Metro Schedule Getter + + + + +
+
+ +
+
+ + +
+
+ +