Twitterbots & Textgenerierung
Tag 2: Existierende Twitterbots, Technische Grundlagen, Ideensammlung für eigene Projekte
Esther Seyffarth
29.02.-04.03.2016
Existierende Twitterbots
Existierende Twitterbots
- Hier ist immer die Rede von kreativen/"gutartigen" Bots!
- Bots, die uns nicht interessieren:
- "Kauf dir Follower!"
- "Ich bin so einsam und sexy!"
- RedditBots (automatisches Crossposten von anderen Plattformen)
Existierende Twitterbots
- #botALLY ist eine Community, in der die AutorInnen von kreativen Bots sich darüber austauschen und ihre neuen Werke vorstellen
- Viele botALLYs haben eigene Listen auf Twitter, auf denen sie ihre Lieblingsbots sammeln
- Meine Listen:
- Die aktuell umfangreichste Bot-Liste: Omnibots von Lotte McNally
Aufgabe
- Seht euch mithilfe der verlinkten Listen oder des Omnibot-Samplers einige Bots an. Welche Arten von Mechaniken könnt ihr erkennen? Welche Unterschiede gibt es zwischen den Bots? Welcher gefällt euch am besten?
- Stellt nach ca. 15 Minuten einen der Bots vor. Welche Infos über den Bot könnt ihr herausfinden?
- AutorIn
- Programmiersprache
- Ressource/Korpus (Datenquelle)
- Mechanik der Tweets (Wie werden die Tweets erstellt? Nach welchem Zeitplan werden sie gepostet?)
- Welche Interaktionen sind möglich?
- Ist der Programmcode des Bots öffentlich zugänglich?
Einige Arten von Twitterbots
- _ebooks: nach dem Vorbild von @horse_ebooks (was aber kein _ebooks-Bot war)
- Everyword (nach dem Vorbild von @everyword)
- Formulaischer Witz/Spruch mit externer Datenquelle (Knock knock bot, like i like, Barbossa Bot, ParsExToto, ...)
- Lyrik (The Ephemerides, Whispers for the moon, Haiku Bots, ...)
- Unicode Art, Emoji Art (A real river, tiny seas, bot_ideas, ...)
- Spiele (Dungeon Crawler, Minesweeper, Connect 4, Botgle, ...)
- Reply Bot (mit Suche nach bestimmten Keywords)
- Weitere Kategorien?
Technische Grundlagen
- Wer ist ein Feind von Python 3?
- Nicht mehr lange!
Vorteile von Python 3 gegenüber Python 2
Wahl der Pythonversion bei Twitterbots
- Ich verwende gerne deutsche Daten oder Emoji für Twitterbots. Das kann man in Python 2 praktisch vergessen.
- Ich hoste meine Bots auf einem eigenen virtuellen Server, auf dem ich Python 2 und Python 3 installieren kann. Andere Hostingmöglichkeiten wie z.B. fremdorganisierte Webspaces sind hier oft restriktiver.
- Bei rein englischsprachigen Bots ist die Wahl von Python 2 okay.
Werkzeugkasten: Technische Grundlagen
- Ich empfehle PyCharm als Entwicklungsumgebung. Als professionelle IDE speziell für Python hat PyCharm alle Funktionen, die wir hier benötigen, und macht euch das Leben leichter.
- Geany ist an der HHU sehr beliebt, bietet allerdings keinen sinnvollen Python-3-Support.
- Texteditoren zu verwenden und danach im Terminal auszuführen ist eine gefährliche Fehlerquelle.
- PyCharm weiß beinahe schon vorher, was ihr tippen wollt...
Technische Grundlagen: Stringverarbeitung
- String Slicing
- split(), index(), strip(), replace(), upper(), lower(), reverse()
- String formatting: besonders nützlich, wenn man mit Templates arbeitet und einzelne Elemente Schritt für Schritt in den Output einsetzen möchte.
- Für einen Überblick empfehle ich https://pyformat.info/
Technische Grundlagen: Reguläre Ausdrücke
Technische Grundlagen: sqlite3
- Die Besonderheit von SQLite als DBMS ist die Speicherung der gesamten Datenbank in einer einzigen Datei.
- Die Queries sind praktisch identisch mit denen, die wir hier in der Datenbanken-Vorlesung für MySQL lernen.
- Das Pythonmodul sqlite3 bietet ein simples Interface zwischen Python und SQLite, sodass ihr solche Datenbanken für eure Bots nutzen könnt.
Technische Grundlagen: HTML (requests)
- Wir können praktisch jede Webseite als Korpus verwenden, indem wir sie wie in einem Browser öffnen und uns die Daten herauspicken, die wir haben wollen.
import requests
page = requests.get("http://enigmabrot.de/blockseminar_twitterbots/")
print(page.content)
print(page.content.decode("utf8"))
Technische Grundlagen: APIs
- APIs dienen dazu, strukturierte Daten von einem Server anzufordern.
- Typischerweise enthält die Dokumentation einer API eine Übersicht über die Befehle, die man für die Anfragen verwenden kann.
- Für verbreitete API-Endpoints gibt es oft auch Python-Wrapper, also Pakete, die den Zugriff erleichtern.
- Besonders furchtbare API: MediaWiki (Wikipedia, Wiktionary, ...)
- Besonders angenehme API: Wordnik
- Besonders umfangreiche API: ConceptNet
Technische Grundlagen: XML, JSON
- Die meisten APIs geben die Daten entweder in XML- oder in JSON-Format zurück.
- Beide Formate kann man sich ähnlich wie die aus Python bekannten Dictionarys vorstellen.
- Ich empfehle die folgenden Python-Pakete:
tweepy
- tweepy ist das Herzstück aller unserer Bots.
- Das Paket bietet einen komfortablen Zugang zu Twitters API.
- Wenn wir tweepy nicht hätten, könnten wir mithilfe von requests entsprechende POST- oder GET-Requests selbst zusammenbasteln.
- Für Requests mit Authentifizierung (z.B. für den Twitteraccount des Bots) gibt es das Paket requests-oauthlib
Twitter-Account erstellen
- Bevor wir mit tweepy arbeiten können, brauchen wir Twitteraccounts, die wir dann authentifizieren können.
- Wir fangen heute zwar noch nicht mit den Bots an, legen aber schon gemeinsam die Accounts an, um evtl. Probleme noch rechtzeitig lösen zu können.
- Eine Anleitung zum Nachlesen findet ihr hier (Abschnitt "OAuth").
Login mit tweepy
consumer_key = my_config.consumer_key
consumer_secret = my_config.consumer_secret
access_token = my_config.access_token
access_token_secret = my_config.access_token_secret
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
Technische Grundlagen: Übung
- Bearbeitet eine beliebige Anzahl der Übungsaufgaben in beliebiger Reihenfolge, je nach eurem aktuellen Kenntnisstand.
Bot Ethics
- Basic Twitter bot etiquette (von Darius Kazemi)
- Wenn man nicht aufpasst, können Bots das Twitter-Erlebnis der Follower zerstören, z.B. wenn sie...
- Permanent twittern und dadurch keine anderen Tweets mehr sichtbar sind
- Jemanden mit Notifications (egal welcher Art) überfluten
- Inhaltlich verletzend oder rücksichtslos sind
Bot Ethics: Freundliche Bots
Wie kann man vermeiden, dass ein Bot...
- rassistisch ist?
- sexistisch ist?
- Individuen beleidigt?
Bot Ethics: Einige Lösungsansätze
- In einigen Fällen reicht es, eine Blacklist verbotener Wörter anzulegen und jeden Tweet vor dem Posten zu checken. Eine beliebte Library dafür ist iscool (ähnlich und Python-kompatibel: wordfilter).
- In anderen Fällen braucht man einen etwas komplizierteren Mechanismus. Empfehlenswert hierzu: Transphobic Joke Detection (von Darius Kazemi)
- Über einen aus ethischen Gründen geschlossenen Bot-Account: JohnCusackNews is going away
Bot Ethics: Aufgabe
- Beschäftigt euch mit einer der verlinkten Seiten. Sind die geschilderten Mechanismen eurer Meinung nach ausreichend, um Probleme zu vermeiden? Welche zusätzlichen Ideen habt ihr? Sind alle beschriebenen Schritte notwendig? Sind die Mechanismen übertragbar in andere Kontexte (z.B. Prüfung von Pressemitteilungen o.ä.)?
- Müssen deutschsprachige Bots andere Mechanismen verwenden als englischsprachige Bots?
Weitere lesenswerte Artikel über Twitter- und Slackbots
#botIDEA (1/3)
- Bot, der berühmte Zitate den falschen Personen zuordnet
- Bot, der auf Mentions mit Signalwörtern mit einem berühmten Zitat antwortet
- Bot, der Memes nach einer bestimmten Formel erzeugt
- Bot, der deutsche Komposita oder Portmanteaus generiert
- Bot, der Haikus twittert
- Bot, der Emoji-Kunstwerke oder ASCII-Art twittert
#botIDEA (2/3)
- Bot, der Verben stärkt
- Bot, der realistisch wirkende Ortsnamen generiert
- Bot, der in berühmten Zitaten Wörter mit geringer Levenshtein-Distanz austauscht
- Bot, der BILD-Schlagzeilen oder Buzzfeed-Titel generiert
- Bot, der furchtbare Witze nach einem vorgegebenen Muster erzeugt
#botIDEA (3/3)
- Bot, der in Film- oder Buchtiteln jeden Vokal durch den entsprechenden Umlaut ersetzt
- Bot, der Rezepte generiert
- Bot, der Sätze aus Anleitungen von HowTo-Seiten vermischt
- Bot, der den jeweils kürzesten Satz aus zufälligen Wikipedia-Artikeln twittert
- Twitterversion des Sprichwortrekombinators
Ausblick
- Morgen werden wir einige nützliche Datensätze und Korpora besprechen und dann mit der Umsetzung der eigenen Projekte beginnen.
- Hausaufgabe:
- Stelle sicher, dass der Hallo-Welt-Bot bei dir funktioniert.
- Fang an, darüber nachzudenken, welche Art von Bot du gerne selbst umsetzen würdest.
- Wenn sich aus deiner Idee schon technische Fragen ergeben, klären wir sie morgen gemeinsam!