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.

twitter_register

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.

twitter_allow_deny

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


 
 
 

3 Kommentare zu “Twitter, Twitter4J und OAuth”

  1. Twitted by gniwerg
    12. Januar 2010 um 16:42

    [...] This post was Twitted by gniwerg [...]

  2. Social Media Development » Authentication mit Facebook Connect
    21. Februar 2010 um 00:20

    [...] Facebook Freunde mit der facebook-java-api Twitter, Twitter4J und OAuth [...]

  3. Social Media Development » Facebook Freunde mit der facebook-java-api
    21. Februar 2010 um 00:21

    [...] Authentication mit Facebook Connect Twitter, Twitter4J und OAuth [...]

Kommentar abgeben:

Sie müssen angemeldet sein um Kommentare abgeben zu können.


  • Seiten