Dein letzter Login ist schon eine Weile her.

Bitte überprüfe, ob alle Angaben in Deinem Profil noch aktuell sind.


Bildnachweis: twitter - What are you doing?; Bildausschnitt, by keiyac Lizenz: CC BY 2.0

03.02.2016
von Jugend-Programmiert
in Gastbeiträge von IT-Talenten

Dein eigener (Twitter) Bot (Teil 2)

Im ersten Teil haben wir nur einen kleinen Tweet Bot gebaut, der ohne große Vielfalt die Welt mit Inhalten füllt, aber gerade mit dem Raspberry Pi haben wir die Möglichkeit unsere Umwelt genaustens 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!

Lesezeit: ca. 4 Min.

Bewerten

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.

http://www.jugend-programmiert.com



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
http://www.jugend-programmiert.com



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

Mehr Infos zu Cronjobs findest du im Codetrainer.

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.

Und jetzt gibt es noch Hausaufgaben von unserem @jp_norbert! Sei kreativ und poste doch deine coolen Projekte und/oder schreib uns darüber: bots@jugend-programmiert.com


Diskutiere zu dem Thema in der Community:

Zum Thread: Dein eigener (Twitter) Bot (Teil 2)

Mehr über den Raspberry Pi?

Weitere How-To's:
Haussteuerung mit dem Raspberry
5 nützliche Raspberry Pi Projekte

15% Rabatt auf den Raspberry Pi und Zubehör:
Jetzt Rabatt sichern

IT-Talents ist ein Netzwerk nur für IT'ler. Auf unserer Plattform kannst Du Dich als registriertes Mitglied mit wenigen Klicks auf die Jobs unserer Partnerunternehmen oder auf IT-Projekte für Studierende bewerben. Darüberhinaus führen wir Wettbewerbe durch und vergeben IT-Stipendien.

Jetzt Mitglied werden.

Verwandte Artikel

Dein eigener (Twitter) Bot (Teil 1)

27. Jan 2016 in Gastbeiträge von IT-Talenten

Twitter ist ein total toller Kurznachrichtendienst. Kurz, weil jeder Beitrag inklusive Bilder und Links nur 140 Zeichen…

weiter

Schnell-Login für unsere Mitglieder

Tipp: Halte Dein Profil aktuell.

Lass' uns wissen, falls sich etwas Neues bei Dir ergibt.

Tipp: Vervollständige Dein Profil für noch bessere Karrierechancen.

Bist Du Schüler, Student oder bereits berufstätig? Teile uns Deinen aktuellen Status mit, damit wir Dir sinnvolle Aufgaben anbieten können.

Jetzt Status angeben

Wann stehst Du der IT-Branche zur Verfügung?

Bitte Monat und Jahr angeben.

{{ perspectiveForm.availableFrom.$error.dynamic }}

Neuer Versuch

Wo möchtest Du durchstarten?

{{ location.geolocation.name }}×
Bitte mindestens ein Ort angeben.

Als {{currentUser.status.title}} bist Du bereit für:


Lade Beschäftigungsarten

Bitte wähle den Zeitpunkt, Ort und min. eine Beschäftigungsart aus.

You have voted!
Schliessen
Vote for:
stars
Vote
You have not rated!