Simon Szustkowski

Ein Blog über alles, was mir gerade so durch den Kopf geht

Feb 17, 2013

Soup2Tumblr

Ich bin seit Jahren relativ konstanter Nutzer von soup.io. Leider scheint der Dienst nicht mehr aktiv weiterentwickelt zu werden, und ächzt momentan unter hoher Last. Gateway-Timeouts und nicht-nachladende Bilder sind normal. Das hat mich schon länger geärgert, aber ich habe es noch hingenommen. Doch irgendwann war auch meine Toleranzgrenze überschritten, und ich habe mich entschlossen, zu tumblr zu wechseln. Natürlich nicht, ohne meine gesamten Posts zu verlieren.
Ich möchte im folgenden nun mal kurz schildern, wie man seine Daten migriert. Es ist nicht so trivial, und man braucht ein unixbasiertes OS (wei eigentlich immer).

  1. Man holt sich aus der Soup den Export-RSS (zu finden unter Einstellungen -> Privatsphäre) und kopiert sich die URL des RSS-Feeds.
  2. Man benötigt ein Script, um das RSS-XML zu parsen, und die einzelnen Posts herunterzuladen. Ich habe hierzu das Script von neingeist genommen. (Gist-Backup). Es benötigt wget und xsltproc, ihr solltet also euren Paketmanager benutzen, um die Pakete zu installieren.
  3. Das Script läuft aber nicht allzu sauber. Das liegt nicht am Script selber, sondern eher an der Soup, die den RSS nicht zuverlässig liefern will, sondern lieber ein Gateway Timeout liefert. Daher empfiehlt sich ein Wrapperscript, was neingeists Script so häufig aufruft, bis es erfolgreich war.

1234

<code class=""><span class="line">bash soup-backup http://www.soup.io/export/381f19f97a0342fdd9cea4f51713e278.rss </span><span class="line">while [ $? -ne 0 ]; do </span><span class="line"> bash soup-backup http://www.soup.io/export/381f19f97a0342fdd9cea4f51713e278.rss </span><span class="line">done</span>

Klar ist das nicht die sauberste implementierung, aber es funktioniert. Anstelle des RSS setzt ihr natürlich an beiden Stellen die URL zu eurem eigenen RSS. Nun startet ihr den Wrapper. Bekommt das Script den RSS nicht, startet der Wrapper das Script automatisch erneut. Sobald das Script den RSS bekommt, lädt es sämtliche Bilder (wer braucht schon Videos? :D) herunter. Bei mir waren nach 5 Jahren Soup ca 4500 Bilder in meiner Soup, die ich gepostet oder gerepostet habe. Datenmenge: 1.9GB.
4. Nun benötigt ihr ein kleines Script, was den runtergeladenen Kram per API wieder nach tumblr hochlädt. ZB meins. (Tipp: gem install tumblr_client)
5. Für den OAuth-Kram am besten das hier machen: Eine App registrieren, dabei die Callback-URL auf http://gettumblraccesstoken.heroku.com/callback setzen. Consumer Key und Consumer Secret notieren, und http://gettumblraccesstoken.heroku.com/ einfügen. Ihr bekommt dadurch das Auth-Token und das Auth-Token-Secret. Alle 4 Werte in das Script einfügen.
6. Das Script dann einfach testen und per Cronjob ausführen. Es nimmt immer das letzte Element des Directorys, postet es, und löscht es danach. Es fängt zwar ab, wenn das Element nur noch “..” oder “.” ist, hört aber nicht auf zu arbeiten. Man muss es also wieder manuell stoppen.

Momentan habe ich noch ein Problem damit, dass das Script zwar keinen Fehler meldet, aber hochgeladene Bilder nicht mehr in meinem Tumblr erscheinen. Weiß der Teufel wieso. :(