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

В настоящее время я пытаюсь получить 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=14221532&include_rts=true&include_entities=false&count=10&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

person jcfrei    schedule 03.05.2011    source источник
comment
Вы проверили время в вашей системе? coffeepowered.net/2009/12/05/system-date -считается важным   -  person Peter Knego    schedule 03.05.2011
comment
да, я несколько раз обновлял его с помощью ntpdate pool.ntp.org   -  person jcfrei    schedule 03.05.2011
comment
обновление: похоже, это происходит только у определенных пользователей. твиттер, похоже, не делает различий между авторизацией и аутентификацией. означает ли отсутствие авторизации, что временная шкала является частной?   -  person jcfrei    schedule 04.05.2011
comment
Да, это почти наверняка означает, что временная шкала является частной, и вам не было предоставлено разрешение следить за данным пользователем.   -  person D-Nice    schedule 09.08.2011


Ответы (7)


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

person Punit Raizada    schedule 03.07.2013
comment
как установить callback_url, он говорит неверный URL. Формат, который я использовал что угодно://twitter - person aditya; 10.09.2013

Возникла проблема с потребительским ключом и токеном. Следуйте шагам.

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

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

person Kishan Bheemajiyani    schedule 13.09.2013
comment
Проблема все еще происходит 5 лет спустя. К сожалению, это никогда не было решением. - person Abandoned Cart; 14.11.2018

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

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

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

Это сработало. Итак, я попробовал:

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

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

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

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

person Etienne Dufresne    schedule 27.10.2014

Сегодня 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>
  ...

person Dmitriy Sorochynskiy    schedule 02.05.2015

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

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

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

person Ivan V    schedule 21.01.2016

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

person Suresh    schedule 08.08.2016

Убедитесь, что все ваши учетные данные верны: a) ConsumerKey b) ConsumerSecret c) accessToken d) accessTokenSecret.

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

Вы можете проверить зависимости с помощью приведенного ниже файла 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"
)
person adarsh    schedule 22.05.2020