Skip to content

Instantly share code, notes, and snippets.

@devdattaT
Last active June 27, 2024 21:49
Show Gist options
  • Save devdattaT/c9dcae2107622215ff2e798dd185087e to your computer and use it in GitHub Desktop.
Save devdattaT/c9dcae2107622215ff2e798dd185087e to your computer and use it in GitHub Desktop.
import json
import csv
import sys
from datetime import datetime
import os
def has_keys(dictionary, keys):
return all(key in dictionary for key in keys)
def make_reader(in_json):
# Open location history data
json_data = json.loads(open(in_json).read())
#Will read the following keys
keys_to_check = ['timestamp', 'longitudeE7', 'latitudeE7', 'accuracy']
# Get the easy fields
for item in json_data['locations']:
if has_keys(item, keys_to_check):
timestamp = item['timestamp']
if ('.' in timestamp):
date = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S.%fZ').date()
else:
date = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%SZ').date()
tm = timestamp.split('T')[1].split('Z')[0]
longitude = item['longitudeE7']/10000000.0
latitude = item['latitudeE7']/10000000.0
accuracy = item['accuracy']
yield [date, tm, longitude, latitude, accuracy]
def getFullPath(inPath):
if(not os.path.isabs(inPath)):
# we need to set up the absolute path
script_path = os.path.abspath(__file__)
path, file = os.path.split(script_path)
inPath = os.path.join(path, inPath)
return inPath
# Read the Parameters
in_file = sys.argv[1]
out_file = sys.argv[2]
in_file = getFullPath(in_file)
out_file = getFullPath(out_file)
features = []
# add the Headers
features.append(['Date', 'Time', 'Longitude', 'Latitude', 'Accuracy'])
print("Reading {0}".format(in_file))
reader = make_reader(in_file)
for r in reader:
features.append(r)
print('Read {0} Records'.format(len(features)-1))
# write this data
with open(out_file, 'w', newline='')as f:
writer = csv.writer(f)
writer.writerows(features)
@davidyoder18
Copy link

@GitMae99 Thanks for making this script. Sorry, I'm new to running python scripts I'm getting this error.

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows

PS D:\OneDrive - Rubix LLC\Software Data\Google History> python ConvertGoogleHistory.py Records.json out.csv
Reading D:\OneDrive - Rubix LLC\Software Data\Google History\Records.json
Traceback (most recent call last):
File "ConvertGoogleHistory.py", line 56, in
for r in reader:
File "ConvertGoogleHistory.py", line 18, in make_reader
for item in json_data['locations']:
TypeError: list indices must be integers, not str
PS D:\OneDrive - Rubix LLC\Software Data\Google History>

@GitMae99
Copy link

@devdattaT Thanks for the response.
When I go to google takeout and export from there, I only get three files, encryptedBackups.txt, settings.json and tombstones.csv. So no Records.json that I can find.
When I run the script with the export I did from my Android phone (which does give me a .json data file) I'm getting the error:
Reading C:\Temp\Records.json
Traceback (most recent call last):
File "C:\Temp\ConvertGoogleHistory.py", line 56, in
for r in reader:
File "C:\Temp\ConvertGoogleHistory.py", line 18, in make_reader
for item in json_data['locations']:
~~~~~~~~~^^^^^^^^^^^^^
KeyError: 'locations'

Maybe it doesn't work with the file I exported from the android through the settings??

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment