Deinen eigenen Twitter-Bot programmieren
Twitter ist ein total toller Kurznachrichtendienst. Wir von Jugend Programmmiert und die IT-Talents 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 (oder ein anderer Linux Computer).
Zum Programm
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
Twitter Einrichten
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
Dann ist es noch wichtig, dass du deine Handynummer hinterlegst und bestätigst. Ansonsten lässt dich Twitter keinen eigenen Bot anlegen…
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.
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.
Twitter App einrichten
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”)
Die nachfolgenden Felder kannst du natürlich frei wählen, außer du willst auch einen Bot für deinen Norbert bauen 😉
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).
Für unser Python Programm sind nachher vier Dinge wichtig: API Key, API Secret, Access Token und 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.
(Auch wenn wir es super finden, dass ihr alle einen Bot für Norbert erstellt, haben wir trotzdem mal die letzten Zeichen weggemacht.)
Hello Tweet
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 Pythondatei
$ nano hello_tweet.py
mit folgendem Inhalt:
from twython import Twython
tweet = "Hello World!"
#Hier musst du deine Daten einfügen!
apiKey = 'zz LIttB3mCWxxxxxxxxxxxxx'
apiSecret = 'BdeDNQzCOmb2Sb9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
accessToken = '4149497362-1sT75ZIIwGKxxxxxxxxxxxxxxxxxxxxxxxxxxx'
accessTokenSecret = 'iqAcas3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
api = Twython(apiKey,apiSecret,accessToken,accessTokenSecret)
api.update_status(status=tweet)
Dann führe das Skript aus:
$ python3 twitter.py
Wenn du alles richtig gemacht hast, ist der Tweet jetzt gepostet und sollte in etwa so aussehen:
Aber wenn du nicht genau die Zugangsdaten benutzt hast, die dir angezeigt wurden, dann könnte so eine Fehlermeldung bei dir im Terminal erscheinen:
Hier wird eine 401 Fehlermeldung ausgegeben. Diese steht immer dafür, dass du kein Recht hast, diese Seite zu besuchen.
Als Erklärung: zuerst müssen wir die neu hinzufügte Bibliothek einbinden. Danach speichern wir die andere Werte als Variablen ab. Variablen sind wie eine Box, bloß dass es diese Box nur auf dem Computer gibt und fast alles speichert, was du willst.
Danach übergeben wir diese Variablen an unsere hinzufügte Bibliothek und speichern all das wieder in einer Variablen mit dem Namen api. Zuletzt sagen wir dann, dass unser Text verttwittert werden soll. Wie dir jetzt hoffentlich schon aufgefallen ist, haben wir den Text für den Tweet vorher auch schon in einer Variable gespeichert.
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. Im nächsten Blogpost geht es dann mehr zur Sache und dein Bot wird deutlich schlauer werden.
Den Twitter Bot mit DHT11 noch schlauer machen
Mit mit dem Raspberry Pi haben wir die Möglichkeit unsere Umwelt genausten zu vermessen und aller Welt das mitzuteilen! Deswegen brauchst Du für diese Einheit nicht nur einen Raspberry Pi, sondern auch ein DHT11. Das ist ein Lufttemperatur- und Luftfeuchtigkeitssensor. Zuerst wollen wir aber ein wenig mit dem Zufall experimentieren!
Zufallssätze
Mit dem Zufall ist es immer so eine Sache und niemals kannst du wirklich vorhersagen, was der Computer jetzt für einen Zufall ausspuckt. Genau deswegen werden wir unseren Bot damit jetzt etwas schlauer machen! Dafür musst Du zwei neue Dinge zu 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
from twython import Twython
import random
tweet = ["Guten Morgen!", "Und dieses Wetter...", "Schöner Tag heute"]
# Hier musst du deine Daten einfügen!
apiKey = ' LIttB3mCWXXXXXXXXXXXXXXXXXXXXX'
apiSecret = 'BdeDNQzCOmb2Sb98irBiXXXXXXXXXXXXXXXXXXXXXXX'
accessToken = '4444444444444-1sT75ZXXXXXXXXXXXXXXXXXXXXXXXXXXX'
accessTokenSecret = 'iqAcas3AAmsjXXXXXXXXXXXXXXXXXXXXXXXXXXX'
api = Twython(apiKey,apiSecret,accessToken,accessTokenSecret)
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 Besonderheit. 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.
Denn 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 jedem Tweettext noch eine Zufallszahl anzuhängen.
Dazu änderst Du einfach folgende Zeile:
api.update_status(status=tweet[zufallsZahl]+str(random.randint(0,31415)))
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.
Cronjobs
Mit Cronjobs werden Terminalbefehle immer und immer wieder ausgeführt. Hört sich doch perfekt für unseren Bot an, oder? Der Raspberry Pi mit Raspbian machen es uns sehr einfach, einen neuen Cronjob anzulegen.
nano crontab -e
Ganz unten (alle Zeilen, die mit # anfangen, sind Kommentare und werden deswegen ignoriert) kannst Du dann einen neuen Cronjob anlegen. Natürlich ohne #!
Dabei steht jeder Stern für eine Zeiteinheit.
1 | 2 | 3 | 4 | 5 |
Nach dem Neutart | Minuten 0-60 | Stunden 0-24 | Tage im Monat 0-31 | Monate 0-12 |
Das heißt, wenn wir jeden Tag um 7:15 etwas Twittern wollen, muss das so aussehen:
15 7 * * * sudo python3 /home/pi/Wecker.py
Zitate Twittern
Wir können jetzt zu jedem beliebigen Zeitpunkt unseren Bot anweisen, etwas zu twittern. Aber das bringt uns mit unseren bisherigen Beispielinhalten nicht wirklich weiter. Deswegen werden wir im nächsten Schritt 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 http://codetrainer.de/content/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 müsst ihr eure Daten einfügen!
apiKey = 'LIttB3mCWXXXXXXXXXXXXX'
apiSecret = 'BdeDNQzCOmb2Sb9XXXXXXXXXXXXXXXXXXXXXXXX'
accessToken = '444444444444-1sT7XXXXXXXXXXXXXXXXXXXXXXXXXXX'
accessTokenSecret = 'iqAcas3AAmsjF4XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
api = Twython(apiKey,apiSecret,accessToken,accessTokenSecret)
zufallsZahl = random.randint(0, len(zitate)-1)
api.update_status(status=zitate[zufallsZahl])
In Zeile 4 öffnen wir unsere Textdatei mit dem simplen Programm open(), welchem wir als Parameter den Pfad zur Datei übergeben. 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 aus der Liste tweets jetzt die Liste zitate benutzten. Und fertig ist der etwas schlauere Twitter Bot. Mit dem Cronjob kann dieser jetzt auch genau dann twittern, wann Du es dir wünscht.
Rückmeldungen