Schlagwort-Archive: Cookies.txt

Daten aus Webdiensten mit wget sichern (OS X, Firefox)

Für den Seelenfrieden gibt es doch nichts besseres als ein Backup. Für meine lokalen Daten erledigt das unter OS X 10.4 Leopard Time Machine von Apple ohne viel Aufhebens. Übrig bleiben aber die ganzen Daten, die ich im Web pflege, wie z.B. Delicious-Bookmarks und Bloglines-Subscriptions. Manuell kann man diese Daten auf die lokale Festplatte exportieren, und genau das wollte ich heute automatisieren. Das geht nach einigen kleinen Hürden mit wget problemlos.

1. Beispiel Bloglines

Die Seite, die alle Subscriptions als OPML liefert, lautet http://www.bloglines.com/export. Einzige Hürde: man muss eingeloggt sein. Im Browser klappt der Export nach dem Login dann dank Cookies. Und diese kann man auch wget übergeben, und zwar mit dem Parameter "--load-cookies cookies.txt". Cookies.txt ist eine Datei mit Cookies im Netscape-Format. Mein Lieblingsbrowser Firefox speichert die Cookies allerdings seit Version 3 in einer Sqlite-Datenbank. Zum Glück steht hier, wie man die Daten leicht daraus extrahieren kann – und zwar mit folgendem Script (von mir leicht vereinfacht):

#!/usr/bin/python
import sqlite3 as db
import sys
cookiedb = ‚/Users/<username>/Library/Application Support/Firefox/Profiles/<profilename>/cookies.sqlite‘
connection = db.connect(cookiedb)
cursor = connection.cursor()
contents = „host, path, isSecure, expiry, name, value“
cursor.execute(„SELECT “ +contents+ “ FROM moz_cookies“)
file = open(„./cookies.txt“, ‚w‘)
index = 0
for row in cursor.fetchall():
file.write(„%s\tTRUE\t%s\t%s\t%d\t%s\t%s\n“ % (row[0], row[1],
str(bool(row[2])).upper(), row[3], str(row[4]), str(row[5])))
index += 1
file.close()
connection.close()

Der Aufruf zum Sichern sieht dann so aus:

wget –load-cookies cookies.txt „http://www.bloglines.com/export“ -O bloglines.opml

2. Beispiel delicious

Hier lautet die URL zum Export https://secure.delicious.com/settings/profile/export. Wieder braucht man die cookies.txt. Aber es gibt noch ein weiteres Problem: Die export-URL verlangt einige Parameter als POST-Request. Zum Glück kann wget auch diesen Trick mittles „–post-data“. Die Parameter sehen so aus: „.crumb=<ID>&include_tags=yes&include_notes=yes&submit=submit“. Die „<ID>“ muss man aus dem Quelltext der Webseite „https://secure.delicious.com/settings/bookmarks/export“ auslesen (nach .crumb suchen), denn ich denke, die ist variabel (und ich hoffe aber, sie bleibt für mich stabil…). Ausserdem gibt es noch den wget-Parameter „–no-check-certificate“, der Probleme mit dem SSL-Zertifikat ignoriert. Insgesamt sieht der Aufruf dann so aus:

wget –no-check-certificate –load-cookies cookies.txt „https://secure.delicious.com/settings/profile/export“ –post-data „.crumb=<ID>&include_tags=yes&include_notes=yes&submit=submit“ -O delicious.html

Jetzt nur noch das Ganze in ein Script packen, um es via cron-job oder sowas regelmäßig und ohne weiteres Zutun anzustoßen.