Twitter analytisch aufbereiten
Dass sich Twitter bei Privatpersonen, Unternehmen, Organisationen und Massenmedien durchgesetzt hat, ist unstrittig. Die gewaltige Datenbasis birgt dabei großes Potenzial – was liegt näher, als die Beiträge systematisch in Echtzeit zu analysieren, um frühzeitig Trends aufspüren zu können? Das Streaming-API bietet geeignete Möglichkeiten für Entwickler.
- Thomas Pohl
Dass sich Twitter bei Privatpersonen, Unternehmen, Organisationen und Massenmedien durchgesetzt hat, ist unstrittig. Die gewaltige Datenbasis birgt dabei großes Potenzial – was liegt näher, als die Beiträge systematisch in Echtzeit zu analysieren, um frühzeitig Trends aufspüren zu können? Das Streaming-API bietet geeignete Möglichkeiten für Entwickler.
Der Artikel beschreibt, wie Entwickler aus .NET heraus Twitters asynchrones Streaming-API aufrufen können, wobei auch das dafür erforderliche OAuth-Protokoll näher erklärt wird, das zur Autorisierung des Requests von Twitter für die meisten APIs verbindlich vorgeschrieben ist. Ein einfaches Beispiel zeigt die notwendigen Schritte auf. Unter anderem werden die im JSON-Format erhaltenen Nachrichten mithilfe der Klasse DataContractJsonSerializer, die ab .NET 3.5 verfügbar ist, deserialisiert. Zuletzt folgt ein Überblick über die Verfahren, mit denen sich die Nachrichten für analytische Zwecke aufbereiten lassen.
Ran an den Speck: Grundlegende Daten
Twitter liefert zunächst eine Reihe einfacher Kennzahlen zu seinen Nutzern, die sich für eine analytische Betrachtung anbieten. Da ist zunächst die Anzahl der Follower, von der man annehmen darf, dass sie zu einem gewissen Grad die Relevanz eines Nutzers in seinem Themenkreis widerspiegelt. Frei nach dem Motto: "Wer nur Unsinn verzapft, dem folgt man nicht."
Auch die Anzahl der Retweets, also der von Followern erneut geteilten Beiträge ist interessant, da sie Rückschlüsse auf die Popularität eines bestimmten Themas zulässt und damit auf die Signifikanz des ursprünglichen Tweets.
Weitere mögliche Kennzahlen sind natürlich auch die Zahl der Direktnachrichten zwischen zwei Teilnehmern, die Dichte an Konversationen mit anderen Twitter-Nutzern allgemein oder auch die Entscheidung, ob die eigenen Tweets öffentlich oder privat geteilt werden.
Das Twitter-API
Nach eigener Aussage werden bei Twitter pro Tag mehr als 200 Millionen Tweets über das Netzwerk versendet. Einen Zugang zu diesen Daten bietet das Unternehmen über ein öffentliches API an, genauer gesagt sind es zwei Schnittstellen, über die sich ein Entwickler Zugriff verschaffen kann. Das REST-API (zu dem auch das Search-API enthält) und das Streaming-API.
Die Schnittstellen basieren auf HTTP – um Methoden aufzurufen, die Daten lesen, verwendet man einen GET-Request, während Methoden, die Daten übertragen oder ändern, einen POST-Request erfordern. Mit Ausnahme des Streaming-APIs versuchen die Programmschnittstellen konform mit den Designprinzipien des Representational State Transfer (REST) zu sein. An Datenformaten bietet Twitter hier zurzeit XML, JSON, RSS und Atom an, wobei nicht jede Methode alle Formate unterstützt. Die Dokumentation enthält hier genauere Angaben.
Rund um das Streaming-API
Twitters Streaming-API ist aus verschiedenen Gründen am besten für eine Auswertung der Tweets geeignet – die Schnittstellen sind für datenintensive Anwendungen konzipiert, die diese Datenmengen übertragen und zeitnah auswerten sollen. Das API benötigt eine langlebige HTTP-Verbindung zwischen Anwendung und dem Twitter-Server und stellt eine Art Push-Version der Twitter-Suche dar. Es gibt dem Entwickler die Möglichkeit an die Hand, fast in Echtzeit mit einem Prädikat auf die öffentlichen Tweets aller Usern zuzugreifen und diese nach verschiedenen Kriterien zu filtern, wie nach der User-ID, Schlüsselwörtern oder geographischen Daten. Um die Vielzahl der eintreffenden Nachrichten verarbeiten zu können, empfiehlt es sich, die empfangenen Tweets vor einer analytischen Auswertung zunächst in einer Datenbank zu speichern. Das hat auch den Vorteil, dass man die Daten zeitabhängig auswerten kann und so den zeitlichen Verlauf, zum Beispiel in Relation zu Ereignissen erfassen kann, was später Rückschlüsse auf die Entwicklung eines Themas zulässt. Die Antworten sendet Twitter im JSON-Format (es ist kompakter als XML und reduziert damit das Datenvolumen). Das Parsen der in JSON formatierten Nachricht gestaltet sich recht einfach, da jede Zeile ein einzelnes Objekt enthält.
Nutzerströme
Für die Beispielanwendung soll das User-Stream-API zum Einsatz kommen. Es benötigt eine gesicherte HTTPS-Verbindung und eine Berechtigungsprüfung mit OAuth. Die zugeordnete Resource ist https://userstream.twitter.com/2/user.json. Ein User Stream enthält zunächst die Liste der befreundeten Nutzer, sie soll in dieser Anwendung allerdings nicht abgefangen werden, um das Beispiel möglichst einfach zu halten. Stattdessen soll der Fokus auf Tweets liegen. Die Abbildung 1 zeigt das Datenmodell für die zu erfassenden Nachrichten. Um den eingehenden Datenstrom korrekt zu deserialisieren, ist die Klasse TwitterStatus mit dem DataContract- Attribut dekoriert. Ein DataContract ist, wie der Name schon sagt, eine Vereinbarung zwischen einem Client und einem Serviceanbieter und beschreibt, welche Daten ausgetauscht werden.
Implementierungssprache ist C#. Beim Parsen der Nachricht ist darauf zu achten, dass durchaus neue Attribute hinzukommen können. Eine besondere Bedeutung hat das entites-Attribut: In einem Tweet können andere User erwähnt werden, aber auch URLs und weitere Entitäten. Um diese Informationen zu extrahieren, ist es nicht erforderlich, den Text zu parsen, die Informationen lassen sich über das entities-Attribut ermitteln.