twitter4j: 401 учетные данные для аутентификации отсутствуют или неверны

#java #twitter #twitter4j

#java #Twitter #twitter4j

Вопрос:

В настоящее время я пытаюсь получить userTimeline группы пользователей. Это работало у меня в прошлом, но сейчас больше не работает. Я использую twitter4j и использую oauth. На данный момент я зарегистрировал в своей учетной записи 2 приложения, которые оба должны иметь доступ к twitter-api. Однако со вчерашнего дня я получаю 401 повторный запрос аутентификации, отсутствующий или неправильный (пробовал оба приложения). Твиттер внес какие-либо недавние изменения в API? Должен ли я настроить новую учетную запись Twitter? Является ли это подходящим способом создать приложение и разрешить ему доступ к вашей собственной учетной записи?

Это код:

 ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
      .setOAuthConsumerKey("q...w")
      .setOAuthConsumerSecret("R...o")
      .setOAuthAccessToken("2...7")
      .setOAuthAccessTokenSecret("O....8");

  TwitterFactory tf = new TwitterFactory(cb.build());

    Twitter twitter = tf.getInstance();
  for ( Map.Entry<Long, String> entry : tmls.entrySet()) {

        long uid = entry.getKey();

        Paging paging = new Paging(1, count);

        ResponseList<Status> rls;

        try {
            rls = twitter.getUserTimeline(uid, paging);

            for ( int j = 0 ; j < rls.size() ; j   ) {

                if (false == ltindex.contains(uid)) {


                    alsa.add(new String[] {  String.valueOf( rls.get(j).getId() ) , String.valueOf( uid ), rls.get(j).getText() , "", entry.getValue(), String.valueOf( rls.get(j).getCreatedAt().getTime() )  });

                }

            }


        } catch (TwitterException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

  }
  

ошибка:

   401:Authentication credentials (http://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid conumer key/secret, access token/secret, and the system clock in in sync.
  error - Not authorized
  request - /1/statuses/user_timeline.json?user_id=14221532amp;include_rts=trueamp;include_entities=falseamp;count=10amp;page=1
  Relevant discussions can be on the Internet at:
    http://www.google.co.jp/search?q=ced778ef or
    http://www.google.co.jp/search?q=10a1ea9d
  TwitterException{exceptionCode=[ced778ef-10a1ea9d], statusCode=401, retryAfter=0, rateLimitStatus=RateLimitStatusJSONImpl{remainingHits=273, hourlyLimit=350, resetTimeInSeconds=1304422, secondsUntilReset=845, resetTime=Tue May 03 11:36:48 UTC 2011}, version=2.2.3-SNAPSHOT(build: ddf24547632bf3a28b899e3d75b110de43f71c0f)}
    at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:189)
    at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65)
    at twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:85)
    at twitter4j.TwitterImpl.get(TwitterImpl.java:1738)
    at twitter4j.TwitterImpl.getUserTimeline(TwitterImpl.java:246)
    at getExpertTweets.getSpecificOpinions(getExpertTweets.java:89)
    at classifyTweet.main(classifyTweet.java:57)
  root@se1:~# sudo ntpdate pool.ntp.org
  

Комментарии:

1. Вы проверяли время в своей системе? coffeepowered.net/2009/12/05/system-date-considered-important

2. да, я несколько раз обновлял его с помощью ntpdate pool.ntp.org

3. обновление: похоже, это происходит только у определенных пользователей. twitter, похоже, проводит различие между «нет авторизации» и «нет аутентификации». означает ли отсутствие авторизации, что временная шкала является частной?

4. Да, это почти наверняка означает, что временная шкала является частной, и вам не было предоставлено разрешение следить за данным пользователем.

Ответ №1:

У меня была такая же проблема. Ключ потребителя и секрет потребителя, которые я использовал, были правильными, и мой компьютер был синхронизирован. Проблема заключалась в том, что я не установил URL обратного вызова при регистрации моего приложения на dev.twitter.com. Как только я установил это, все просто заработало.

Комментарии:

1. как установить callback_url, он указывает недопустимый URL. Формат, который я использовал, какой угодно: //twitter

Ответ №2:

Проблема с ключом потребителя и токеном. следуйте инструкциям.

войдите в https://dev.twitter.com и Goto «Мое приложение» означает ваше уважаемое приложение. и перейдите к настройкам и измените разрешение доступа только для чтения, записи и отправки сообщений

и обновите данные, и если они не обновлены, то воссоздайте токен и обновите данные, а также вашу программу. и запустите программу и убедитесь, что у вас есть все jar-файлы этого в вашей папке lib. и проблема будет решена.

Комментарии:

1. Проблема все еще возникает 5 лет спустя. К сожалению, это никогда не было решением.

Ответ №3:

Я подумал, что поделюсь этим на случай, если это поможет кому-нибудь поискать в Google это сообщение об исключении.

При тестировании аутентификации Twitter для приложения JSF я попробовал следующий вариант использования:

Откройте окно аутентификации в Twitter. Введите надлежащие учетные данные и войдите в систему.

Это сработало. Итак, затем я попытался:

Откройте окно аутентификации в Twitter. Закройте окно аутентификации в Twitter. Снова откройте окно аутентификации в Twitter. Введите надлежащие учетные данные и нажмите Войти.

Последнее всегда приводило к отсутствию учетных данных для аутентификации 401 или неправильному исключению.

Моя проблема заключалась в том, что сервер перезапускал процесс аутентификации Twitter, но значение RequestToken.getAuthenticationURL() не передавалось должным образом обратно в пользовательский интерфейс и заставляло его вызывать Twitter API со старым URL.

Вкратце, убедитесь, что URL-адрес для аутентификации, используемый клиентом, совпадает с тем, который ожидает сервер.

Ответ №4:

Сегодня 02.05.2015 я получил аналогичную ошибку, используя twitter4j версии 3.0.x.

Я получал это, пока не обновил twitter4j до версии 4.0.0.

   <dependencies>
  <dependency>
      <groupId>org.twitter4j</groupId>
      <artifactId>twitter4j-core</artifactId>
      <version>[4.0,)</version>
  </dependency>
  ...
  

Ответ №5:

Я также столкнулся с этой проблемой из-за правильного системного времени и ключа / секрета API.

Оказалось, что нужно установить URL обратного вызова на https://api.twitter.com/oauth/request_token Как только они будут установлены, вы увидите экран авторизации в Twitter.

Вы также можете нажать «Test OAuth», чтобы протестировать его с помощью OAuth Tool и передатьhttps://api.twitter.com/oauth/request_token в качестве URI запроса для запроса POST.

Ответ №6:

Я столкнулся с той же проблемой, и я исправил, если дата и время устройства неверны, то эта проблема возникнет..

Ответ №7:

Проверьте правильность всех ваших учетных данных для аутентификации a) consumerKey b) consumerSecret c) accessToken d) accessTokenSecret Если все вышеуказанное верно, это должно сработать.

Другой возможностью может быть несинхронизация вашей системы. Например, если вы работаете в virtual box, после нескольких часов бездействия ваша система выходит из синхронизации. Пожалуйста, перезагрузите систему и повторите попытку.

Вы можете проверить зависимости с помощью приведенного ниже файла build.sbt

 name := "sparkstreamingexamples"
version := "1.0"
scalaVersion := "2.11.7"
libraryDependencies   = Seq(
  "org.apache.spark" %% "spark-streaming" % "2.0.1",
  "org.apache.bahir" %% "spark-streaming-twitter" % "2.0.1",
"org.twitter4j" % "twitter4j-core" % "4.0.4"
)