Twitter4j: 401身份验证凭据缺失或不正确。

11

我目前正在尝试获取一堆用户的用户时间线。这在以前对我有用,但现在不再起作用。我正在使用twitter4j和oauth。到目前为止,我已经在我的账户上注册了2个应用程序,它们都应该能够访问twitter-api。然而,自昨天以来,无论是哪个应用程序,我都收到了一个401错误 - 身份验证凭据缺失或不正确。Twitter最近是否对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

你检查了系统时间吗?http://www.coffeepowered.net/2009/12/05/system-date-considered-important/ - Peter Knego
1
是的,我已经多次使用ntpdate pool.ntp.org更新了它。 - jcfrei
更新:这似乎只发生在某些用户身上。Twitter似乎区分无授权和无认证。没有授权是否意味着时间轴是私有的? - jcfrei
1
是的,这几乎肯定意味着时间轴是私有的,而且您没有被授予跟随该用户的权限。 - D-Nice
7个回答

15

我也遇到了同样的问题。我使用的消费者密钥和消费者秘钥是正确的,我的机器也是同步的。问题在于,当我在dev.twitter.com上注册我的应用程序时,我没有设置回调URL。一旦我设置好了,一切就正常了。


1
如何设置回调URL,它显示无效的URL。我使用的格式是anything://twitter。 - mn0102

6

Consumer key和Token出现了问题,按照以下步骤操作。

登录https://dev.twitter.com/,进入我的应用程序,即您的应用程序。然后进入设置,更改访问权限从只读到读、写和直接消息。

更新数据,如果没有更新,请重新创建token并更新数据和您的程序。确保您的lib文件夹中拥有所有jar文件,并运行程序,问题将会得到解决。


问题仍然存在五年后。不幸的是,这从未是解决方案。 - Abandoned Cart

1
我想在这里分享一下,以便帮助那些在搜索此异常消息时需要帮助的人。
在测试JSF应用程序的Twitter身份验证时,我尝试了以下用例:
1. 打开Twitter身份验证窗口。 2. 输入正确的凭据并登录。
它成功了。然后我尝试了:
1. 打开Twitter身份验证窗口。 2. 关闭Twitter身份验证窗口。 3. 再次打开Twitter身份验证窗口。 4. 输入正确的凭据并点击登录。
后者总是导致401身份验证凭证缺失或不正确的异常。
我的问题是服务器正在重新启动Twitter身份验证过程,但没有将RequestToken.getAuthenticationURL()的值正确地传回UI,从而导致它使用旧URL调用Twitter API。
简而言之,请确保客户端使用的身份验证URL与服务器预期的身份验证URL匹配。

0

今天,即2015年02月05日,我使用twitter4j 3.0.x版本时遇到了类似的错误。

直到我将twitter4j更新到4.0.0版本之前,我一直遇到这个问题。

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


0

0

我遇到了同样的问题并且已经解决了,如果设备的日期和时间不正确,那么就会出现这个问题。


0

请检查您的所有身份验证凭据是否正确

  • consumerKey
  • consumerSecret
  • accessToken
  • 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"
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接