Stundenschreibung mit Google Maps

Wenn man auf seinem Google- Handy den Standortverlauf aktiviert hat, kann man damit seine Anwesenheiten am Arbeitsplatz tracken und folgendermassen auswerten:

mapshours.py
import sys
import json
from pprint import pprint
from dateutil import parser, tz
 
def read_local_time(time_string):
    from_zone = tz.tzutc()
    to_zone = tz.tzlocal()
 
    utc = parser.isoparse(time_string)
 
    # Tell the datetime object that it's in UTC time zone since 
    # datetime objects are 'naive' by default
    utc = utc.replace(tzinfo=from_zone)
 
    # Convert time zone
    return utc.astimezone(to_zone)
 
with open(sys.argv[1], encoding='utf-8') as fh:
    import_data = json.load(fh)
filters=sys.argv[2:]
print("Tag\tOrt\tVon\tBis")
worksheet_entries={}
for timelineObject in import_data["timelineObjects"]:
    for key, value in timelineObject.items():
        if key=="placeVisit":
            if "location" in value:
                start_time=read_local_time(value["duration"]["startTimestamp"])
                end_time=read_local_time(value["duration"]["endTimestamp"])
                day_date= start_time.strftime("%d.%m.%Y")
                if "semanticType" in value["location"] and value["location"]["semanticType"]=="TYPE_WORK":
                    name="Arbeitsplatz"
                elif "name" in value["location"]:
                    name=value["location"]["name"]
                else:
                    name=value["location"]["address"]
                if not day_date in worksheet_entries:
                    worksheet_entries[day_date]=[]
                worksheet_entries[day_date].append({
                    'name':name,
                    'start_time':start_time.strftime("%H:%M"),
                    'end_time':end_time.strftime("%H:%M")
                    })
for day_date,entries in worksheet_entries.items():
    for entry in entries:
        if len(filters)==0 or entry["name"] in filters:
            print(f'{day_date}\t{entry["name"]}\t{entry["start_time"]}\t{entry["end_time"]}')