-
-
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) |
That works perfectly - thank you very much
Hello, I am new here and want to run this script on my location-history.json file, which I downloaded from Android phone, but it doesn't seem to work. Do you have basic instructions for running the python script? I have Windows 11 OS and Python 3.11.3. When I run in Python Idle, I get:
Traceback (most recent call last):
File "C:\Users\Rhythm Rider\AppData\Local\Programs\Python\Python311\ConvertGoogleHistory.py", line 43, in
in_file = sys.argv[1]
IndexError: list index out of range
Thanks
@GitMae99 Keep your Records.json
file in the same folder as this script, and then you can run the following command: python ConvertGoogleHistory.py Records.json out.csv
The script reads the first file (i.e. Records.json) and then generates the second file.
@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>
@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??
This file has been updated to read the new format as generated by Google