Twitter, Twitter4J und OAuth
Twitter4J ist eine Java Library, mit der man auf die API von Twitter zugreifen kann. Die ersten Gehversuche schafft man mit der Dokumentation auf der Webseite ganz gut. Gibt man die eigenen Benutzerdaten des Twitteraccounts im Quelltext an, kann man schon auf einige Daten zugreifen.
Der folgende Quelltext holt die letzten Tweets der Friends-Timeline:
Twitter twitter = new Twitter("gniwerg","geheim");
List<Status> statuses = twitter.getFriendsTimeline();
System.out.println("Showing friends timeline.");
for (Status status : statuses) {
System.out.println(status.getUser().getName() + ":" +
status.getText());
}
Die Dokumentation über den OAuth Support ist aber leider etwas knapp gehalten. OAuth ist eine Authentifizierungsmethode, bei der eine Anwendung Zugriff auf die Daten eines Benutzers (z.B. die von Twitter) bekommt, ohne das der Benutzer seine Anmeldedaten (z.B. Twitter Benutzername und Kennwort) angeben muss.
Die Twitter API unterstützt OAuth und ermöglicht, dass sich Anwendungen bei den Benutzern registrieren und lesenden und auch schreibenden Zugriff auf den Twitter Account bekommen, ohne das der Benutzer seine Zugangsdaten offen legen muss.
Ich möchte nun anhand von Struts und Twitter4J zeigen, wie das funktioniert. Der Artikel Writung Your First Twitter Application with OAuth beschreibt das zwar anhand von php, zeigt aber ganz anschaulich, wie die Authentifizierung in der Theorie abläuft.
1: Die Anwendung bei Twitter registrieren
Zuerst muss man seine Anwendung bei Twitter registrieren. Dazu geht man bei Twitter in seinen Account unter Connections und klickt auf den etwas versteckten Link auf der rechten Seite:
Developers can edit the registration settings for their applications here.
Wichtig ist der Punkt Application Type. Dort wählt man Browser und Twitter verlangt eine Callback URL. Dort gibt man den Link an, auf die Twitter den Benutzer nach der Zugriffsgewährung leiten soll. Später schreibe ich noch etwas zu diesem Punkt, der bei mir etwas umständlich war.
Nach der Registrierung erhält man zwei Schlüssel, einen Consumer Key und ein Consumer Secret. Beide brauchen wir später noch für die Entwicklung.
2. Zugriff gewähren
Nun kommen wir zur eigentlichen Entwicklung. Wir müssen dem Benutzer einen Link anbieten, mit dem er die Anwendung bei Twitter registriert. Dazu holt man sich mit Hilfe des Consumer Key und Consumer Secrets eine Authentifizierungs-URL:
HttpSession session = request.getSession();
Twitter twitter = new Twitter();
twitter.setOAuthConsumer(ConsumerKey, ConsumerSecret);
RequestToken requestToken = twitter.getOAuthRequestToken();
String token = requestToken.getToken();
String tokenSecret = requestToken.getTokenSecret();
session.setAttribute("token", token);
session.setAttribute("tokenSecret", tokenSecret);
String ouathUrl = requestToken.getAuthorizationURL();
request.setAttribute("ouathUrl", ouathUrl);
} catch (TwitterException e) {e.printStackTrace();}
Über
requestToken.getToken();
und
requestToken.getTokenSecret()
bekommt man eindeutige Tokens für die Anwendung. Ich lege sie für den späteren Gebrauch in die Session. Man kann sie auch abspeichern, da sie für die Anwendung eindeutig sind.
Die Authentifizierungs URL übergibt man an eine jsp:
<a href="<bean:write name='ouathUrl'/>">Bei Twitter anmelden</a>
Der Link öffnet dann die folgende Seite, und der Benuter kann der Anwendung Zugriff gewähren.
Klickt man Allow bringt Twitter den Benutzer zurück zu der URL, die man bei der Registrierung unter Callback URL angegeben hat.
3. Zugriff auf die Twitter Daten des Benutzers
Twitter bringt uns nun unter der Callback URL auf eine Action-Klasse, die Zugriff auf die Daten des Benutzers erhält:
HttpSession session = request.getSession();
String token = (String)session.getAttribute("token");
String tokenSecret = (String)session.getAttribute("tokenSecret");
Twitter twitter = new Twitter();
twitter.setOAuthConsumer(ConsumerKey, ConsumerSecret);
AccessToken accessToken = twitter.getOAuthAccessToken(token, tokenSecret);
twitter.setOAuthAccessToken(accessToken);
String accessTokenUser = accessToken.getToken();
String accessTokenSecretUser = accessToken.getTokenSecret();
int id = accessToken.getUserId();
User user = twitter.showUser(String.valueOf(id));
System.out.println("Twitter Username: " + user.getScreenName());
Der erste Schritt ist erneut, Twitter die Tokens der Anwendung mitzuteilen.
Anschließend kann man auf die Access Tokens zugreifen. Die Schlüssel accessTokenUser und accessTokenSecretUser sind für jeden Benutzer eindeutig und können abgespeichert werden.
Schließlich hat man dann Zugriff auf den Benutzer und kann z.B. den Benutzernamen ausgeben.
Callback URL
Bei der Entwicklung war es problematisch, dass ich bei der Registrierung der Anwendung bei Twitter keine Callback URL mit http://localhost angeben konnte. Ich habe dort also eine URL angegeben, die auf eine php-Seite auf meinem Webserver verlinkt. Dort mache ich dann eine Weiterleitung zu meiner Entwicklungsumgebung auf dem PC:
Meine Callback URL bei Twitter:
http://www.social-media-development.de/twitteroauth/localhost.php
Die php-Datei localhost.php sieht dann so aus:
<?php
header("Location: http://localhost:8080/mudflat/apps/twitterstats.do?do=getkey");
exit();
?>
Ähnliche Artikel
Authentication mit Facebook Connect
Facebook Freunde mit der facebook-java-api





12. Januar 2010 um 16:42
[...] This post was Twitted by gniwerg [...]
21. Februar 2010 um 00:20
[...] Facebook Freunde mit der facebook-java-api Twitter, Twitter4J und OAuth [...]
21. Februar 2010 um 00:21
[...] Authentication mit Facebook Connect Twitter, Twitter4J und OAuth [...]