получить сообщение об ошибке при публикации твита из Twitter-клиента с помощью twitter4j - PullRequest
1 голос
/ 12 марта 2012

я получаю сообщение об ошибке, когда пытаюсь обновить свой статус из моего клиента Twitter. он отлично работает, когда я читаю статусы с помощью метода getHomeTimeLine (). Я действительно не знаю, где может быть ошибка. пожалуйста, помогите!

Twitter twitter = new TwitterFactory().getInstance();
        twitter.setOAuthConsumer(consumerKey, consumerSecret);
        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("Enter the PIN(if aviailable) or just hit enter.[PIN]:");
          String pin = br.readLine();
          try{
             if(pin.length() > 0){
               accessToken = twitter.getOAuthAccessToken(requestToken, pin);
             }else{
               accessToken = twitter.getOAuthAccessToken();
             }
          } catch (TwitterException te) {
            if(401 == te.getStatusCode()){
              System.out.println("Unable to get the access token.");
            }else{
              te.printStackTrace();
            }
          }
          System.out.println("token = "+accessToken.getToken());
          System.out.println("tokenSecret = "+accessToken.getTokenSecret());
        }

это мой метод входа

public void login()throws TwitterException{
    TwitterFactory factory = new TwitterFactory();
    AccessToken accessToken = new AccessToken(token, tokenSecret);
    Configuration conf = new PropertyConfiguration(new Properties());
    OAuthAuthorization auth = new OAuthAuthorization(conf);
    auth.setOAuthConsumer(consumerKey, consumerSecret);
    auth.setOAuthAccessToken(accessToken);
    twitterClient = factory.getInstance(auth);
}

это мой метод обновления статуса

public void setStatus(String text) throws TwitterException {

    if(twitterClient==null)throw new IllegalStateException("Please login first : ");
    Status status; 
    try {
        status = twitterClient.updateStatus(text);
    } catch (TwitterException e) {
        e.printStackTrace();
        throw e;
    }
    System.out.println("Status : "+status.getText());
}

это мои сообщения об ошибках:

401: Учетные данные аутентификации (https://dev.twitter.com/docs/auth) отсутствовали или были неверными. Убедитесь, что вы установили действительный ключ / секретный ключ пользователя, токен / секретный ключ доступа и системные часы в синхронизации. ошибка - приложение только для чтения не может POST запрос - /1/statuses/update.json Соответствующие обсуждения могут быть в Интернете по адресу: http://www.google.co.jp/search?q=b2b52c28 или http://www.google.co.jp/search?q=1b433fc8 TwitterException {exceptionCode = [b2b52c28-1b433fc8], statusCode = 401, retryAfter = -1, rateLimitStatus = null, featureSpecificRateLimitStatus = null, версия = 2.2.6-SNAPSHOT (сборка: 404bccc2082954dc0d12637a391a9191a991a991 339 339 339 339 339 339 339 339 339 339 91 393 399 339 339 339 339 339 339 339 339 279 139 279 133 293 291 291372371 291 271 291 291 291 291 221 221 221 221 224 223 291 371, Закладки в twitter4j.internal.http.HttpClientImpl.request (HttpClientImpl.java:185) в twitter4j.internal.http.HttpClientWrapper.request (HttpClientWrapper.java:65) в twitter4j.internal.http.HttpClientWrapper.post (HttpClientWrapper.java:102) в twitter4j.TwitterImpl.post (TwitterImpl.java:1927) в twitter4j.TwitterImpl.updateStatus (TwitterImpl.java:433) на twitter.Zwietschi.setStatus (Zwietschi.java:74) в twitter.Zwietschi.main (Zwietschi.java:93)

в чем проблема? пожалуйста помогите!

Ответы [ 4 ]

3 голосов
/ 27 июня 2012

Проверьте, не изменились ли у вас разрешения ... Тогда вам нужно будет регенерировать токены !!!

1 голос
/ 17 января 2014

Эта реализация работала для меня в версии Twitter4J API 3.0.3.

ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true).setOAuthConsumerKey(Config.CONSUMER_KEY)
.setOAuthConsumerSecret(Config.CONSUMER_SECRET)
.setOAuthAccessToken(Config.ACCESS_TOKEN)
.setOAuthAccessTokenSecret(Config.ACCESS_TOKEN_SECRET);
cb.setUseSSL(true);                 
TwitterFactory twitterFactory = new TwitterFactory(cb.build());
twitter = twitterFactory.getInstance();

Строка, которая заставляет его работать, это

cb.setUseSSL(true); 

Слышал, что по умолчанию в Twitter4J API 3.0.5.

1 голос
/ 15 января 2014

Похоже, что на сегодняшний день (14 января) эта ошибка также выдается, когда не используется ssl-соединение.

См. REST API относительно кода ошибки 403? для решения (включитьSSL, используйте последнюю версию twitter4j).

1 голос
/ 14 марта 2012

Это работает для меня, вы должны попробовать с ConfigurationBuilder.

ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey("YOUR_APP_KEY");
cb.setOAuthConsumerSecret("YOUR_APP_SECRET");
cb.setOAuthAccessToken("USER_TOKEN_KEY");
cb.setOAuthAccessTokenSecret("USER_TOKEN_SECRET");

Twitter twitter = new TwitterFactory(cb.build()).getInstance();   
String tweet="HELLO WORLD!";
twitter.updateStatus(tweet);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...