Last active
October 4, 2021 16:30
-
-
Save nac-39/581839d060e14fdf49f166cbe531f1f7 to your computer and use it in GitHub Desktop.
時間割を入力してicsファイルで書き出す
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
from icalendar import Calendar, Event, vDatetime | |
from datetime import datetime | |
FIN_OF_YEAR = '20220208T084500' | |
START_OF_SEMESTER = 10 #10月 | |
START_DAY = 4 #10月4日(月曜)からスタートの場合 | |
YEAR = 2021 | |
def addEvent(obj,cal): | |
event = Event() | |
event['dtstart']=vDatetime(obj['dtstart']).to_ical() | |
event['dtend']=vDatetime(obj['dtend']).to_ical() | |
day = obj['day'] | |
event['rrule']=f'FREQ=WEEKLY;WKST=MO;UNTIL={FIN_OF_YEAR};BYDAY={day};INTERVAL=1' | |
event['summary']=obj['summary'] | |
event['description']=obj['description'] | |
event['location']=obj['location'] | |
cal.add_component(event) | |
def gen_start_time_list(day): | |
start_time_list = [ | |
datetime(YEAR,START_OF_SEMESTER,day,8,45,0), | |
datetime(YEAR,START_OF_SEMESTER,day,10,30,0), | |
datetime(YEAR,START_OF_SEMESTER,day,13,0,0), | |
datetime(YEAR,START_OF_SEMESTER,day,14,45,0), | |
datetime(YEAR,START_OF_SEMESTER,day,16,30,0) | |
] | |
return start_time_list | |
def gen_end_time_list(day): | |
end_time_list = [ | |
datetime(YEAR,START_OF_SEMESTER,day,10,15,0), | |
datetime(YEAR,START_OF_SEMESTER,day,12,0,0), | |
datetime(YEAR,START_OF_SEMESTER,day,14,30,0), | |
datetime(YEAR,START_OF_SEMESTER,day,16,15,0), | |
datetime(YEAR,START_OF_SEMESTER,day,18,0,0) | |
] | |
return end_time_list | |
def createObj(): | |
week_ja_list=['月','火','水','木','金'] | |
week_en_list=['MO','TU','WE','TH','FR'] | |
ev_list=[] | |
for i in range(5): | |
start_time_list = gen_start_time_list(START_DAY+i) | |
end_time_list = gen_end_time_list(START_DAY+i) | |
for j in range(5): | |
exist = input(f'{week_ja_list[i]}曜日の{j+1}時間目,なければEnter') | |
if exist: | |
ev_obj={} | |
ev_obj['dtstart']=start_time_list[j] | |
ev_obj['dtend']=end_time_list[j] | |
ev_obj['day']=week_en_list[i] | |
ev_obj['summary']=exist | |
ev_obj['description']=input('詳細を入力:') | |
ev_obj['location']=input('場所を入力:') | |
ev_list.append(ev_obj) | |
elif exist=='n': | |
pass | |
else: | |
pass | |
return ev_list | |
if __name__ == '__main__': | |
print('ical形式で時間割を作ります\n月曜から金曜,五時間目まで対応しています.\n自分の使ってるカレンダーアプリにインポートするなりして使ってください.\nこのpythonファイルがあるディレクトリにicsファイルが保存されます.\nファイル名入力しないと隠しファイルになっちゃうので注意') | |
a = createObj() | |
cal=Calendar() | |
for ob in a: | |
addEvent(ob,cal) | |
str_cal=cal.to_ical().decode() | |
str_cal = str_cal.replace('\\','') | |
print(str_cal) | |
file_name = input('icsファイルの名前を入力:') | |
file = open(f'./{file_name}.ics','w') | |
file.write(str_cal) | |
file.close() |
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
# 時間割を入力してicsファイルで書き出す | |
icalendarというモジュール?パッケージ?を使っています. | |
https://icalendar.readthedocs.io/en/latest/index.html | |
$ pip install icalendar | |
でインストールしてから使ってください. | |
python2で実行するとなんかエラーが出ます. | |
# 使い方 | |
このコードがあるディレクトリに移動して,ターミナルに python3 cal_register.py と打ち込みます(macの場合). | |
金曜日の5時間目,なければEnter | |
のように聞かれるので,科目名を答えます.その時間に授業がなければENTERを押してスキップします. | |
詳細と場所を登録できます.私は詳細は持ち物と授業形式,場所は教室の名前かzoomリンクをはっつけました. | |
指示に従っておけば大丈夫ですが,一発勝負で作らないといけません. | |
ちょっとのミスならGoogle Calendarにインポートした後に直した方が早いです. | |
また,コードの上の方にあるYEARとかを変えることで今後も使えます.でも学期始まりが月曜日じゃないとうまく機能しません. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment