我想使用Twitter4J访问Public streaming API示例。 我在Twitter上创建了一个应用程序,并生成了相关的密钥和令牌(使用Twitter门户网站)。
但它仍然无法通过身份验证。
这是根据文档的代码。许多现有的论坛帖子都已过时。
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true);
cb.setOAuthConsumerKey("XXXXX");
cb.setOAuthConsumerSecret("XXXXXXXX");
cb.setOAuthAccessToken("xxxxxxxx-xxxxxxxxxxxxxxxxxxxxxx");
cb.setOAuthAccessTokenSecret("XXXXXXXXXXXXXXXXXXXXXXX");
OAuthAuthorization auth = new OAuthAuthorization(cb.build());
TwitterStreamFactory factory = new TwitterStreamFactory();
this.twitterStream = factory.getInstance(auth);
this.twitterStream.addListener(listener);
this.twitterStream.sample();
我得到的错误是:
401:Authentication credentials (https://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid consumer key/secret, access token/secret, and the system clock is in sync.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Error 401 Unauthorized</title>
</head>
<body>
<h2>HTTP ERROR: 401</h2>
<p>Problem accessing '/1.1/statuses/sample.json?stall_warnings=true'. Reason:
<pre> Unauthorized</pre>
</body>
</html>
答案 0 :(得分:0)
401错误的原因是身份验证失败。它可能由于两个原因而发生
不正确的凭据 [解释配置凭据的不同方式here]
系统时钟不正确 [即使您认为时间正确,也会同步系统时钟]
当您能够使用API发布推文,查看时间线等并且无法使用Twitter流时,第二个原因可能是原因。[仅在使用流API时获得401 ] < / p>
答案 1 :(得分:0)
这是我进行身份验证和接收Twitterstream的操作:
private static void listen() throws InterruptedException,TwitterException{
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setDebugEnabled(true)
.setOAuthConsumerKey("*************")
.setOAuthConsumerSecret("******************")
.setOAuthAccessToken("*******************")
.setOAuthAccessTokenSecret("************");
Configuration configuration= configurationBuilder.build();
TwitterStream twitterStream = new TwitterStreamFactory(configuration).getInstance();
twitterStream.addListener(new twitter4j.StatusListener() {
public void onStatus(Status status) {
System.out.println("Status: {}"+ status);
}
public void onException(Exception ex) {
System.out.println("Error callback"+ ex);
}
public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
}
public void onTrackLimitationNotice(int i) {
}
public void onScrubGeo(long l, long l1) {
}
public void onStallWarning(StallWarning stallWarning) {
}
});
twitterStream.sample();
TimeUnit.SECONDS.sleep(10);
twitterStream.shutdown();
}
希望这会有所帮助。对我来说,关键是创建将配置对象传递给其构造函数的TwitterStreamFactory。这样便可以进行身份验证。