Deppenblog

Technische Hintergründe zum Deppenbot

How to make a bot

Ich habe kürzlich für einen Freund einen Retweet-Bot für Twitter gebastelt und dachte mir, dass es vielleicht für Euch interessant wäre, den Vorgang zu beschreiben. Ein simpler Bot lässt sich nämlich ohne Programmierkenntnisse ganz einfach mit Internetdiensten zusamenbauen und was das schönste ist: Es kostet keinen Pfennig, bzw. Cent oder was auch immer.

Man nehme…

Da wir diverse Internetdienste miteinander verbinden, brauchen wir bei den betreffenden Anbietern Accounts, als da wären – in dieser Reihenfolge – je ein Account bei Yahoo, bei ifttt.com und natürlich bei Twitter. Auch wenn man bereits einen Yahoo-Account hat, empfehle ich, bei Yahoo einen zweiten Account anzulegen, was aber nicht zwingend ist. Google Chrome oder Firefox sind ebenfalls erforderlich.

Arbeiten mit unterschiedlichen Accounts

Wer in seinem Browser gerne die Passwörter speichert -ich denke, dass die meisten das tun-, bekommt mit einem zweiten Account leichte Schwierigkeiten. Man kann nicht gleichzeitig sein normales Twitter und das Twitter des Bot in einem Browser öffnen und noch komplizierter wird es, wenn man weitere Internetdienste nutzt, in denen man sich mit dem Twitteraccount authentifiziert. Um dieser Verwirrung vorzubeugen, verwendet man einfach einen zweiten Browser. Google Chrome oder Firefox bringen von Haus aus oder über Addons die Möglichkeit mit, ein zweites Profil einzurichten. Wer bisher ausschließlich den Internet Explorer nutzt, installiert einfach zusätzlich Google Chrome oder Firefox.

How to begin

Lege zunächst den Account bei Yahoo an. Diesen Account nutzt Du für die Erstellung eines neuen Twitter Accounts und anschließend erstellst Du einen neuen Account bei http://ifttt.com.

Twitter und ifttt verlangen eine Bestätigung der Emailadresse. Erledige das am besten sofort, indem Du in Deinem neuen Yahoo-Postfach die Mails der Anbieter öffnest und dort auf die jeweiligen Links für die Bestätigung klickst.

Nun ist alles vorbereitet und wir kommen in medias res.

Twitter Suche

Wir bauen einen Retweet-Bot, brauchen also einige Tweets zum Weiterleiten. Dazu baust Du Dir zunächst in der Twittersuche einen Suchstring zusammen, der Dir die gewünschten Ergebnisse liefert. Ich wähle den Suchstring „eine Tasse Kaffee“ lang:de (incl. „“) und drücke auf Suchen.

In der Addressleiste sehen wir, dass die Twitter-uri nun die Suchwörter und einige Füllzeichen enthält. https://twitter.com/#!/search/%22eine%20Tasse%20Kaffee%22%20lang%3Ade. Diese Füllzeichen sind wichtig, da es in einer Internetadresse keine Leerzeichen oder Sonderzeichen geben darf. Kopiere den Teil hinter https://twitter.com/#!/search/, also in meinem Fall %22eine%20Tasse%20Kaffee%22%20lang%3Ade.

RSS-Feed

Aus der Zeichenkette %22eine%20Tasse%20Kaffee%22%20lang%3Ade und der Adresse http://search.twitter.com/search.atom?q= bauen wir nun die Adresse eines RSS-Feeds zusammen, indem wir die Zeichenkette einfach hinten anhängen. Bei älteren Twitter-Versionen gab es die Möglichkeit, den Feed direkt im Twitter Webclient zu generieren. Das wurde in neueren Versionen deaktiviert. Glücklicherweise ist aber die Web-Applikation ‚search.atom‘ immer noch vorhanden. Die Uri des RSS-Feeds sieht bei mir nun so aus: http://search.twitter.com/search.atom?q=%22eine%20Tasse%20Kaffee%22%20lang%3Ade

