Heute habe ich die Messlatte für den Geekfaktor in unserem Büro doch relativ hoch gelegt: Seit einigen Wochen besitze ich einen Twitter-Account um meine Profilneurose und meinen Netzhibitionismus -welch schöner Neologismus- zu befriedigen. Der ursprüngliche Grund war, dass mein Cousin und die Entwickler von QuakeLive twittern. Außerdem kam Marc vor einigen Tagen hinzu.

Wie dem auch sei – bis heute war ich der Meinung, Twitter ist schrott. Was interessiert mich, dass bklynplayboy gerade über das Next Top Model lacht? Die rhetorische Frage beantworte ich mal nicht…

Nach unserem heutigen Kickerspiel im Büro kam mir eine Idee: Warum nicht Twitter als Datenbank nutzen?
Eine konkrete Anwendung hatte ich dafür auch schon. Seit einiger Zeit überlegt das Kicker-Team aus der Firma, ob wir über unsere Spiele Statistik führen. Bisher habe ich mich immer davor gescheut, extra eine Datenbank dafür anzulegen und irgendetwas mit PHP oder Java zusammenzufrickeln. Das ist schließlich 0815 und auf solchen Krams habe ich keine Lust mehr.
Kommen wir zuerst zur Analyse-Phase: Ein Kickerspiel besteht aus mehreren Sätzen und hat immer zwei Teams mit je maximal zwei Spielern. Ein Spiel wird immer mit einem Sieg beendet – unentschieden gibt es nicht. Zu einem Spiel kann man noch ein kurzes Statement abgeben und außerdem muss der Tweet gehasht werden und das war es. In einem Twitter-Post kurz zusammengefasst würde das so aussehen:

CKL:CST 5:4 – Prokuristen können nicht kickern #büro #kickern

CKL und CST sind die Benutzerkürzel der Spieler, Zwei Spieler werden mit Komma getrennt (CKL,MBI:CST,FWE).
An sich ist das Datenformat völlig egal. Theoretisch könnte man für so etwas auch JSON benutzen. Aber egal.

In der nächsten Iteration – ja, mein Nachmittag hatte etwas von Agiler Entwicklung – ging es daran, die richtigen Einträge zu finden. Die API von Twitter beschreibt das recht gut und somit erledigt sich die Suchanfrage nach den Ergebnissen mit dem Aufruf von http://search.twitter.com/search.json?q=from%3Aschakko+%23kickern+%23büro wie von alleine. Zur Info: Es wird nach den Hash #kickern und #büro vom Benutzer “schakko” gesucht. Die Datensätze werden im JSON-Format zurückgegeben.

Damit hatte ich zwei meiner drei Fragen geklärt: Wie sind die Daten zu speichern, wie finde ich die Daten, die ich brauche. Nun folgte für mich der interessanteste Part: Wie verbinde ich mich mit der API von Twitter? Wie schon oben geschrieben, hatte ich auf PHP/Java-Gefrickel keine Lust. Meine Anwendung sollte schließlich nur die Matches der vergangenen Wochen anzeigen und für jeden Spieler und jede Team-Kombination die Statistik anzeigen (gewonne Matches, verlorene Matches, Erfolgsquote). Eine Proxy-Klasse (Service bildet die End-API nach und liegt auf dem selben Server) oder lokaler Routing-Service (Service tunnelt die Anfragen an die End-API) in einer serverseitigen Programmiersprache zu erstellen, wäre Overkill gewesen. Nun wusste ich aber, dass jQuery seit einiger Zeit Cross Domain AJAX beherrscht. Damit ist es über JSONP möglich, AJAX-Anfragen an Hosts zu stellen, die nicht auf dem Server liegen, von wo die JavaScript-Applikation ausgeführt wird. Mit Cross Domain Requests werden Proxy-Klassen oder Routing-Services also unnötig.

Gesagt getan, meine Zutaten für meine Kicker-Applikatin waren gefunden: Twitter durch die Hashtags als semantische Datenbank, jQuery als Framework und somit JavaScript als Programmiersprache und HTML als Ausgabeformat.

An der gesamten Anwendung – inklusive Analyse – programmierte ich knappe 3 Stunden. Mein eigenes Format wandelte ich über eine kurze Regular Expression in die passenden JavaScript-Objekte um.

Der momentane Stand ist, dass die Statistiken in tabellarischer Form mit den obigen Vorgaben pro Spieler oder pro Team dargestellt werden. Wünschenswerte Sachen sind noch:

  • Eintragen der Ergebnisse über ein Formular in der Applikation
  • Sortierung der Tabellen – sollte relativ einfach funktionieren
  • Grafische Auswertung der Statistik anhand von Charts

Diese kleine Anwendung war seit einiger Zeit das agilste und pragmatischste Vorgehen, dass ich an den Tag gelegt habe – weg von alten und zig-mal durchgekauten Pfaden und einfach mal etwas Neues ausprobieren.

I am asking you for a donation.

You liked the content or this article has helped and reduced the amount of time you have struggled with this issue? Please donate a few bucks so I can keep going with solving challenges.


0 Comments

Leave a Reply