Twitterbots & Textgenerierung

Tag 2: Existierende Twitterbots, Technische Grundlagen, Ideensammlung für eigene Projekte

Esther Seyffarth
29.02.-04.03.2016

Existierende Twitterbots

Lotte McNally's Omnibots list

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)
Dieser Bot verhilft euch zu Followern
Dieser Bot ist einsam und sexy
Bot für Reddit-Crossposts

Existierende Twitterbots

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

Technische Grundlagen

  • Wer ist ein Feind von Python 3?
  • Nicht mehr lange!

Vorteile von Python 3 gegenüber Python 2

  • Unicode-Behandlung!!!
  • Dateibehandlung!!!
  • Schnellere Berechnungen!
  • String Formatting!
  • Weniger Seltsamkeiten!
    
    >>> 7 < "a"
    True
    >>> 7777777777 < "a"
    True

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!