Dein eigener Twitter Bot

Dein eigener Twitter Bot Titelbild

Twitter ist ein total toller Kurnachrichtendienst. Kurz, weil jeder Beitrag inklusive Bilder und Links nur 140 Zeichen haben darf. Wir von Jugend Programmmiert und Norbert sind dort auch zu finden. Aber was soll das jetzt mit dem Bot? Bot ist einfach nur ein cooler Name für ein Programm, das selbständig Inhalte auf Twitter posten wird. Diesen Bot werden wir mit Python3 programmieren. Alles was du erstmal brauchst, ist ein Raspberry Pi

Einrichten

Bevor wir anfangen können unserem Bot leben einzuhauchen, müssen wir erst einmal die Bibliothek twython mit pip installieren.

sudo apt-get install python3-pip
pip-3.2 install twython

In der nächsten Einheit werden wir dann erstmal einen Twitter Account einrichten. Wenn du scheinen einen mit Handy+E-Mail Adresse Aktivierten Account hast, kannst du das auch überspringen ;)

Jetzt, da wir die Bibliothek installiert haben, brauchen wir noch einen Twitteraccount. ( Wenn du schon einen hast,musst du dir natürlich keinen neuen anlegen.)

https://twitter.com/signup

258.png

Dann ist es noch wichtig, dass du deine Handynummer hinterlegst und bestätigst. Ansonsten lässt dich Twitter keinen eigenen Bot anlegen…

260.png261.png

Danach gehst du am besten einfach auf https://twitter.com/ und sparst dir damit, alle Dinge von Twitter auszufüllen.

Wichtig ist aber, dass du deine E-Mail Adresse bestätigst. Dafür musst du einfach nur auf den Link Klicken, den dir Twitter per E-Mail zugesendet hat.

259.png

Wenn du willst, kannst du dein Account noch verschönern aber das ist ganz dir überlassen, für den Bot spielt das nämlich keine Rolle! Tipp: Schalte am besten die E-Mail Mitteilungen aus, sonst bekommst du recht viel Spam von Twitter.

Nun, da du einen Twitter Account hast, kannst du schon per hand Tweets schreiben und versenden.

Super!

Aber wollten wir dafür nicht einen Bot haben? Dafür müssen wir erst noch ein extra Zugang einrichten, den unser Bot versteht diese Grafische Oberfläche nicht. Um das umzusetzen gehst du auf https://apps.twitter.com/ und klickst auf “Create New App” (engl. für “Neue App Erstellen”)

262.png

Die nachfolgenden Felder kannst du natürlich frei wählen, außer du willst auch einen Bot für deinen Norbert bauen ;)

263.png

Jetzt kommen wir zum wirklich interessanten Teil beim Erstellen unserer App. Wir bekommen endlich den Zugriff auf die Zugangsdaten, mit denen unser Programm etwas anfangen kann. Zuerst müssen wir sicherstellen, dass unser Bot auch die möglichen Rechte bekommt, also Lesen und Schreiben ist super (read and write).

264.png

Für unser Python Programm sind nachher vier Dinge wichtig:

  • API Key
  • API Secret
  • Access Token
  • Access Token Secret.

Die findest du unter dem Reiter “Keys and Access Token”. Den Access Token musst du dir erst noch mit dem Klicken auf “Generate Access Token” erstellen.

265.png266.png

Auch wenn wir es super finden, dass ihr alle einen Bot für Norbert erstellt, haben wir trotzdem mal die letzten Zeichen weggemacht ;)

Das war jetzt alles ganz schön viel Arbeit, aber es gibt noch keine Pause! Erst wollen wir unseren Tweet versenden. Öffne dazu im Terminal eine neue Python Datei.

nano hello_tweet.py
from twython import Twython

tweet = "Hello World!"

# Hier musst du deine Daten einfügen!
apiKey = 'zzLIttB3mCWxxxxxxxxx'
apiSecret = 'BdeDNxxxxxxxxxxxx’
token = '4149497362-xxxxxxxx'
tokenSecret = 'iqAcas3xxxxxxx'

