Skip to content

Instantly share code, notes, and snippets.

@ngzhian
Created June 28, 2016 04:40
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ngzhian/73c51bcb44c8bfd8dc02d4aa538fb83f to your computer and use it in GitHub Desktop.
Save ngzhian/73c51bcb44c8bfd8dc02d4aa538fb83f to your computer and use it in GitHub Desktop.
# -*- 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.
Slight modification of regex to get lat/lng from web page from: https://gist.github.com/endolith/3896948=
"""
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_lng = re.compile('\[\d+\.\d+,(\d+\.\d+),(\d+\.\d+)\]')
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, longitude = lat_lng.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")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment