getUserTimeLine(Twitter4J)仅适用于某些公共帐户

时间:2013-11-15 14:10:03

标签: java twitter oauth twitter4j

我尝试使用Twitter4J库中的 getUserTimeline()下载公开推文,它仅适用于某些帐户。例如:

twitter.getUserTimeline("twitter"); //works
twitter.getUserTimeline("codeacademy"); //fails

然而,我发现两者之间没有任何区别。我跟着他们都没有,我也不遵循任何一个。如果我在Firefox的私人模式下访问他们的帐户,我可以看到他们的公开推文。当我使用我的帐户登录时也是如此。但是,如果我尝试使用API​​,codeacademy会以某种方式失败。我尝试使用参数“codeacademy”,“Codeacademy”,甚至ID(716547158)来调用它,总是得到相同的结果。

我得到的错误信息是:

Exception in thread "main" 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.
{"request":"\/1.1\/statuses\/user_timeline.json?screen_name=codeacademy&include_my_retweet=true&include_entities=1&include_rts=1","error":"Not authorized."}

Relevant discussions can be found on the Internet at:
        http://www.google.co.jp/search?q=00df323f or
        http://www.google.co.jp/search?q=445fb8e5
TwitterException{exceptionCode=[00df323f-445fb8e5], statusCode=401, message=null, code=-1, retryAfter=-1, rateLimitStatus=RateLimitStatusJSONImpl{remaining=177, limit=180, resetTimeInSeconds=1384522960, secondsUntilReset=495}, version=3.0.4}   
    at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:162)  
    at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61)     
    at twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:81)
    ...etc...

我认为我可能正在初始化Twitter对象错误,但尝试3种不同的选项并没有帮助。这是我尝试过的。

1)

在twitter4j.properties中

* 是那里的实际值:))

oauth.consumerKey=***
oauth.consumerSecret=***
oauth.accessToken=***
oauth.accessTokenSecret=***

在java中

Twitter twitter = TwitterFactory.getSingleton();

2)

在twitter4j.properties

enableApplicationOnlyAuth=true
http.useSSL=true
oauth.consumerKey=***
oauth.consumerSecret=***
oauth2.tokenType=bearer
oauth2.accessToken=***

我通过调用并手动复制粘贴来获取oauth2值:

    OAuth2Token token = twitter.getOAuth2Token();
    System.out.println(token.getAccessToken());
    System.out.println(token.getTokenType());

在java中

Twitter twitter = new TwitterFactory().getSingleton();

3)

在twitter4j.properties

*nothing*

在java中

    ConfigurationBuilder builder = new ConfigurationBuilder();
    builder.setUseSSL(true);
    builder.setApplicationOnlyAuthEnabled(true);

    Twitter twitter = new TwitterFactory(builder.build()).getInstance();
    twitter.setOAuthConsumer("***", "***");
    OAuth2Token token = twitter.getOAuth2Token();

每次尝试都与twitter有关,没有人使用codeacademy。

我一定是做错了什么但是找不到什么。任何建议都将受到高度赞赏:)。感谢。

1 个答案:

答案 0 :(得分:2)

当你到这里时:https://twitter.com/codeacademy

它写在页面本身,该用户的推文受到保护,只有关注者才能访问此帐户的推文。

因此,你可以得到推文:

  • 如果使用codeacademy的身份验证凭据。
  • 或者,使用codeacademy之后的用户的身份验证凭据。