代码之家  ›  专栏  ›  技术社区  ›  kramsiv94

如何使用Twitter的Java库访问Twitter API资源(Twitter 4J)

  •  0
  • kramsiv94  · 技术社区  · 6 年前

    我刚接触Twitter API和Twitter的Twitter4J库。我最近注册了一个应用程序,可以使用Twitter的API。Twitter已授予我消费者API密钥(API密钥和API密钥),以及访问令牌和访问令牌密钥。

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

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

    @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;
        }
    
    }
    

    这是返回的错误:

    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)
    

    我哪里出错了?

    1 回复  |  直到 6 年前
        1
  •  1
  •   ZPB    6 年前

    getscreenname的定义

    “返回验证用户的屏幕名称。 如果 -此实例由基本身份验证,并提供电子邮件地址而不是屏幕名称,或者-此实例由 奥瑙 ."

    基于用户的身份验证必须使用OAuth 1.0a而不是OAuth 2。您需要获取访问令牌,请执行以下操作:
    https://developer.twitter.com/en/docs/basics/authentication/overview/using-oauth

    当您获得访问令牌时,只需如下更新configurationbuilder:

        ConfigurationBuilder cb = new ConfigurationBuilder();
    
        cb.setApplicationOnlyAuthEnabled(false);
        cb.setOAuthConsumerKey(CONSUMER_KEY)
        .setOAuthConsumerSecret(CONSUMER_SECRET)
        .setOAuthAccessToken(ACCESS_TOKEN)
        .setOAuthAccessTokenSecret(ACCESS_TOKEN_SECRET);