initial commit

This commit is contained in:
SuperNovaa41 2023-06-15 19:54:14 -04:00
commit d437b5a882
5 changed files with 154 additions and 0 deletions

2
Makefile Normal file
View File

@ -0,0 +1,2 @@
build:
g++ -I/usr/include/python3.11 -lpython3.11 main.cpp -o schedule

47
main.cpp Normal file
View File

@ -0,0 +1,47 @@
#include "crow.h"
#include <string>
#include <Python.h>
#include <fstream>
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/<string>")
([](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();
}

58
main.py Normal file
View File

@ -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")

BIN
schedule Executable file

Binary file not shown.

47
src/index.html Normal file
View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html>
<head>
<title>Metro Schedule Getter</title>
</head>
<body>
<style>
p {
color: white;
}
#content {
display: flex;
align-items: center;
justify-content: center;
position: relative;
width: 100%;
height: 100vh;
}
#entry {
position: relative;
padding: 1rem;
}
#id-btn {
background-color: #d81e05;
color: white;
border: none;
padding: 5px;
border-radius: 5px;
}
</style>
<script>
function getSchedule()
{
window.location = "/schedule/" + document.getElementById("id").value;
}
</script>
<div id="content">
<div id="entry">
<img id="logo" src="https://myschedule.metro.ca/app/components/shared/img/metro.png">
</div>
<div id="entry">
<input type="text" id="id" name="Employee ID" />
<button id="id-btn" onclick="getSchedule()">Submit!</button>
</div>
</div>
</body>
</html>