Zum Test gibst Du die Adresse in den Internet Explorer oder in Firefox ein (Google Chrome entbehrt leider eines integrierten RSS-Readers).

Das Resultat sollte sich in etwa so darstellen:

Yahoo Pipe

Gehe auf die Seite http://pipes.yahoo.com und klicke oben auf „Create a Pipe“. Es öffnet sich der Editor. Mit dem Internet Explorer bekommt man hier Schwierigkeiten. Wer bisher mit dem Internet Explorer herumgehumpelt ist, sollte spätestens jetzt zu Google Chrome wechseln.

Aus der linken Spalte das Modul „Fetch Feed“ auf die Arbeitsfläche rechts ziehen.

In das Textfeld die Adresse Deines RSS-Feeds eingeben (http://search.twitter.com/search.atom?q=%22eine%20Tasse%20Kaffee%22%20lang%3Ade).

Wenn man das Textfeld verlässt und das Modul anklickt, erscheint unten schon das Ergebnis.

Das alleine ist natürlich nicht sehr hilfreich. Jetzt wollen wir daran gehen, einen Teil der unzähligen Funktionen des Editors zu nutzen.

Filter

Wir klappen links die Gruppe „Operators“ auf und ziehen das Modul „Filter“ auf die Arbeitsfläche. Anfangs ist dort nur eine ausfüllbare Zeile enthalten. Weitere Zeilen bekommst Du, wenn Du auf das ‚+‘ links neben „Rules“ klickst. Die Felder auf der linken Seite enthalten vordefinierte DropDown-Einträge, die aufklappen, wenn man auf das Dreieck ‚>‘ klickt, lassen sich aber auch ergänzen oder überschreiben. Die mittleren Felder enthalten vordefinierte Operatoren.

Wir tragen wir folgende Filter ein:

„item.author.name contains twitteraccountname“, (für twitteraccountname den Twitternamen Deines Bots ohne ‚@‘ eingeben) damit er sich nicht selbst retweetet.

„item.twitter:lang doesn’t contain de“ zur Sicherheit, weil die Suche dummerweise fremdsprachige Ergebnisse liefert, warum auch immer.

„Item.title Contains cheiße“ als Beispiel für unerwünschte Wörter.

„Item.title matches regex RT.*@[\w\W]*:.*$ “, damit der Bot keine Retweets retweetet. Das würde ggf. zu Endlosschleifen führen und sieht einfach doof aus.

Den unteren Verbindungspunkt des Moduls „Fetch Feed“ verbindest Du mit Hilfe der der Maus mit dem oberen Verbindungspunkt des Filters, so dass die beiden über ein hellblaues Kanal verbunden sind.

Build @accountname

Den Inhalt dieser Tweets unverändert zu retweeten wäre selbstverständlich auch möglich, aber damit zieht man berechtigterweise schnell den Groll der Twittergemeinde auf sich. Wir müssen also „RT @accountname: “ vorne anfügen. Dazu müssen wir zunächst einmal den Namen desjenigen herausfummeln, der den Tweet versendet hat. Wenn Du unten in der Ergebnisliste mal so einen Eintrag aufklappst, siehst Du, dass der Absender des Tweets nicht mit dem gewohnten @Accountnamen zu finden ist, sondern nur ohne ‚@‘ und in Kombination mit dem vollen Namen. Das ist schwierig zu trennen.

Einfacher ist es, den Namen aus der uri zu extrahieren. Wir ersetzen „http://twitter/“ durch ‚@‘.

Loop

Dafür ziehen wir von den „Operators“ das Modul „loop“ auf die Arbeitsfläche.

In das Feld „Drop module/pipe from toolbox here“ fügen wir aus der Gruppe “String” das Modul „String Replace“ ein.

Die Felder wie unten gezeigt ausfüllen und die Verbindungspunkte verbinden.

Das Modul erzeugt aus der uri und dem hinzugefügten ‚@‘ den @accountname und trägt diesen in das Feld author.name ein. Bitte klicke auf die Titelleiste des Moduls „Loop“, vergewissere Dich, dass im Debug-Fenster die Feeds neu geladen werden (ggf. „Refresh“ anklicken) und prüfe, ob in den Detailinfos „author.name“ zu den einzelnen Streams nun tatsächlich der @accountname steht.

Build RT Tweet

Jetzt wollen wir noch RT @username: vor den Text stellen. Wir nehmen also wieder eine Loop und platzieren darin einen Stringbuilder.

Den Stringbuilder wie im Bild zu sehen ausfüllen. Hinter ‚RT‘ und ‚:‘ jeweils ein Leerzeichen einfügen. Im Debug-Fenster unten das Ergebnis überprüfen.

How to block Tweets longer than 140 Characters?

Weil wir vor jedem Tweet nun „RT @username: „ davor setzen, werden manche RTs leider zu lang. Das ist zum einen unschön und zum anderen ergeben solche RTs meist keinen Sinn mehr. auf solche Tweets verzichten wir lieber. Wir blocken also. Dazu brauchen wir einen Filter:

In Zeile 1 steht eine sogenannte „regular Expression“, die alles blockt, was mindestens 141 Zeichen lang ist. Zuguterletzt habe ich noch Tweets mit Links ausgefiltert, damit es ein paar weniger sind.

Nun speichern wir die Pipe unter einem sinnvollen Namen und verlassen den Editor mit Klick auf „Back to my pipes“.

Get RSS Feed

Klicke auf Deine Pipe, und sieh Dir das Ergebnis an. Wenn alles wie erwartet aussieht, mit der rechten Maustaste auf „Get as RSS“ und den Link kopieren.

IF Trigger Than That

Nun gehen wir zu ifttt und bringen ihm bei, die Ergebnisse Deines Feeds zu twittern. Hierzu gibt es eigentlich nicht viel zu erklären, weil die Bedienung sehr simpel und selbsterklärend ist.

  • Klicke nach erfolgter Anmeldung auf „Tasks“ -> „Create a new Task“ -> „This“.
  • Klicke auf „Feed“ -> „New Feed item“.
  • Gib in das Adressfeld die RSS-Adresse Deiner Pipe ein.
  • Klicke auf „Create Trigger“.
  • Klicke auf „That“, wähle „Twitter“ aus und aktiviere – falls nicht schon geschehen – den Twitter channel.
  • Wähle aus den Twitter-Aktionen „Post a new Tweet“ aus.
  • In dem Textfeld {{EntryUrl}} weglöschen, den wir brauchen nur den Titel.  Anschließend auf „create action“ klicken.
  • In der Beschreibung einen sinnigen Text eingeben und „create Task“ anklicken.
  • Fertig!

Wenn man rechts auf den blauen Pfeil klickt, bekommt man diese Ansicht:

Hier kann man u.a. den Task ändern. Bei Klick auf „check now“, führt er die Aktion direkt aus.

Wenn sich nach Klick auf „check now“ die Anzahl der ausgeführten Aktionen ändert („triggered 1x“), hat alles geklappt. Bei Twitter sollte man die gesendeten Tweets direkt sehen können.

Epilog

Das Ergebnis kann sich schon sehen lassen. Noch interessanter wird es, wenn man mit IFTTT weitere Kanäle verbindet. Man kann z.B. den Google Kalender verbinden und so sehr komfortabel zeitgesteuert Tweets versenden, indem man die Tweets als Termine im Kalender pflegt. Auch interessant ist das verbinden mehrerer RSS-Feeds in Yahoo Pipes und das anschließende Filtern nach Schlagwörtern. Das Ergebnis nimmt man dann z.B. für den eigenen RSS-Reader, um Informationen zu bestimmten Themen von verschiedenen Quellen zu bekommen, oder man verwendet es als Eingangskanal für Paper.li. Es gibt unzählige Möglichkeiten. Ich werde versuchen nach und nach meine Experimente mit diesen Tools hier zu bloggen. Über Fragen, Kommentare und dergleichen  würde ich mich sehr freuen.

Beitragsnavigation