#!/usr/bin/env python # coding: utf-8 # ### Creates an International Travel Log # # Uses timezones to create an international travel log # In[1]: from datetime import datetime, timezone, timedelta from dateutil.parser import parse from dateutil import tz from memair import Memair import time # Memair Access Token access_token = 'foo' start_date = datetime(2014,5,17).date() end_date = datetime.now().date() # In[2]: home_country_timezones = ['America/Atikokan', 'America/Blanc-Sablon', 'America/Cambridge_Bay', 'America/Creston', 'America/Dawson', 'America/Dawson_Creek', 'America/Edmonton', 'America/Fort_Nelson', 'America/Glace_Bay', 'America/Goose_Bay', 'America/Halifax', 'America/Inuvik', 'America/Iqaluit', 'America/Moncton', 'America/Montreal', 'America/Nipigon', 'America/Pangnirtung', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Regina', 'America/Resolute', 'America/St_Johns', 'America/Swift_Current', 'America/Thunder_Bay', 'America/Toronto', 'America/Vancouver', 'America/Whitehorse', 'America/Winnipeg', 'America/Yellowknife'] user = Memair(access_token) after = -1 dates = {} print('Collecting & processing locations') while True: query = f''' query {{ Locations( first: 10000 after: {after} from_timestamp: "{start_date}" order: asc order_by: timestamp ) {{ id timestamp timezone }} }} ''' response = user.query(query) if len(response['data']['Locations']) == 0: break for location in response['data']['Locations']: timezone = location['timezone'] date = parse(location['timestamp']).astimezone(tz=tz.gettz(timezone)).date() if date not in dates.keys(): dates[date] = {'first_tz': timezone, 'readings': 1} dates[date]['last_tz'] = timezone dates[date]['readings'] += 1 after = response['data']['Locations'][-1]['id'] time.sleep(1) print('. ', end='') print(f'\nFinished collecting data') # In[4]: LEFT = 'Left Canada' ARRIVED = 'Arrived in Canada' IN_COUNTY = 'In Canada' OUT_OF_COUNTRY = 'Outside of Canada' NO_DATA = 'No Data' delta = end_date - start_date print(f'Date\tStatus\tReadings') for i in range(delta.days + 1): date = start_date + timedelta(days=i) if date not in dates.keys(): result = NO_DATA readings = 0 else: readings = dates[date]['readings'] if (dates[date]['first_tz'] in home_country_timezones) and (dates[date]['last_tz'] in home_country_timezones): result = IN_COUNTY elif (dates[date]['first_tz'] in home_country_timezones) and (dates[date]['last_tz'] not in home_country_timezones): result = LEFT elif (dates[date]['first_tz'] not in home_country_timezones) and (dates[date]['last_tz'] in home_country_timezones): result = ARRIVED elif (dates[date]['first_tz'] not in home_country_timezones) and (dates[date]['last_tz'] not in home_country_timezones): result = OUT_OF_COUNTRY else: result = 'error' print(f'{date}\t{result}\t{readings}') # In[ ]: