Ich übe gerade, eine Web-App zu erstellen, die versucht, das Twitter-Profil des Benutzers zu lesen, seine Freunde anzuzeigen und sein Bild zu zeigen. Das Code-Beispiel auf der Twitter4j-Website geht:
public static void main(String args[]) thrwos Exception{
Twitter twitter = new Twitter();
twitter.setOAuthConsumer("[consumer key]", "[consumer secret]");
RequestToken requestToken = twitter.getOAuthRequestToken();
AccessToken accessToken = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (null == accessToken) {
System.out.println("Open the following URL
and grant access to your account:");
System.out.println(requestToken.getAuthorizationURL());
System.out.print("Hit enter when it's done.[Enter]:");
br.readLine();
try{
accessToken = requestToken.getAccessToken();
} catch (TwitterException te) {
if(401 == te.getStatusCode()){
System.out.println("Unable to get the access token.");
}else{
te.printStackTrace();
}
}
}
}
Was ich tue, ist in einem Servlet, nennen wir es IndexServlet Ich habe den folgenden Code:
Twitter twitter = new Twitter();
twitter.setOAuthConsumer("[consumer key]", "[consumer secret]");
RequestToken requestToken = twitter.getOAuthRequestToken();
String authUrl = requestToken.getAuthorizationURL()
und dann übergebe ich die authUrl an ein jsp, damit der Benutzer darauf klicken kann. Das funktioniert so aber danach hänge ich schon fest :)
Ich bin mir nicht ganz sicher, wo ich die Rückruf-URL einstellen soll. Sollte ich es auf das gleiche Servlet setzen? Das Problem dabei ist, dass ich dieselben twitter- und requestToken-Variablen haben sollte wie der erste Code mit der main-Methode, damit ich dies tun kann:
accessToken = requestToken.getAccessToken();
Status status = twitter.updateStatus(some argument here);
Aber das Setzen der Callback-URL auf das IndexServlet ruft den Code auf, der den Twitter-Konsumenten einrichtet. Ich könnte wahrscheinlich eine Möglichkeit finden, dies zu umgehen, indem ich ein Flag wie
if (already setup) {
accessToken = requestToken.getAccessToken();
Status status = twitter.updateStatus(some argument here);
}
aber ich denke, das ist unschön.
Was ich versucht habe, ist (unter Verwendung eines zweiten Servlets, das die Callback-Url ist)
-
Ich habe versucht, die Variablen twitter und requestToken in der Sitzung zu speichern, damit ich darauf zugreifen kann, wenn Twitter auf die Callback-URL umleitet, aber anscheinend ist das nicht erlaubt.
-
Ich habe auch versucht, sowohl Twitter als auch RequestToken im Datenspeicher zu speichern, aber letzteres lässt die Speicherung von RequestToken-Typen nicht zu.
Offenbar sind also alle gescheitert. Ich habe mich gefragt, wie man das richtig macht. Danke! :)