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
- Falls ein bestehender Account verwendet werden soll: Schritt überspringen.
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!
- Gehe auf https://apps.twitter.com/ und klicke auf
Create New App
- Bei "Website" eine beliebige gültige URL angeben (z.B.
http://hpi.de
), "Callback URL" kann leer bleiben. - Auf der Übersichtsseite der Twitter-Anwendung: Unter dem Tab "Keys and Access Tokens" findest du
Consumer Key
undConsumer Secret
. - Nach einem Klick auf "Create my access token" weiter unten auf der Seite können
Access Token
undAccess Token Secret
abgelesen werden. - Speicher die 4 Schlüssel in einer Text-Datei oder lass das Browser-Tab offen während du weiterarbeitest.
- Falls nicht vorhanden, erstelle einen GitHub-Account auf http://github.com.
Wir haben bereits einen Bot vorbereitet (https://github.com/hpi-swt2-exercise/py-twitter-bot, dieses Repository).
- Mit dem “Fork” Knopf oben rechts kann ein eigene Kopie vom Projekt erstellt werden.
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.
- Unter “Clone or Download” auf der Github-Seite deines Projekts findest du die Git-URL, mit der du das Projekt auf deinen Rechner klonen kannst. (Der Download als Zip reicht nicht!)
- Lege in deinem persönlichen Verzeichnis einen neuen Ordner an.
- In diesem kannst du entweder über den Kommandozeilen-Befehl
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.
- Im
script
Ordner liegt einerequirements.bat
Datei, die die Abhängigkeiten unter Windows installiert. Ihr könnt es durch Doppelklick ausführen.
- Kopiere die Datei
credentials.example.py
und nenne die Kopiecredentials.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.
- Starte das Skript
run_bot
per Doppelklick. - 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." Wenn du möchtest, ändere was der Bot von sich gibt.
- Öffne dazu die
tweet_text.py
in der "IDLE" Umgebung (Rechtsklick -> "Edit with IDLE"
). IDLE ist eine Programmierumgebung für Python, der Programmiersprache des Bots. - Ändere den Inhalt der Variable
text
(Zeile 23), z.B. in
text = "Hallo HPI! Dies ist der Bot NAME"
- Speichere deine Änderungen
- Führe die
twitter_bot.py
aus (wiederum mit demrun_bot
Skript) und schaue nach, ob der Bot nun anders twittert. - Versuche, deine Änderungen zu "committen" (
GitExt commit...
) und wieder nach GitHub zu Übertragen, sodass andere sie sehen können. Du musst deine GitHub-Anmeldedaten eingeben, damit GitHub dich identifizieren kann.
Als nächstes möchten wir Continuous Integration für das Projekt anlegen.
- Gehe dazu auf http://travis-ci.org. Hier benötigst du keinen neuen Account, du kannst dich direkt über dein Github-Konto anmelden.
- Aktiviere automatische Builds für dein Repository.
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.
- Klicke dazu in Travis auf die Badge, wähle als Format "Markdown" aus, und kopiere den Text in die
README.md
in deinem Projekt.
- Commite nun deine Änderung:
- GitExt (
Rechtsklick -> GitExt Commit
) zeigt die welche Änderungen du vorgenommen hast (siehe 1 und 2). - Stage (3) die geänderten Dateien damit die Änderung Teil des Commits ist.
- Trage dann eine Commit-Nachricht ein (4), die die Änderungen zusammenfasst und bestätige den Commit (5).
- GitExt (
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.
- Erstelle dazu einen Account auf http://heroku.com.
- Auf dem Heroku-Dashboard, klicke auf
New
undCreate new app
und erstelle eine neue Anwendung. - Unter
Deploy
wählst du “Github” als “Deployment Method”. - Verbinde deinen Github-Account und wähle das richtige Repository aus.
- Setze das Häkchen bei “Wait for CI to pass before deploy” und klicke auf “Enable Automatic Deploys”.
- Da automatische Deploys erst nach einem Push passieren, kannst du außerdem unter “Manual Deploy” auf “Deploy Branch” klicken um ein deployment (das übertragen des codes zum Server) anzustoßen.
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.
- Gehe auf das Tab
Settings
, klicke aufReveal Config Vars
und trage dort die 4 Access Keys / Tokens des Bots ein.
- Damit der Bot tatsächlich ausgeführt wird, wechselst du nun auf das Tab
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()
undreply({'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')