Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Export Google Maps starred locations
# -*- coding: utf-8 -*-
"""
Go to Google Bookmarks: https://www.google.com/bookmarks/
On the bottom left, click "Export bookmarks": https://www.google.com/bookmarks/bookmarks.html?hl=en
After downloading the html file, run this script on it to generate a KML.
"""
from lxml.html import document_fromstring
import simplekml
from urllib2 import urlopen
import re
import time
filename = r'GoogleBookmarks.html'
with open(filename) as bookmarks_file:
data = bookmarks_file.read()
kml = simplekml.Kml()
# Hacky and doesn't work for all of the stars:
lat_re = re.compile('markers:[^\]]*latlng[^}]*lat:([^,]*)')
lon_re = re.compile('markers:[^\]]*latlng[^}]*lng:([^}]*)')
coords_in_url = re.compile('\?q=(-?\d{,3}\.\d*),\s*(-?\d{,3}\.\d*)')
doc = document_fromstring(data)
for element, attribute, url, pos in doc.body.iterlinks():
if 'maps.google' in url:
description = element.text or ''
print description.encode('UTF8')
print u"URL: {0}".format(url)
if coords_in_url.search(url):
# Coordinates are in URL itself
latitude = coords_in_url.search(url).groups()[0]
longitude = coords_in_url.search(url).groups()[1]
else:
# Load map and find coordinates in source of page
try:
sock = urlopen(url.replace(' ','+').encode('UTF8'))
except Exception, e:
print 'Connection problem:'
print repr(e)
print 'Waiting 2 minutes and trying again'
time.sleep(120)
sock = urlopen(url.replace(' ','+').encode('UTF8'))
content = sock.read()
sock.close()
time.sleep(3) # Don't annoy server
try:
latitude = lat_re.findall(content)[0]
longitude = lon_re.findall(content)[0]
except IndexError:
print '[Coordinates not found]'
print
continue
print latitude, longitude
try:
kml.newpoint(name=description,
coords=[(float(longitude), float(latitude))])
except ValueError:
print '[Invalid coordinates]'
print
kml.save("GoogleBookmarks.kml")

marado commented Aug 15, 2014

I'm using (part of) this at https://github.com/marado/stars-to-addresses . I am assuming I can, since there's no LICENSE information for this gist, but I wouldn't mind getting explicit permission.

Owner

endolith commented Sep 25, 2014

You have explicit permission! :)

How do you run the html file in KML? I did get all the names of my bookmarks (thank you for that)

iturki commented Dec 28, 2015

Or, you can use this online tool to do the html > KML conversion:
http://gexport.somee.com/

jbg commented Apr 5, 2016

I made a Python 3, GeoJSON-exporting version based on this script here:
https://gist.github.com/jbg/60bf54b8f19c0a42abf7091c486d17fc

ngzhian commented Jun 28, 2016

I updated the regex for lat, lng based on the most recent google response, here's the gist: https://gist.github.com/ngzhian/73c51bcb44c8bfd8dc02d4aa538fb83f

3v1n0 commented Jan 11, 2017

Thanks, I guess you want to merge changes from @ngzhian in order to get this working properly with new APIs

heyarne commented Jan 29, 2017

Hey! Just a quick heads up: I packaged it up a bit with a proper requirements.txt and put it up on https://github.com/heyarne/bookmarks-to-kml. I hope that's fine. If it's ok i'd also like to build a simple web interface around it, but because of the missing license file I didn't want to do it without permission. Any objections?

I've made another script that converts Google Maps JSON to KML. It is more complete and it works flawless! Check here: https://github.com/dmrsouza/json2kml

LaDeeDaDee commented Mar 3, 2017

@dmrsouza flawless if you know can run simplekml via a pip...

'pip' is not recognized as an internal or external command,
operable program or batch file.

How do I install simplekml via pip? I have downloaded simplekml 1.3.0 but I'm not sure if it is installed?

dmrsouza commented Mar 4, 2017

@LaDeeDaDee At least on Windows pip command is installed with Python. Anyway there are instructions about how to install pip at https://docs.python.org/3/installing/

Gentlemen,
I am a beginner with python, but managed to get through the installation, pip.. now I'm stuck here:

C:\Users\Kierownik\Desktop\json2kml>json2kml.py
Opening file "Saved Places.json"
Traceback (most recent call last):
File "C:\Users\Kierownik\Desktop\json2kml\json2kml.py", line 32, in
for place in data["features"]:
KeyError: 'features'

Would you, please, be able to help?

Thanks!

@rlewandowski1988, please check your JSON file (open it in a text editor). It should start as:

{ "type" : "FeatureCollection", "features" : [ { "geometry" : { "coordinates" :........

It seems it is missing the "features" section. If your data is not private and if you can share your JSON file, I am willing to help you.

@dmrsouza, I previously gave up becaue I realised that google introduced new feature under saving your places - now you can save and give the location one of the categories: Favorites, Want to go, Starred places or New list (you create one). Knowing that I just thought that they probably changed the data structure and that's why json2kml.py stopped working... but it turned out that insted of downloading Maps (your places) I downloaded the Location history ;) Nevertheless your comment helped! thanks very much for help! all the very best! ;)

blaines commented Jul 26, 2017

Google says "No Data Found" for all of my accounts when exporting "Maps (your places)". Boo

Trying the bookmarks approach instead

andriip commented Aug 4, 2017

@rlewandowski1988, Hi did you try this script with your Location History file?
Is it working?

YvesBas commented Nov 1, 2017

Thanks for this very useful script! However I would need to get also the custom labels I added to my starred locations to be able to use this data on another GIS. Do you think it would be possible to get the labels??

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