Я занимаюсь созданием веб-приложения, которое пытается прочитать профиль пользователя в Твиттере, показать его / ее друзей и показать его / ее фотографию. Пример кода на сайте Twitter4j выглядит так:
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();
}
}
}
}
То, что я делаю, находится в сервлете, давайте назовем его IndexServlet. У меня есть следующий код:
Twitter twitter = new Twitter();
twitter.setOAuthConsumer("[consumer key]", "[consumer secret]");
RequestToken requestToken = twitter.getOAuthRequestToken();
String authUrl = requestToken.getAuthorizationURL()
и затем я передаю authUrl в jsp, чтобы пользователь мог щелкнуть по нему. Это работает так
далеко, но после этого я уже застрял! :)
Я не уверен, где установить URL обратного вызова. Должен ли я установить его на тот же сервлет?
Проблема в том, что у меня должны быть такие же переменные twitter и requestToken, как в первом коде с методом main, чтобы я мог сделать это:
accessToken = requestToken.getAccessToken();
Status status = twitter.updateStatus(some argument here);
Но установка URL обратного вызова в IndexServlet вызывает код, который настраивает потребителя Twitter. Я мог бы, вероятно, обойти это, используя флаг вроде
if (already setup) {
accessToken = requestToken.getAccessToken();
Status status = twitter.updateStatus(some argument here);
}
но тогда я думаю, что это грязно.
Я попробовал (используя второй сервлет, который является URL обратного вызова)
Я пытался сохранить переменные twitter и requestToken в
сеанс, чтобы я мог получить к нему доступ, когда твиттер перенаправляет на URL обратного вызова, но, видимо, это не разрешено.
Я также пытался сохранить твиттер и токен запроса в хранилище данных, но последнее не позволяет сохранять типы RequestToken.
Так что, очевидно, все потерпели неудачу. Интересно было найти правильный способ сделать это. Спасибо! :)