Skip to content

Instantly share code, notes, and snippets.

@nac-39
Last active October 4, 2021 16:30
Show Gist options
  • Save nac-39/581839d060e14fdf49f166cbe531f1f7 to your computer and use it in GitHub Desktop.
Save nac-39/581839d060e14fdf49f166cbe531f1f7 to your computer and use it in GitHub Desktop.
時間割を入力してicsファイルで書き出す
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()
# 時間割を入力して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