twitter4j getOauthAccessToken дает исключение

Я пытаюсь получить токен доступа пользователя, используя twitter4j в моем проекте appengine. Мой код ниже

    HttpSession session = req.getSession();
    String tokenCopy = (String) session
            .getAttribute(Constants.TOKEN_SESSION_KEY);
    String tokenSecretCopy = (String) session
            .getAttribute(Constants.TOKENSECRET_SESSION_KEY);

    String oauth_token = req.getParameter("oauth_token");
    //The above is the same as the tokenCopy, verified by printing.
    String oauth_verifier = req.getParameter("oauth_verifier");

    Twitter twitter = new TwitterFactory().getInstance();
    twitter.setOAuthConsumer(Constants.CONSUMER_KEY,
            Constants.CONSUMER_SECRET);

    String extraHTML = "NOTHING\n";

    try {
        AccessToken accessToken;
        accessToken = twitter
                .getOAuthAccessToken(tokenCopy, oauth_verifier);
        // accessToken = twitter.getOAuthAccessToken(oauth_verifier);
        // accessToken = twitter.getOAuthAccessToken();

        String accessTokenStr = accessToken.getToken();
        String accessTokenSecret = accessToken.getTokenSecret();
        extraHTML = "<p>accessToken = " + accessTokenStr
                + ", accessTokenSecret = " + accessTokenSecret + "</p>\n";

        // TODO latertwitter.setOAuthAccessToken(accessToken);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        extraHTML = "<pre>" + e.getMessage() + "</pre>\n";
    }

К сожалению, когда мой код запускается, я всегда получаю исключение

401:Authentication credentials (https://dev.twitter.com/docs/auth) were missing or
incorrect. Ensure that you have set valid conumer key/secret, access token/secret,
and the system clock in in sync.

Я знаю, что мои CONSUMER_KEY и CONSUMER_SECRET верны (я использовал их для создания URL-адреса авторизации в Твиттере, и это работает хорошо). Что мне здесь не хватает? Должен ли я передавать что-то еще для вызова getOAuthAccessToken()?

Спасибо.


person Animesh    schedule 04.09.2011    source источник


Ответы (1)


Я использую объект RequestToken вместо String, все остальное выглядит так же.

Я имею в виду, что когда я готовлю URL-адрес аутентификации, я делаю следующее:

RequestToken requestToken = twitter.getOAuthRequestToken(callbackUrl);
session.setAttribute(Constants.TOKEN_SESSION_KEY, requestToken);

и вместо строки вашего кода № 2 это будет:

RequestToken tokenCopy = (RequestToken) session.getAttribute(Constants.TOKEN_SESSION_KEY);

Все остальное выглядит правильно.

person Igor Artamonov    schedule 04.09.2011
comment
Большое спасибо! Это сработало. Программа фактически использовала метод getOAuthAccessToken(java.lang.String, java.lang.String) по ошибке. - person Animesh; 05.09.2011