首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用twitter4j库(twitter4j)访问twitter4j资源

如何使用twitter4j库(twitter4j)访问twitter4j资源
EN

Stack Overflow用户
提问于 2018-08-08 05:10:11
回答 1查看 1.3K关注 0票数 1

我对twitter4j和Twitter的twitter4j库很陌生。我最近注册了一个应用程序,可以使用Twitter的API。Twitter为我提供了消费者API密钥(API密钥和API密钥),以及访问令牌和访问令牌密钥。

问题是,我一直试图使用twitter4j对twitter进行身份验证(使用前面提到的密钥),但是当试图访问任何API资源时,我会遇到一个错误,即由于费率限制,我不允许访问。但是,当我从未能够查询api时,怎么可能达到了一个利率限制呢?

这就是我正在尝试的(用虚拟值替换敏感位):

代码语言:javascript
复制
@SpringBootApplication
public class App 
{

    private static final String CONSUMER_KEY = "FakeConsumerKey";
    private static final String CONSUMER_SECRET = "FakeConsumerSecret";

    public static void main( String[] args )
    {
        SpringApplication.run(App.class, args);
        System.out.println("Making an authentication request to"
                + " retrieve the bearer token...");



        OAuth2Token token;
        token = getOAuth2Token();

        ConfigurationBuilder cb = new ConfigurationBuilder();

        cb.setApplicationOnlyAuthEnabled(true);
        cb.setOAuthConsumerKey(CONSUMER_KEY);
        cb.setOAuthConsumerSecret(CONSUMER_SECRET);
        cb.setOAuth2TokenType(token.getTokenType());
        cb.setOAuth2AccessToken(token.getAccessToken());

        Twitter twitter = new TwitterFactory(cb.build()).getInstance();

        try {
            System.out.println("My screen name: " + twitter.getScreenName());
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TwitterException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   

   }


    public static OAuth2Token getOAuth2Token()
    {
        OAuth2Token token = null;
        ConfigurationBuilder cb;

        cb = new ConfigurationBuilder();
        cb.setApplicationOnlyAuthEnabled(true);
        cb.setOAuthConsumerKey(CONSUMER_KEY);
        cb.setOAuthConsumerSecret(CONSUMER_SECRET);

        try
        {
            token = new TwitterFactory(cb.build())
                .getInstance().getOAuth2Token();

            System.out.println("token: " + token.getAccessToken());
        }
        catch (Exception e)
        {
            System.out.println("Can't get OAuth2 token");
            e.printStackTrace();
            System.exit(0);
        }

        return token;
    }

}

这是返回的错误:

代码语言:javascript
复制
403:The request is understood, but it has been refused. An accompanying error message will explain why. This code is used when requests are being denied due to update limits (https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following).
message - Your credentials do not allow access to this resource
code - 220

Relevant discussions can be found on the Internet at:
    http://www.google.co.jp/search?q=9a9caf7a or
    http://www.google.co.jp/search?q=bf94ba05
TwitterException{exceptionCode=[9a9caf7a-bf94ba05], statusCode=403, message=Your credentials do not allow access to this resource, code=220, retryAfter=-1, rateLimitStatus=null, version=4.0.6}
    at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:164)
    at twitter4j.HttpClientBase.request(HttpClientBase.java:57)
    at twitter4j.HttpClientBase.get(HttpClientBase.java:75)
    at twitter4j.TwitterBaseImpl.fillInIDAndScreenName(TwitterBaseImpl.java:133)
    at twitter4j.TwitterBaseImpl.fillInIDAndScreenName(TwitterBaseImpl.java:128)
    at twitter4j.TwitterBaseImpl.getScreenName(TwitterBaseImpl.java:108)
    at com.vismark.social.twitter.TwitterAccountService.App.main(App.java:41)

我哪里出错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-16 12:45:37

getScreenName的定义

“返回用户的用户名验证。如果-此实例由Basic进行身份验证,并提供电子邮件地址而不是屏幕名称,或者-此实例由OAuth验证,则该方法可以在第一次调用时内部调用OAuth()。”

基于用户的身份验证必须使用OAuth 1.0a而不是OAuth 2。

https://developer.twitter.com/en/docs/basics/authentication/overview/using-oauth

当您获得访问令牌时,只需按以下方式更新您的ConfigurationBuilder:

代码语言:javascript
复制
    ConfigurationBuilder cb = new ConfigurationBuilder();

    cb.setApplicationOnlyAuthEnabled(false);
    cb.setOAuthConsumerKey(CONSUMER_KEY)
    .setOAuthConsumerSecret(CONSUMER_SECRET)
    .setOAuthAccessToken(ACCESS_TOKEN)
    .setOAuthAccessTokenSecret(ACCESS_TOKEN_SECRET);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51739000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档