Really simple Twitter bot for educational purposes, written in Python, continually tested with Travis CI, deployed on Heroku.
Der Bot benötigt Zugang zu einem Twitter-Account
Der Bot benötigt für den Zugriff auf Twitter API keys und tokens (statt Username und Passwort). Diese Token sind, wie Passwörter, geheimzuhalten. Alles, was du im GitHub-Repository hochlädst ist öffentlich!
Create New App
http://hpi.de
), "Callback URL" kann leer bleiben.Consumer Key
und Consumer Secret
.Access Token
und Access Token Secret
abgelesen werden.Wir haben bereits einen Bot vorbereitet (https://github.com/hpi-swt2-exercise/py-twitter-bot, dieses Repository).
Um die Dateien lokal zu bearbeiten und die Verbindung zu Github herzustellen, muss das Repository auf deinen Rechner mit git "geklont" werden.
Grundsätzlich kann git entweder über die Kommandozeile (cmd
) oder mit einer grafischen Oberfläche (GUI) nutzen.
Auf den Rechnern ist die GUI "GitExt" installiert (falls ihr auf eurem eigenen Windows-Rechner Git benutzen möchtet, empfehlen wir TortoiseGit).
git clone https://github.com/DEIN_ACCOUNT/py-twitter-bot
, oder über das Kontextmenü im Windows-Explorer (Rechtsklick -> GitExt clone)
das Projekt klonen.Alle Abhängigkeiten des Twitter-Bots, d.h. aller Code aus Bibliotheken, sind in einer requirements.txt
festgehalten. Diese müssen auf euren Rechnern installiert sein, damit der Bot funktioniert.
script
Ordner liegt eine requirements.bat
Datei, die die Abhängigkeiten unter Windows installiert. Ihr könnt es durch Doppelklick ausführen, oder per Kommandozeile: C:\Python27\python.exe <Pfad zum Repo>\requirements.bat
.Kopiere die Datei credentials.example.py
und nenne die Kopie credentials.py
. Zu deiner Sicherheit ist das Repository bereits so konfiguriert, dass diese Datei nicht hochgeladen wird.
Trage hier die Twitter Access Keys und Tokens aus Schritt 1.2 ein.
Nun kannst du das Programm twitter_bot.py
in der "IDLE" Umgebung öffnen (Rechtsklick -> "Edit with IDLE"
). IDLE ist eine Programmierumgebung für Python, der Programmiersprache des Bots.
Das Programm kann mit F5 gestartet werden.
Die Ausgabe enthät einen Link auf den soeben gesendeten Tweet. Auf Twitter sollte ein Tweet erscheinen, der die aktuelle Uhrzeit enthält.
Der Bot tweetet im Moment die Uhrzeit immer nach demselben Schema: "It is HH:MM:SS on a DAY (DD-MM-YYYY)." Wenn du möchtest, ändere das Format der Uhrzeit, z.B. mit dem Names deines Bots.
tweet_text.py
in der IDLE und ändere den Inhalt der Variable text
(Zeile 22), z.B. intext = berlin_time.strftime("Der HPI-Schülerkolleg Bot sagt: %H:%M:%S! %A (%d-%m-%Y).")
twitter_bot.py
aus (wiederum mit IDLE und F5) und schaue nach, ob der Bot nun anders twittert.Als nächstes möchten wir Continuous Integration für das Projekt anlegen.
Wenn du das nächste mal eine Änderung "push"st (auf den Server bei Github überträgst), wird Travis dein Projekt automatisch erstellen. Um jederzeit den Build-Status sehen zu können, kannst du eine Badge auf deiner Projekt-Seite einbinden.
README.md
in deinem Projekt.Rechtsklick -> GitExt Commit
) zeigt die welche Änderungen du vorgenommen hast (siehe 1 und 2).Nach dem Commit kannst du die Änderung pushen und auf der Travis-Seite beobachten wie dein Projekt gebaut wird. Nachdem der Vorgang erfolgreich abgeschlossen wurde, kannst du die Projektseite auf Github neu laden. Die Badge sollte jetzt grün erscheinen.
Damit du deinen Twitter-Bot nicht immer per Hand ausführen musst, möchten wir ihn jetzt auf Heroku deployen. Heroku ist eine Plattform auf der Code kontinuierlich auf Servern ausgeführt werden kann.
New
und Create new app
und erstelle eine neue Anwendung.Deploy
wählst du “Github” als “Deployment Method”.Auch auf Heroku muss der Bot wissen, wie er sich bei Twitter anmelden kann. Damit die geheimen Daten nicht in einer Datei gespeichert werden müssen, kannst du sie direkt in Heroku konfigurieren.
Settings
, klicke auf Reveal Config Vars
und trage dort die 4 Access Keys / Tokens des Bots ein.Resources
und aktivierst dort den Clock-Prozess.Die logs, d.h. die Nachrichten, die der Bot schreibt, können im Heroku-Interface nachgelesen werden. Hier kannst du überprüfen, ob der Bot erfolgreichen starten konnte. Falls du noch einen Twitter-Account hast, schreibe ihm doch einfach mal “hi!”. In spätestens 10 Minuten solltest du eine Antwort bekommen.
Die verbleibende Zeit kannst du nutzen, um den Funktionsumfang deines Bots zu erweitern.
Öffne dazu die tweet_text.py
in der IDLE. Tipp: wenn du den Bot testen möchtest, ohne jedes mal einen neuen Tweet zu senden, drücke F5 um die Python Shell zu öffnen.
Mit idle_text()
und reply({'text': 'hi!', 'user': {'screen_name': 'Foo'}})
kannst du die Funktionen direkt testen.
Mit Alt + n und Alt + p musst du die Aufrufe nicht jedes mal neu schreiben.
Ein Cheatsheet für Python ist hier zu finden: link
Funktionen um mit Strings zu arbeiten gibt es hier
Natürlich kann der Bot statt nur mit der Uhrzeit zu antworten auch beliebige andere Dinge tweeten. Insbesondere sollte er vielleicht mit der Außenwelt kommunizieren um weitere Daten zu erhalten. Solche Schnittstellen, die mit Programmen einfach nutzbar sind, heißen APIs (Application programming interface). Zum Beispiel könnten Chuck Norris Witze abgefragt und getweetet werden:
from requests import get
# Some more ideas: https://www.programmableweb.com/category/humor/api
data = get('https://api.chucknorris.io/jokes/random').json()
joke = data['value']
print joke
Möglicherweise sollte der Bot nicht immer nach demselben Schema tweeten, sondern zufällig unterschiedliche Text tweeten.
Dazu kann das random
Modul von Python verwendet werden. Beispiel:
import random
# random() returns a floating point number in the range [0.0, 1.0)
if random.random() > 0.5:
print('GROSS')
else:
print('klein')