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
コンソール上のコピペで作業ができるので良しとする。