Twitter als Plattform
Twitter wird von den meisten Anwendern als reiner Dienst wahrgenommen. Über eine einfache Webseite hinterlässt ein Nutzer mit 140 Zeichen eine Nachricht, die dann von seinen "Abonnenten" gelesen werden kann. So weit, so gut. Wie wir bereits in der letzten Kolumne gezeigt haben, kann Twitter aber deutlich mehr. Die Integration von Twitter in ein bestehendes Produkt verdeutlicht, dass Twitter auch als eine Art Plattform zu betrachen ist. Twitter stellt ein HTTP-basiertes API zur Verfügung( hier, hier und hier), das nach und nach ausgebaut wird. Das offene HTTP/REST API ermöglicht eine leichte Einbindung der Plattform in die eigene Anwendung.
JSF – Möglichkeiten für Twitter
Für eine Hochzeit von Twitter und JSF liegt die Programmierung einer (oder mehrerer) Twitter-Komponenten nahe. Mittels einer <corp:myTweets numberOfTweets=“5“ .../ >-Komponente könnten zum Beispiel die letzten fünf Meldungen auf der Startseite der eigenen Firmenhomepage angezeigt werden. Das Entwickeln der JSF-Komponente(n) erfolgt nach dem gängigen Muster: Je eine Klasse für die Komponente und den JSP-Tag sowie eine Klasse für den Renderer der Komponente. Die Komponentenklasse übernimmt dabei die Kommunikation mit dem Twitter API. Diese Rollenteilung hat den Vorteil, dass der Renderer bei Bedarf ausgetauscht werden kann, ohne dass die Kommunikation erneut programmiert werden muss. Die Kommunikation mit Twitter kann wie hier beschrieben mit einfachen JDK-Bordmitteln (HttpURLConnection) oder einem etwas komfortableren REST-Framework stattfinden. Hier bietet sich die Verwendung des Apache-Wink-Projekts an, das neben einer Implementierung des JAX-RS-Standards zusätzlich eine intuitive Clientbibliothek bietet. Zur Realisierung der oben beschriebenen Komponente und somit zum Abruf der letzten fünf tweets eines Accounts benötigt man lediglich ein paar Zeilen:
...String logon = "user:passwd";String encodedLogon = new BASE64Encoder().encode(logon.getBytes());RestClient client = new RestClient();Resource twitter = client.resource("http://twitter.com/statuses/user_timeline.atom?count=5");twitter.header("Authorization", "Basic " + encodedLogon);twitter.accept(MediaType.APPLICATION_ATOM_XML_TYPE);String tweets = twitter.get(String.class);...
Der Aufruf der get()-Methode schickt einen HTTP-GET-Request an Twitter und liefert ein Atom/XML-Dokument zurück. Die Ausgabe kann – in einfacherer Form – als String erfolgen, allerdings bietet sich der Einsatz einer Atom-Bibliothek an, um das XML-Dokument vernünftig zu parsen.
Damit die Marketing- und Vertriebsabteilung des Unternehmens nun auch aus dem eigenen Websystem Meldungen zu Twitter schicken kann, benötigt man eine weitere Komponente, die den Statusupdate entgegen nimmt. Eine solche <corp:inputTweet/>-Komponente nutzt intern einen Validator, damit die 140 Zeichen nicht überschritten werden. Der Code für die Kommunikation mit dem API ist ebenfalls – dank Apache Wink – sehr übersichtlich:
...Resource twitter =client.resource("http://twitter.com/statuses/update.json");twitter.header("Authorization", "Basic " + encodedLogon);twitter.contentType(MediaType.APPLICATION_FORM_URLENCODED_TYPE);twitter.accept(MediaType.APPLICATION_JSON_TYPE);javax.ws.rs.core.MultivaluedMap<String, String> msg =new MultivaluedMapImpl<String, String>();msg.add("status", "Neue Produkte im Online-Shop...");twitter.post(msg);...
Der post()-Methode – die einen HTTP POST an Twitter schickt – übergibt man eine MultivaluedMap, die die für den Aufruf notwendigen Parameter enthält.
Fazit – oder die Frage nach dem Sinn
Twitter stellt neben anderen "neuen" Webdiensten, z. B. Google Map, Blogs oder Wikis, ein weiteres Instrument dar, das an einigen Stellen sehr nützlich sein kann. Das Zusammenspiel von JavaServer Faces und Twitter ist ideal, denn eine JavaServer-Faces-Komponente ist eine gute Möglichkeit, um den Grad der Wiederverwendbarkeit zu erhöhen. Dank des offenen HTTP/REST-Twitter-APIs ist die Integration sehr einfach. Also, fröhliches Twittern!
Links & Literatur
- http://www.germancowboys.de/twitter/3634
- http://blog.twitter.com/2009/03/salesforce-integrates-twitter.html
- http://apiwiki.twitter.com/
- http://apiwiki.twitter.com/Twitter-API-Documentation
- http://twitter.com/twitterapi
- http://incubator.apache.org/wink/
- http://jcp.org/en/jsr/summary?id=311
- http://abdera.apache.org/
- http://apiwiki.twitter.com/Twitter-REST-API-Method%3A-statuses%C2%A0update









