Simon Szustkowski

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

Feb 11, 2015

Ein halbwegs intelligenter Twitterbot

Der werte @cheatha hatte neulich über mehrere Ecken auf eine Installationsanleitung für einen halbwegs intelligenten Twitterbot verlinkt. Ich wollte dieses auch unbedingt mal ausprobieren, daher habe ich diese Anleitung mal nachvollzogen, und gemerkt, dass sie immer noch für Ruby 1.9 und einer älteren Version des Gems geschrieben ist. Ich habe daher direkt mal die aktuellste Version des Gems installiert, und werde hier kurz die Abweichungen schildern, damit auch dies relativ einfach vonstatten geht.

Vorbereitungen

Wie auch in der ursprünglichen Anleitung geschildert, muss man sein Twitterarchiv anfordern, sowie einen neuen Account erstellen, der dann vom Bot betrieben wird. Man erstellt ebenso ein eigenes Verzeichnis für den Bot mit ebooks new my_ebooks, importiert dann das Archiv der Tweets, und kann schonmal mit ebooks gen my_ebooks einige Samples ausgeben lassen. Ab hier unterscheidet sich der Prozess allerdings.

Update

Die aktuelle Version der Botsoftware kann Updates des eigenen Twitterstreams laden, und so die Basis, aus der die Tweets generiert werden, verfeinern. Der Befehl dazu lautet ebooks archive <username> corpus/my_ebooks.json. Beachtet hierbei, dass der Updater in eine .json-Datei schreibt, das ursprüngliche Archiv aber als .csv-Datei kommt. Das liegt daran, dass die json-Datei ab jetzt immer weiter wächst, während die csv-Datei weiterhin auf dem Status eures angeforderten Archives bleibt. Damit das Update vollzogen werden kann, benötigt der Bot wieder die OAuth-Zugangsdaten, die ihr im Rahmen der App-Registrierung bei Twitter generiert habt. Diese werden nach dem erstmaligen Eingeben gespeichert, und müssen ab dann nicht mehr eingegeben werden. Nach dem Update der json-Datei muss aus beiden Dateien wieder ein Model geformt werden, aus dem der Bot dann seine Textstücke zusammenbaut. Dies geschieht mit ebooks consume-all my_ebooks corpus/my_ebooks.csv corpus/my_ebooks.json. Es empfiehlt sich, beide Befehle mit einem Cronjob aufzurufen, sodass der Bot immer eure aktuellsten Tweets zur Verfügung hat.

Einrichtung

Die beiden Datien, run.rb und bots.rb der ursprünglichen Anleitung benötigt ihr nicht. Mit der neuen Version der Software hat sich die Syntax des Bots geändert, und der Bot an sich kann automatisch in einer Schleife laufen, sodass run.rb ebenfalls obsolet wird. Ihr müsstet nun in bots.rb das Verhalten des Bots anpassen. Damit der Bot überhaupt Tweets generieren kann, muss im def configure Block das zuvor generierte Modelfile geladen werden.

@model = Ebooks::Model.load("model/simonszu_ebooks.model")

Nun kann der Bot damit halbwegs kluge Tweets raushauen, z.B. alle 5 Minuten (im on_startup Block den scheduler-Wert auf 5mändern):

tweet(@model.make_statement(140))

oder z.B. auf eine Reply antworten (im on_mention-Block):

reply(tweet, @model.make_statement(100))

Damit der Bot dann auch ordentlich auf Twitter zugreifen kann, müssen oben im def configure-Block die Consumer-Details der erstellten App eingetragen werden, und unten im MyBot.new-Block der Name des Twitteraccounts, sowie die Access-Details der erstellten App.

Betrieb

Der Bot an sich läuft mittlerweile als Endlosschleife. Einfach ebooks start eingeben, und ab geht die Luzie. Auf der Konsole erscheinen Meldungen, was gerade passiert, und sollte mal ein Subprozess abstürzen, braucht der Bot einige Sekunden, um sich wieder zu fangen, und fährt dann mit seinem sinnlosen Dasein fort. Man kann sogar auf einer anderen Shell eine Konsole starten, um den Bot damit zu steuern: ebooks console.

Meinen Bot findet man übrigens unter @simonszu_ebooks.