alistair
3 years ago
commit
9f9b752be5
3 changed files with 114 additions and 0 deletions
@ -0,0 +1,4 @@ |
|||||||
|
import os |
||||||
|
|
||||||
|
class Config(object): |
||||||
|
SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess' |
@ -0,0 +1,71 @@ |
|||||||
|
from flask import Flask, flash, request, redirect, make_response |
||||||
|
|
||||||
|
from config import Config |
||||||
|
|
||||||
|
from flask_wtf import FlaskForm |
||||||
|
from wtforms import StringField, PasswordField, BooleanField, SubmitField |
||||||
|
from wtforms.validators import DataRequired |
||||||
|
|
||||||
|
app = Flask(__name__) |
||||||
|
app.config.from_object(Config) |
||||||
|
|
||||||
|
from flask_wtf import FlaskForm |
||||||
|
from wtforms import StringField, PasswordField, BooleanField, SubmitField |
||||||
|
from wtforms.validators import DataRequired |
||||||
|
|
||||||
|
class URLForm(FlaskForm): |
||||||
|
urlfield = StringField('urlfield', validators=[DataRequired()]) |
||||||
|
submit = SubmitField('Go') |
||||||
|
|
||||||
|
from flask import render_template |
||||||
|
|
||||||
|
import requests |
||||||
|
import re |
||||||
|
|
||||||
|
from reform import reformat_cal |
||||||
|
|
||||||
|
TIMETABLEURL = "https://timetable.my.uq.edu.au:443/even/rest/calendar/ical/" |
||||||
|
|
||||||
|
@app.route('/update', methods=['GET']) |
||||||
|
def get_cal(): |
||||||
|
cd = request.args.get('code') |
||||||
|
|
||||||
|
if (cd != None): |
||||||
|
print(cd) |
||||||
|
url = TIMETABLEURL + cd |
||||||
|
try: |
||||||
|
cal = reformat_cal(url) |
||||||
|
except: |
||||||
|
return redirect("/?error=fail") |
||||||
|
|
||||||
|
resp = make_response(cal) |
||||||
|
resp.headers["Content-Type"] = "text/calendar; charset=utf-8" |
||||||
|
return resp |
||||||
|
else: |
||||||
|
return redirect("/?error=fail") |
||||||
|
|
||||||
|
@app.route('/', methods=['GET', 'POST']) |
||||||
|
def hello(): |
||||||
|
form = URLForm() |
||||||
|
if form.validate_on_submit(): |
||||||
|
url = form.urlfield.data |
||||||
|
code = url.split("/")[-1] |
||||||
|
rdr = f"/calfix/update?code={code}" |
||||||
|
try: |
||||||
|
cal = reformat_cal(TIMETABLEURL + code) |
||||||
|
print(cal) |
||||||
|
flash("Download/Subscribe link") |
||||||
|
flash(rdr) |
||||||
|
except: |
||||||
|
flash("Invalid calendar link") |
||||||
|
flash("/") |
||||||
|
|
||||||
|
# return redirect(rdr) |
||||||
|
|
||||||
|
# print('url', url) |
||||||
|
# newcal = reformat_cal(url) |
||||||
|
|
||||||
|
return render_template('index.html', title='cal rewrite', form=form) |
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
app.run(port=25565) |
@ -0,0 +1,39 @@ |
|||||||
|
import requests |
||||||
|
|
||||||
|
|
||||||
|
def reformat_cal(url): |
||||||
|
print(url) |
||||||
|
req = requests.get(url) |
||||||
|
if (req.status_code != 200): |
||||||
|
raise ValueError() |
||||||
|
|
||||||
|
if req.text == "" or req.text == None: |
||||||
|
raise ValueError() |
||||||
|
|
||||||
|
cal = req.text.split("\n") |
||||||
|
|
||||||
|
for counter, line in enumerate(cal): |
||||||
|
if "BEGIN:VEVENT" in line: |
||||||
|
summary = None |
||||||
|
desc = None |
||||||
|
|
||||||
|
if "SUMMARY" in line: |
||||||
|
summary = counter |
||||||
|
continue |
||||||
|
|
||||||
|
if "DESCRIPTION" in line: |
||||||
|
desc = counter |
||||||
|
continue |
||||||
|
|
||||||
|
if "UID" in line: |
||||||
|
cal[counter] = "" |
||||||
|
|
||||||
|
if "END:VEVENT" in line: |
||||||
|
course_code = cal[desc].split("_")[0].split(":")[1] |
||||||
|
imsummary = cal[summary].split(',') |
||||||
|
imsummary[0] = "SUMMARY:" + course_code |
||||||
|
cal[summary] = ','.join(imsummary) |
||||||
|
|
||||||
|
cal = "\n".join(cal) |
||||||
|
return cal |
||||||
|
|
Loading…
Reference in new issue