Groovy vs. Python

Bis vor kurzem konnten Lesezeichen aus Google Chrome nicht exportiert werden, was Dan Fraser zu einem provisorischen Groovy-Skript bewogen hat. Das Skript verwandelt die JSON-Datenbank voller Lesezeichen in einen altväterlichen Netscape Bookmark File. Der findige waywalker wiederum hat eine Binary-Version des Skripts und iconv in einem Bash-Skript miteinander kombiniert, um seine aktuellen Chrome-Lesezeichen regelmäßig über Launchbar aufrufen zu können.

Bei aller Sympathie für komplizierte Lösungen – wenn Java künftig nicht mehr von Apple selbst gepflegt wird und Larry Ellison einen schlechten Tag hat, bricht alles zusammen. Dann doch lieber Python (ab Version 2.6):

#!/usr/bin/python # -*- coding: utf-8 -*- # Chrome Bookmark Exporter, tested with OS X Chrome 7.0.517.41 # Jan Eden # based on a Groovy script by Dan Fraser [http://www.capybara.org/~dfraser/archives/355] # This file is public domain. Python 2.6 or newer required import json import datetime import cgi import os import sys import codecs user = os.getlogin() input_filename = "/Users/%s/Library/Application Support/Google/Chrome/Default/Bookmarks" % user # modify if necessary output_filename = "/Users/%s/Documents/chrome-bookmarks.html" % user input_file = codecs.open(input_filename, encoding='utf-8') bookmark_data = json.load(input_file) output_file = codecs.open(output_filename, 'w', encoding='utf-8') def print_bookmarks(bookmarks): for entry in bookmarks: if entry['type'] == 'folder': if not len(entry['children']) == 0: output_file.write(u'<DT><H3 FOLDED ADD_DATE="{0}">{1}</H3>'.format(entry['date_added'], entry['name'])) next_folder = entry['children'] output_file.write(u'<DL><p>') print_bookmarks(next_folder) output_file.write(u'</DL><p>') else: output_file.write(u'<DT><A DATE_ADDED="{0}" HREF="{1}">{2}</A>'.format(entry['date_added'], cgi.escape(entry['url']), entry['name'])) output_file.write(u'<!DOCTYPE NETSCAPE-Bookmark-file-1>\n<Title>Bookmarks</Title>\n<H1>Bookmarks</H1><DL>\n') roots = bookmark_data['roots'] for entry in roots: output_file.write(u'<DT><H3 FOLDED ADD_DATE="{0}">{1}</H3>'.format(roots[entry]['date_added'], entry)) print_bookmarks(roots[entry]['children']) output_file.write(u'</DL><p>') output_file.write(u'</DL>')

Das Skript ist auch als Quelldatei verfügbar.