代码拉取完成,页面将自动刷新
from bs4 import BeautifulSoup
from tkinter import filedialog
from datetime import datetime, timedelta
import requests
# config
last = 15 # number of weeks last a semester
remind = 15 # remind number of minutes ahead
firstDayClass = "20220214T000000" # first day of class
username = input("Username: ")
password = input("password: ")
# init
form = '%Y%m%dT%H%M%S'
startDate = datetime.strptime(firstDayClass, form)
endDate = startDate + timedelta(weeks=last, days=-1)
switch = {1: "MO", 2: "TU", 3: "WE", 4: "TH", 5: "FR", 6: "SA", 7: "SU"}
def addCourse(file, title, loca, byDay, time):
dateTimeStart = startDate + timedelta(days=byDay-1,
hours=int(time[0].split(':')[0]),
minutes=int(time[0].split(':')[1]))
dateTimeEnd = startDate + timedelta(days=byDay-1,
hours=int(time[1].split(':')[0]),
minutes=int(time[1].split(':')[1]))
dateTimeStart = datetime.strftime(dateTimeStart, form)
dateTimeEnd = datetime.strftime(dateTimeEnd, form)
file.write("BEGIN:VEVENT\nSUMMARY:" + title + "\nLOCATION:" + loca
+ "\nDTSTART:" + dateTimeStart
+ "\nDTEND:" + dateTimeEnd
+ "\nRRULE:FREQ=WEEKLY;UNTIL=" +
datetime.strftime(endDate, form)
+ "Z;INTERVAL=1;BYDAY=" + switch[byDay]
+ "\nBEGIN:VALARM\nACTION:DISPLAY\nDESCRIPTION:REMINDER\nTRIGGER:-PT"
+ str(remind) + "M\nEND:VALARM\nEND:VEVENT\n")
# aborted
# # open htmlfile
# path = filedialog.askopenfilename(title="", filetypes=[
# ("html files", "*.html"), ("html files", "*.htm")])
# htmlfile = open(path, 'r', encoding='utf-8')
# mis crawler
loginUrl= "https://mis.uic.edu.hk/mis/usr/login.sec"
targetUrl= "https://mis.uic.edu.hk/mis/student/tts/timetable.do"
session = requests.Session()
postdata = {
'j_target_url': targetUrl,
'j_username': username,
'j_password': password,
'usertype': "on",
'x': "",
'y': ""
}
header = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0",
'Referer': loginUrl
}
htmlPost = session.post(loginUrl, postdata, headers=header, verify=False)
if(htmlPost.url[:51]!=targetUrl):
print("login failed")
exit()
# create ics file
path = filedialog.asksaveasfilename(
title="", filetypes=[("ics files", ".ics")])
if (path == ""):
exit()
# write head
file = open(path.split(".")[0]+'.ics', 'w')
file.write('''BEGIN:VCALENDAR
PRODID:UIC timetable
VERSION:2.0
X-WR-TIMEZONE:Asia/Shanghai
''')
# make soup
soup = BeautifulSoup(htmlPost.text, 'html.parser').find(id="mytimetable")
tr = soup.find_all("tr")
del tr[0] # remove head of table
for row in tr:
for byDay, col in enumerate(row.find_all("td"), 1):
strings = list(col.stripped_strings) # remove space and split
if (len(strings) != 0):
addCourse(file, strings[0], strings[1],
byDay, row.th.string.split('-'))
file.write("END:VCALENDAR")
file.close()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。