khal のコマンド作成の スクリプトを作ってはみたが、登録が重複するのはまずいので、 登録済かどうか確認するのに、 icalendar を使ってみた。
khal は ローカルにファイルを保管していてサーバとのやり取りは無いので、 やってみる気になった。しかも、parseだけ出来ればよいので。
#!~/.pyenv/shims/python """Read and Check ical data file.""" from __future__ import unicode_literals import sys import logging from pathlib import Path import logzero from icalendar import Calendar def parse_icalfile(f_path, ride_log): """Parse icalendar file.""" cal_fobj = open(f_path, 'rb') k_calen = Calendar.from_ical(cal_fobj.read()) cal_fobj.close() for cal_ev in k_calen.walk(): if cal_ev.name == 'VEVENT': start_year = cal_ev.get('dtstart').dt.strftime("%Y") ride_log[start_year].append(k_calen) return ride_log def sel_event_list(ride_log, t_day): """Select events by target date character.""" event_list = [] for ical_obj in ride_log[t_day[0:4]]: for cal_ev in ical_obj.walk(): if cal_ev.name == 'VEVENT': summary = cal_ev.get('summary', default='None') descrip = cal_ev.get('description', default='None') start_dt = cal_ev.get('dtstart').dt end_dt = cal_ev.get('dtend').dt event_item = "{0:s}{1:s}:{2:s}({3:s})".format( start_dt.strftime("%Y%m%d%H%M"), end_dt.strftime("%m%d%H%M"), summary, descrip[0:20] ) event_list.append(event_item) logzero.logger.info("- All entry {0:s}".format(t_day[0:4])) for s_str in sorted(event_list): logzero.logger.info(s_str) c_event = [e for e in sorted(event_list) if e[0:len(t_day)] == t_day] return sorted(c_event) def main(): """Do main prcess.""" # khal_dir = Path.home() / "Documents/ownCloud/caldav/bikes/" ride_log = { "2016": [], "2017": [], "2018": [], "2019": [], "2020": [] } for f_path in khal_dir.glob('*'): ride_log = parse_icalfile(f_path, ride_log) t_date = '20190412' target_ev_list = sel_event_list(ride_log, t_date) if target_ev_list == []: logzero.logger.info("- No entry on {0:s}".format(t_date)) else: logzero.logger.info("- target {0:s}".format(t_date)) for mes_str in target_ev_list: logzero.logger.info(" {0:s}".format(mes_str)) if __name__ == "__main__": LOG_FORMAT = "%(color)s[%(module)s:%(lineno)d]%(end_color)s %(message)s" FORMATTER = logzero.LogFormatter(fmt=LOG_FORMAT) logzero.setup_default_logger(formatter=FORMATTER) logzero.loglevel(logging.INFO) logzero.logfile("./_logs/log.log", maxBytes=3e5, backupCount=3) main() sys.exit() #
まずまずなのだが、 登録済確認をスクリプト内で出来れば良いのだが、 私には無理なので、目視確認とした。
gpxのログを読み込んで、その概要を掃き出すスクリプトを改造して、 khalコマンドとicalendarの作成と併せて、確認させてみた結果の例が以下。
# Check 015: 2019-04-26 09.10.03 Day.gpx - time (2019-04-26 09:10:03 JST) - (2019-04-26 16:30:22 JST) - trip 101.0km(382 + (stop 58)min) ave. 15.9km/hr u/d(495.9/551.6) - farthest 32.9km SE $ khal new -a bikes 20190426 09:10 440m ride 101.0k SE32k :: 奈良県天理市 - Bike event 20190426 20190426091004261630:ride 101.0k SE32k(奈良県天理市 by gpl2cal.py) # Check 016: 2019-05-03 17.48.26 Day.gpx - time (2019-05-03 07:53:35 JST) - (2019-05-03 17:47:44 JST) - trip 147.6km(493 + (stop 64)min) ave. 18.0km/hr u/d(739.2/693.1) - farthest 53.5km EE $ khal new -a bikes 20190503 07:53 557m ride 147.6k EE53k :: 滋賀県東近江市 - Bike event 20190503 None
コンソール上のコピペで作業ができるので良しとする。
0 件のコメント:
コメントを投稿