Last active
August 29, 2015 14:02
-
-
Save chaliy/03b20751cd385e40a50d to your computer and use it in GitHub Desktop.
Parse time table of the Lvivska Politehnica and then convert to iCalendar format
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# coding=utf-8 | |
import requests | |
from bs4 import BeautifulSoup | |
from icalendar import Calendar, Event | |
from datetime import date, datetime, time, timedelta | |
def read_table(): | |
r = requests.get('http://lp.edu.ua/node/42?group=%D0%86%D0%A2%D0%9F-31%D0%B7&semestr=1') | |
#r.encoding = 'utf-8' | |
r.encoding = 'cp1251' | |
return r.content | |
def parse_days(html): | |
fixed_html = html | |
doc = BeautifulSoup(fixed_html) | |
main = doc.find('table') | |
days = [] | |
current_date = "" | |
current_day = [] | |
for tr in main.find_all('tr'): | |
if len(tr.select('td[class=data]')) == 1: | |
if len(current_day) > 0: | |
days += [(current_date, current_day[:])] | |
current_date = datetime.strptime(tr.select('td[class=data]')[0].string, '%d.%m.%Y') | |
current_day = [] | |
elif len(tr.select('td')) == 5: | |
vals = tr.select('td') | |
current_day += [{ | |
"num": vals[0].string, | |
"name": vals[1].string + " (" + vals[2].string + ")", | |
"place": vals[3].string + ' ' + vals[4].string | |
}] | |
if len(current_day) > 0: | |
days += [(current_date, current_day[:])] | |
return days | |
def time_from_num(num): | |
if num == '1': | |
return time(8, 30) | |
elif num == '2': | |
return time(10, 20) | |
elif num == '3': | |
return time(12, 10) | |
elif num == '4': | |
return time(14, 15) | |
elif num == '5': | |
return time(16, 00) | |
elif num == '6': | |
return time(17, 40) | |
elif num == '7': | |
return time(19, 20) | |
elif num == '8': | |
return time(21, 00) | |
def create_calendar(days): | |
cal = Calendar() | |
cal.add('prodid', '-//Mike Chaliy//') | |
cal.add('version', '2.0') | |
cal.add('summary', 'Розклад пар') | |
item_duration = timedelta(hours=1, minutes=35) | |
for (day, items) in days: | |
if day > datetime.today() - timedelta(days=2): | |
for item in items: | |
item_time = time_from_num(item['num']) | |
dstart = datetime.combine(day, item_time) | |
event = Event() | |
#event['uid'] = '42' | |
event.add('summary', item['num'] + " " + item['name']) | |
event.add('location', item['place']) | |
event.add('dtstart', dstart) | |
event.add('dtend', dstart + item_duration) | |
cal.add_component(event) | |
return cal | |
html = read_table() | |
days = parse_days(html) | |
cal = create_calendar(days) | |
with open('timetable.ics', 'wb') as f: | |
f.write(cal.to_ical()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
BEGIN:VCALENDAR | |
VERSION:2.0 | |
PRODID:-//Mike Chaliy// | |
SUMMARY:Розклад пар | |
BEGIN:VEVENT | |
SUMMARY:5 Теорія прийняття рішень (лекція) (Т | |
каченко С.П.) | |
DTSTART;VALUE=DATE-TIME:20150225T160000 | |
DTEND;VALUE=DATE-TIME:20150225T173500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:6 Методи та системи штучного інтелек | |
ту (лекція) (Стех Ю.В.) | |
DTSTART;VALUE=DATE-TIME:20150225T174000 | |
DTEND;VALUE=DATE-TIME:20150225T191500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:7 Методи та системи штучного інтелек | |
ту (лекція) (Стех Ю.В.) | |
DTSTART;VALUE=DATE-TIME:20150225T192000 | |
DTEND;VALUE=DATE-TIME:20150225T205500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:4 Теорія прийняття рішень (лекція) (Т | |
каченко С.П.) | |
DTSTART;VALUE=DATE-TIME:20150226T141500 | |
DTEND;VALUE=DATE-TIME:20150226T155000 | |
LOCATION:III н.к. 225 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:5 Технології створення програмних п | |
родуктів (лекція) (МатвійкІв О.М.) | |
DTSTART;VALUE=DATE-TIME:20150226T160000 | |
DTEND;VALUE=DATE-TIME:20150226T173500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:6 Технології захисту інформації (лек | |
ція) (Іванців Р.Д.) | |
DTSTART;VALUE=DATE-TIME:20150226T174000 | |
DTEND;VALUE=DATE-TIME:20150226T191500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:7 Технології захисту інформації (лек | |
ція) (Іванців Р.Д.) | |
DTSTART;VALUE=DATE-TIME:20150226T192000 | |
DTEND;VALUE=DATE-TIME:20150226T205500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:4 Автоматизація проектування мікрое | |
лектронних систем (лекція) (Лобур М.В.) | |
DTSTART;VALUE=DATE-TIME:20150227T141500 | |
DTEND;VALUE=DATE-TIME:20150227T155000 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:5 Автоматизація проектування мікрое | |
лектронних систем (лекція) (Лобур М.В.) | |
DTSTART;VALUE=DATE-TIME:20150227T160000 | |
DTEND;VALUE=DATE-TIME:20150227T173500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:6 Методи і засоби комп'ютерних інфор | |
маційних технологій (лекція) (Мазур В.В.) | |
DTSTART;VALUE=DATE-TIME:20150227T174000 | |
DTEND;VALUE=DATE-TIME:20150227T191500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:7 Методи і засоби комп'ютерних інфор | |
маційних технологій (лекція) (Мазур В.В.) | |
DTSTART;VALUE=DATE-TIME:20150227T192000 | |
DTEND;VALUE=DATE-TIME:20150227T205500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:1 Геометричне моделювання у констру | |
юванні інженерних об'єктів та систем (ле | |
кція) (Маркелов О.Е.) | |
DTSTART;VALUE=DATE-TIME:20150228T083000 | |
DTEND;VALUE=DATE-TIME:20150228T100500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:2 Геометричне моделювання у констру | |
юванні інженерних об'єктів та систем (ле | |
кція) (Маркелов О.Е.) | |
DTSTART;VALUE=DATE-TIME:20150228T102000 | |
DTEND;VALUE=DATE-TIME:20150228T115500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:3 Методи і засоби комп'ютерних інфор | |
маційних технологій (лекція) (Мазур В.В.) | |
DTSTART;VALUE=DATE-TIME:20150228T121000 | |
DTEND;VALUE=DATE-TIME:20150228T134500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:4 Математичне моделювання в САПР (ле | |
кція) (Теслюк В.М.) | |
DTSTART;VALUE=DATE-TIME:20150228T141500 | |
DTEND;VALUE=DATE-TIME:20150228T155000 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:5 Математичне моделювання в САПР (ле | |
кція) (Теслюк В.М.) | |
DTSTART;VALUE=DATE-TIME:20150228T160000 | |
DTEND;VALUE=DATE-TIME:20150228T173500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:1 Методи та системи штучного інтелек | |
ту (лекція) (Стех Ю.В.) | |
DTSTART;VALUE=DATE-TIME:20150307T083000 | |
DTEND;VALUE=DATE-TIME:20150307T100500 | |
LOCATION:IV н.к. 319 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:2 Методи та системи штучного інтелек | |
ту (лекція) (Стех Ю.В.) | |
DTSTART;VALUE=DATE-TIME:20150307T102000 | |
DTEND;VALUE=DATE-TIME:20150307T115500 | |
LOCATION:IV н.к. 319 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:3 Теорія прийняття рішень (лекція) (Т | |
каченко С.П.) | |
DTSTART;VALUE=DATE-TIME:20150307T121000 | |
DTEND;VALUE=DATE-TIME:20150307T134500 | |
LOCATION:IV н.к. 319 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:4 Теорія прийняття рішень (лекція) (Т | |
каченко С.П.) | |
DTSTART;VALUE=DATE-TIME:20150307T141500 | |
DTEND;VALUE=DATE-TIME:20150307T155000 | |
LOCATION:IV н.к. 319 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:1 Технології захисту інформації (лек | |
ція) (Іванців Р.Д.) | |
DTSTART;VALUE=DATE-TIME:20150321T083000 | |
DTEND;VALUE=DATE-TIME:20150321T100500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:2 Технології захисту інформації (лек | |
ція) (Іванців Р.Д.) | |
DTSTART;VALUE=DATE-TIME:20150321T102000 | |
DTEND;VALUE=DATE-TIME:20150321T115500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:3 Автоматизація проектування мікрое | |
лектронних систем (лекція) (Лобур М.В.) | |
DTSTART;VALUE=DATE-TIME:20150321T121000 | |
DTEND;VALUE=DATE-TIME:20150321T134500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:4 Автоматизація проектування мікрое | |
лектронних систем (лекція) (Лобур М.В.) | |
DTSTART;VALUE=DATE-TIME:20150321T141500 | |
DTEND;VALUE=DATE-TIME:20150321T155000 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:1 Методи і засоби комп'ютерних інфор | |
маційних технологій (лекція) (Мазур В.В.) | |
DTSTART;VALUE=DATE-TIME:20150404T083000 | |
DTEND;VALUE=DATE-TIME:20150404T100500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:2 Методи і засоби комп'ютерних інфор | |
маційних технологій (лекція) (Мазур В.В.) | |
DTSTART;VALUE=DATE-TIME:20150404T102000 | |
DTEND;VALUE=DATE-TIME:20150404T115500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:3 Математичне моделювання в САПР (ле | |
кція) (Теслюк В.М.) | |
DTSTART;VALUE=DATE-TIME:20150404T121000 | |
DTEND;VALUE=DATE-TIME:20150404T134500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:4 Математичне моделювання в САПР (ле | |
кція) (Теслюк В.М.) | |
DTSTART;VALUE=DATE-TIME:20150404T141500 | |
DTEND;VALUE=DATE-TIME:20150404T155000 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:1 Геометричне моделювання у констру | |
юванні інженерних об'єктів та систем (ле | |
кція) (Маркелов О.Е.) | |
DTSTART;VALUE=DATE-TIME:20150425T083000 | |
DTEND;VALUE=DATE-TIME:20150425T100500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:2 Геометричне моделювання у констру | |
юванні інженерних об'єктів та систем (ле | |
кція) (Маркелов О.Е.) | |
DTSTART;VALUE=DATE-TIME:20150425T102000 | |
DTEND;VALUE=DATE-TIME:20150425T115500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:3 Методи та системи штучного інтелек | |
ту (лекція) (Стех Ю.В.) | |
DTSTART;VALUE=DATE-TIME:20150425T121000 | |
DTEND;VALUE=DATE-TIME:20150425T134500 | |
LOCATION:IV н.к. 319 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:4 Методи та системи штучного інтелек | |
ту (лекція) (Стех Ю.В.) | |
DTSTART;VALUE=DATE-TIME:20150425T141500 | |
DTEND;VALUE=DATE-TIME:20150425T155000 | |
LOCATION:IV н.к. 319 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:1 Теорія прийняття рішень (лекція) (Т | |
каченко С.П.) | |
DTSTART;VALUE=DATE-TIME:20150516T083000 | |
DTEND;VALUE=DATE-TIME:20150516T100500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:2 Технології захисту інформації (лек | |
ція) (Іванців Р.Д.) | |
DTSTART;VALUE=DATE-TIME:20150516T102000 | |
DTEND;VALUE=DATE-TIME:20150516T115500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:3 Геометричне моделювання у констру | |
юванні інженерних об'єктів та систем (ле | |
кція) (Маркелов О.Е.) | |
DTSTART;VALUE=DATE-TIME:20150516T121000 | |
DTEND;VALUE=DATE-TIME:20150516T134500 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
BEGIN:VEVENT | |
SUMMARY:4 Математичне моделювання в САПР (ле | |
кція) (Теслюк В.М.) | |
DTSTART;VALUE=DATE-TIME:20150516T141500 | |
DTEND;VALUE=DATE-TIME:20150516T155000 | |
LOCATION:IV н.к. 327 | |
END:VEVENT | |
END:VCALENDAR |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment