我目前正在尝试获取一堆用户的userTimeline。这在过去对我有用,但现在不再起作用了。我正在使用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
答案 0 :(得分:14)
我有同样的问题。我使用的消费者密钥和消费者秘密是正确的,我的机器是同步的。问题是我在dev.twitter.com上注册我的应用程序时没有设置回调URL。一旦我设定了,一切正常。
答案 1 :(得分:4)
消费者密钥和令牌存在问题。按照步骤。
登录https://dev.twitter.com/并转到我的应用程序意味着您尊重的应用程序。 并转到设置和更改访问权限 只读 至 读取,写入和指导消息
并更新数据,如果没有更新,则重新创建令牌并更新数据和程序。并运行该程序,并确保您的lib文件夹中包含所有jar文件。 问题将得到解决。
答案 2 :(得分:1)
我想我会分享这个,以防有人谷歌搜索此异常消息。
在测试JSF应用程序的Twitter身份验证时,我尝试了以下用例:
打开Twitter身份验证窗口。 输入正确的凭据并登录。
有效。所以我试过了:
打开Twitter身份验证窗口。 关闭Twitter身份验证窗口。 再次打开Twitter身份验证窗口。 输入正确的凭据并点击登录。
后者总是导致缺少401身份验证凭据或不正确的异常。
我的问题是服务器正在重新启动Twitter身份验证过程,但RequestToken.getAuthenticationURL()的值未正确传递回UI并导致它使用旧URL调用Twitter API。
简而言之,请确保客户端使用的身份验证URL与服务器期望的身份验证URL匹配。
答案 3 :(得分:0)
我也遇到了这个问题以及正确的系统时间和API Key / Secret。
事实证明,需要将回拨网址设置为 https://api.twitter.com/oauth/request_token 一旦设置 - 您将看到Twitter授权屏幕。
您也可以按&#34;测试OAuth&#34;使用OAuth工具对其进行测试,并将 https://api.twitter.com/oauth/request_token 作为POST请求的请求URI传递。
答案 4 :(得分:0)
我遇到了同样的问题并且我修复了,如果设备日期和时间不正确则会出现此问题..
答案 5 :(得分:0)
检查所有身份验证凭据是否正确 a)消费者密钥 b)消费者秘密 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"
)