Simples Twitter Backup
Posted August 8th, 2009 by bishophIch nutze Twitter. Warum? Ich bekomme recht schnell mit, was gerade los ist in der Welt und es ist für mich eine Art Ablage geworden. Eine Ablage, in der ich z.B. interessante Links aufbewahre. Nun kam es am Donnerstag und Freitag zum DDOS-Angriff auf Twitter und ich versprach einem Kollegen, einen Link zu senden der - wie ich wusste - auf Twitter von mir gepostet wurde. Irgendwann im März. Daten einem Service in der Cloud zu überlassen, ohne Backup und ohne Möglichkeit von anderen Services darauf zugreifen zu können, entpuppte sich als Problem (meine FriendFeed-Aggregation startet leider erst im April).
Aus diesem Grund habe ich heute einen ganz simplen PHP Ansatz erstellt, um über die Twitter-JSON-Schnittstelle Daten zu ziehen. Ist recht einfach und simple, aber ich stelle es trotzdem mal vor, denn ich nutze das ganze ebenfalls auf der Homepage um die letzten 5 Twitter Nachrichten in einem Drupal-Block anzuzeigen. Im Drupal-Block ist allerdings noch ein Timeout drin. Ein Vorteil des u.a. Ansatzes gegenüber anderen Backup Tools ist, das kein Benutzer/Passwort mitgegeben werden muss, sondern eine einfache URI ausreicht.
Sollte jemand auf die glorreiche Idee kommen den Code selber zu verwenden, so empfehle ich übrigens dringend, die "bishoph" Sektionen durch eigene Namen zu ersetzen.
$json = new Services_JSON();
echo 'bishoph on Twitter';
$twitter_json = file_get_contents('http://twitter.com/statuses/user_timeline/bishoph.json?count=250');
$decoded = $json->decode($twitter_json);
if ($decoded != null) {
$count = count($decoded);
if ($count > 0) {
echo '';
for ($a = 0; $a < $count; $a++) {
$obj = $decoded[$a];
echo makeURL($obj->text);
//echo $obj->source; // Client
echo '';
}
//echo 'Follow me';
}
} else {
echo 'Twitter ist nicht erreichbar. Schau selbst';
}
function makeURL($URL) {
$URL = eregi_replace('(((f|ht){1}tp|s://)[-a-zA-Z0-9@:\+.~#?&//=]+)','\\1', $URL);
$URL = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:\+.~#?&//=]+)','\\1', $URL);
$URL = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})','\\1', $URL);
return $URL;
}
Ach ja, es kann sein, das die JSON-decode Funktion etwas angepasst werden muss, denn ich verwende nicht den nativen Parser. Weiterhin hole ich im Script nur 250 Einträge von Twitter. Wer mehr möchte, muss den Wert anpassen. Ich weiß auch nicht, ob es eine Grenze gibt, ab der dieser Ansatz nicht mehr anwendbar ist.
Feedback, Kommentare und Anmerkungen sind wie immer gerne willkommen.