api = Twython(apiKey,apiSecret,token,tokenSecret)
api.update_status(status=tweet)

Du kannst nano mit Strg + x beenden und mit y + Enter-Taste bestätigst du, das die Änderungen gespeichert werden sollen.

python3 twitter.py

Wenn du alles richtig gemacht hast, ist der Tweet jetzt gepostet und sollte in etwa so aussehen:

267.png

Aber wenn du nicht genau die Zugangsdaten benutzt hast, die dir angezeigt wurden, dann könnte so eine Fehlermeldung bei dir im Terminal erscheinen:

295.png

Hier wird eine 401 Fehlermeldung ausgegeben. Diese steht immer dafür, dass du kein Recht hast, diese Seite zu besuchen.

Schritt für Schritt

In Zeile 1 binden wir die neu installiere Bibliothek ein. Danach legen wir in der Variable tweet den Inhalt des Tweets fest. In Zeile 6 bis 9 speichern wir dann auch die Zugangsdaten in Variablen. Variablen sind wie eine Box, bloß dass es diese Box nur auf dem Computer gibt und fast alles speichert, was du willst. In Zeile 11 übergeben wir diese Variablen an installierte Bibliothek und speichern all das wieder in einer Variablen mit dem Namen api. Zuletzt sagen wir dann in Zeile 12, dass unser Text mit den Zugangsdaten verttwittert werden soll.

Wenn du alles richtig gemacht hast, hast du deinen ersten Bot gebaut! Gratulation. Natürlich ist der noch ein wenig dumm und muss momentan noch per Hand geändert werden.

Wen du dich jetzt fragst warum wir diese ganzen Variablen genau in Zeile 6 bis 9 definiert haben, liegt das daran das wir die Twitter API benutzten. Eine API gibt verschiedenen Programmen die Möglichkeit mit einander zu Kommunizieren und Daten mit einander auszutauschen. Doch damit sich Twitter wirklich sicher ist, das es sich dabei auch um uns und um unsere angemeldete App handelt, müssen wir diese Daten angeben. Es quasie ein Login für unser Programm.

Zufallssätze

Mit dem Zufall ist es immer so eine Sache und niemals kannst du wirklich vorhersagen, was der Computer jetzt für ein Zufall ausspuckt. Genau deswegen werden wir unseren Bot damit jetzt etwas schlauer machen! Dafür musst du zwei neue Dinge in Python3 wissen. Eine Liste ist ähnlich wie eine Variable, kann aber mehrere Werte auf einmal speichern. Jeder Wert bekommt eine Zahl zugewiesen. Es wird beim Erstellen immer einmal durchgezählt und weil alles andere auch total unlogisch wäre, fängt die Zählung mit einer 0 an. Mit der Python Bibliothek random und der Funktion random.randint(startZahl, endZahl) kannst du einfach Zufallszahlen erzeugen.

nano twitter.py[/bash-s]
from twython import Twython
import random

tweet = ["Guten Morgen!", "Und dieses Wetter...", "Schöner Tag heute"]

# Hier musst du deine Daten einfügen!
apiKey = 'zzLIttB3mCWxxxxxxxxx'
apiSecret = 'BdeDNxxxxxxxxxxxx’
token = '4149497362-xxxxxxxx'
tokenSecret = 'iqAcas3xxxxxxx'

api = Twython(apiKey,apiSecret,token,tokenSecret)

zufallsZahl = random.randint(0, len(tweet)-1)
api.update_status(status=tweet[zufallsZahl])
python3 twitter.py

Vieles hat sich nicht geändert. Am Anfang haben wir noch die Zufallsbibliothek mit importiert. Anstatt einer Variablen gibt es jetzt eine Liste mit drei verschiedenen Inhalten. Diese sind, wie gesagt, nummeriert und können mit tweet[nummierung] aufgerufen werden. Dadurch können wir auch ganz einfach einen zufälligen Wert in einer Liste ausgeben. Diese Zufallszahl erzeugen wir dann auch am Ende mit random.randint(0, len(tweet)-1). Dort kommt es zu einer neuen Besondertheit. Um die Zufallszahl zu erzeugen, müssen wir wissen, wie groß diese maximal sein darf. Wie viele Elemente eine Liste hat, können wir mit der Funktion len() herausfinden. Da aber die Liste intern bei Zählung mit 0 anfängt müssen wir die gesamte Anzahl aller Elemente noch minus 1 rechnen. Schon sind wir fertig und haben einen Bot der etwas schlauer wirkt!

