Twitter retweet mit Python
Jun 06, 09
Internet Python, Twitter 1 Kommentar
Twitter — richtig benutzt — kann eine wunderbare Informationsquelle sein. Abseits des blahblah “Eben Füße gewaschen …” oder “Mein Schwein pfeift!” gibt es auch ernsthafte Aussagen von ziemlich beschlagenen Menschen. Diese allerdings zu finden, ist gar nicht so leicht.
Ich habe daher ein Tool im Einsatz, welches es mit erlaubt, Tweets zu filtern und als Suchordner bereit zu stellen — Tweetdeck. Das ist ganz toll für mich, nur hilft niemand Anderem. Also wollte ich einen kleines Programm (einen Bot) schreiben, welches mir interessante Themen noch einmal unter einem einzigen Twitter-Account sendet (re-tweetet).
Mich interessiert Projektmanagement. Also habe ich einen Account eröffnet: pm_teweet_de, der alle tweets retweeten soll, in dem das Wort “Projektmanagement” vorkommt.
So habe ich es gemacht …Zum Start habe ich ein schönes Python-Skript bei Chris Finke gefunden. Das war schonmal die halbe Strecke, allerdings retweeted dieses Skript direkte Nachrichten an einen oder mehrere benannte Accounts. Ich will aber suchen, also …
Ansatz #1: Ich hole mir die Public Timeline (also alle Tweets) und filter dann mit einer regex das Wort “Projektmanagement”. Das ist eine blöde Idee, denn ich bekomme immer nur die 20 neuesten Tweets über die API von Twitter geliefert. Das ist so, Twitter eben.
Ansatz #2: Es gibt ja seit Neuestem in Twitter eine Suchfunktion, das sollte gehen! Also los ..
Man nehme:
- Python incl. SQLite
- das Skript von Chris zum Pimpen
- python-twitter, ein Skript welches die Verbindung zur Twitter-API herstellt. Hier muss man darauf achten, die allerneueste Version zu nehmen (siehe bug 70), damit die Search-API unterstützt wird. Zur not selber patchen …
- simplejson, welches von python-twitter benötigt wird
Weitere Informationen:
Ich habe die ganze Aktion auf Linux umgesetzt — ist eben “programmierfreundlich”. Wenn alles installiert ist, kommen wir zu dem Hauptskript retweet-tw.py.
Im Folgenden beschränke ich mich auf ein paar Besonderheiten und werde nicht das gesamte Skript kommentieren.
# This is a list of accounts; username first, password second
ACCOUNTS = [("<account>","<pass>")]
TESTSWITCH = True
SEARCHWORD = "projektmanagement"
LANGUAGE = ""
In “ACCOUNTS” können mehere Twitter-Accounts verwaltet werden, mindestens muss es aber Einer sein.
Wenn “TESTSWITCH=True”, wird normal ausgeührt. Jedoch wird der Tweet nicht an Twitter gesendet und es werden ein paar Informationen ausgegeben. So wird zum Beispiel die höchste Tweet-ID der Datenbank ausgegeben, dies ist die ID des letzten von mir gesendetem Tweet.
“SEARCHWORD” beinhaltet den Suchbegriff, Groß- und Kleinschreibung ist egal.
“LANGUAGE” sollte leer sein, also “” <– ohne Leerzeichen. Man kann auch nach einer bestimmten Sprache suchen (“de”, “en”, …), dies ist allerdings tricky. Es gab viele deutsche Tweets, die in der Ausgabe den Sprachschlüssel “pl” oder “nl” hatten. Dies liegt wahrscheinlich an der IP-Adresse, vor der der Tweet gesendet wurde. Wenn “LANGUAGE” leer ist, wird die Spracheinstellung nicht berücksichtigt und alle Tweets ausgegeben.
# The full path to the directory you want the sqlite file stored in. Each user will get its own db
DB_DIR = "/full/path/to/db/"
Hier muss der vollständige Pfad zu Datenbank hin, jeder Account bekommt eine Eigene.
Ab hier muss nichts mehr verändert werden. Falls genug Interesse besteht, werde ich das Skript noch weiter kommentieren.
Zum Abschluss muss man noch dafür sorgen, dass das Skript in Intervallen ausgeführt wird. Unter Linux ist das ein klaren Fall für cron:
*/5 * * * * tweller /usr/bin/python /home/tweller/scripts/retweet-tw/retweet-tw.py
Das ist der Eintrag für die /etc/crontab. Mein Skript läuft alle 5 Minuten. Noch eine Anmerkung: Es kann teilweise Stunden dauern, bis Tweets in der Twitter-Suche zur Verfügung stehen — bevor Ihr also verzweifelt, überprüft das Ergebnis in der Twitter-Suche.
Twitter
Xing
Linked.in
Facebook
Flickr
eMail
RSS
Jun 21, 2009 @ 17:11:00
interessante Idee und toll, dass du das so ausführlich beschreibst.
Hast du dir mal die pm-hashtags angeschaut? vieles ist englisch aber sicher auch eine gute Idee, zumindest #pmot auch mit reinzunehmen in solch ein script (oder über einen separaten account)
was mich interesisert: könnte man Retweets rausnehmen?
Lieben Gruß
Andrea