Wenn du jetzt dein Programm ausführst, sollte jedes Mal ein anderer Text erscheinen. Aber nach ein paar Versuchen wirst du vermutlich diese Fehlermeldung bekommen.

268.png

Desn Twitter findet es nicht so toll, wenn sich dein Bot immer und immer wiederholt. Deswegen kannst du kurz nacheinander nicht den gleichen Inhalt vertwittern. Bei drei Elementen ist es statistisch sehr wahrscheinlich, dass sich die Inhalte schnell wiederholen. Eine Möglichkeit wäre einfach, jede, Tweettext noch eine Zufallszahl anzuhängen.

Dazu änderst du einfach folgende Zeile:

text = tweet[zufallsZahl]+str(random.randint(0,31415))
api.update_status(status=text)

Jetzt wird Twitter zwar nicht mehr meckern, aber deine Follower wird das wohl nicht so viel interessieren. Ein weiteres nerviges Problem ist, dass momentan immer noch die Programme per Hand ausgeführt werden müssen.

Zitate Twittern

In diesem Schritt werden wir aus einer Textdatei immer eine Zeile mit einem Zitat twittern lassen. Damit du das nicht alles abschreiben oder dir alles ausdenken musst, sind wir für dich schon mal durch das ganze Internet gesurft und haben eine kleine Beispiel Datei herausgesucht. Du kannst diese mit folgendem Terminal Befehl einfach herunterladen:

wget jpkit.eu/tw/morgens.txt

Wenn du jetzt ls in deinem Terminal eingibst, solltest du dort die Datei morgens.txt finden.

Dann mal ab zu unserem Python Programm

nano twitter.py
from twython import Twython
import random

zitateDatei = open('morgens.txt')
zitate = zitateDatei.readlines()
zitateDatei.close()

# Hier musst du deine Daten einfügen!
apiKey = 'zzLIttB3mCWxxxxxxxxx'
apiSecret = 'BdeDNxxxxxxxxxxxx’
token = '4149497362-xxxxxxxx'
tokenSecret = 'iqAcas3xxxxxxx'

api = Twython(apiKey,apiSecret,token,tokenSecret)

zufallsZahl = random.randint(0, len(zitate)-1)
api.update_status(status=zitate[zufallsZahl])

In Zeile 4 öffnen wir unsere Textdatei mit der simplen Funktion open() und dann den Pfad zur Datei. Wenn du diese woanders gespeichert hast, musst du natürlich einen anderen Pfad angeben. Wenn wir diese Funktion aufrufen, bekommen wir ein File Objekt und speichern das in zitateDatei. Doch mit diesem File Objekt können wir nicht wirklich etwas anfangen. Bisher haben wir nur mit Listen gearbeitet und deswegen machen wir mit zitateDatei.readlines() einfach aus allen Zeilen eine Liste. Am Ende schließen wir noch das File Objekt und fertig sind wir damit. Jetzt müssen wir natürlich nur noch alles so ändern, dass wir anstatt der Liste tweets jetzt die Liste zitate benutzten. In Zeile 16 erzeugen wir eine Zufallszahl die zwischen 0 und der gesamten Anzahl der Zitate. Jedes Zitat ist ein Element in der Liste. Das heißt wenn du willst kannst du einfach die die Liste ergänzen oder Zitate die dir nicht gefallen entfernen!

Und jetzt gibt es noch Hausaufgaben von unserem @jp_norbert!

Mögliche Projekte wären:

  • Mithilfe von Cronjobs deine Tweets Timen
  • Deinen Pi mithilfe eines Buttons Twittern lassen
  • Oder wie wärs dein Zimmer mit dem Internet zu verbinden?

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!