繁体   English   中英

使用twitter4j从Twitter客户端发布tweet时出错

[英]get error while posting tweet from twitter client using twitter4j

当我尝试从Twitter客户端更新我的状态时,我收到一条错误消息。 当iam使用getHomeTimeLine()方法读取状态时,它可以正常工作。 我真的不知道错误可能在哪里。 请帮忙!

Twitter twitter = new TwitterFactory().getInstance();
        twitter.setOAuthConsumer(consumerKey, consumerSecret);
        RequestToken requestToken = twitter.getOAuthRequestToken();
        AccessToken accessToken = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        while (null == accessToken) {
          System.out.println("Open the following URL and grant access to your account:");
          System.out.println(requestToken.getAuthorizationURL());
          System.out.print("Enter the PIN(if aviailable) or just hit enter.[PIN]:");
          String pin = br.readLine();
          try{
             if(pin.length() > 0){
               accessToken = twitter.getOAuthAccessToken(requestToken, pin);
             }else{
               accessToken = twitter.getOAuthAccessToken();
             }
          } catch (TwitterException te) {
            if(401 == te.getStatusCode()){
              System.out.println("Unable to get the access token.");
            }else{
              te.printStackTrace();
            }
          }
          System.out.println("token = "+accessToken.getToken());
          System.out.println("tokenSecret = "+accessToken.getTokenSecret());
        }

这是我的登录方法

public void login()throws TwitterException{
    TwitterFactory factory = new TwitterFactory();
    AccessToken accessToken = new AccessToken(token, tokenSecret);
    Configuration conf = new PropertyConfiguration(new Properties());
    OAuthAuthorization auth = new OAuthAuthorization(conf);
    auth.setOAuthConsumer(consumerKey, consumerSecret);
    auth.setOAuthAccessToken(accessToken);
    twitterClient = factory.getInstance(auth);
}

这是我状态更新的方法

public void setStatus(String text) throws TwitterException {

    if(twitterClient==null)throw new IllegalStateException("Please login first : ");
    Status status; 
    try {
        status = twitterClient.updateStatus(text);
    } catch (TwitterException e) {
        e.printStackTrace();
        throw e;
    }
    System.out.println("Status : "+status.getText());
}

这些是我的错误消息:

401:身份验证凭据(https://dev.twitter.com/docs/auth)丢失或不正确。 确保已设置有效的使用者密钥/机密,访问令牌/机密,并且系统时钟已同步。 错误-只读应用程序无法发布请求-/1/statuses/update.json相关讨论可以在Internet上: http: //www.google.co.jp/search? q=b2b52c28或http:// www .google.co.jp / search?q = 1b433fc8 TwitterException {exceptionCode = [b2b52c28-1b433fc8],statusCode = 401,retryAfter = -1,rateLimitStatus = null,featureSpecificRateLimitStatus = null,版本= 2.2.6-SNAPSHOT(内部版本:404bccc2082954aa37f0d12612322 )}在twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:185)在twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65)在twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java :102)在twitter4j.TwitterImpl.post(TwitterImpl.java:1927)在twitter4j.TwitterImpl.updateStatus(TwitterImpl.java:433)在twitter.Zwietschi.setStatus(Zwietschi.java:74)在twitter.Zwietschi.main(Zwietschi) .java:93)

问题出在哪儿? 请帮忙!

检查您是否更改了权限...则必须重新生成令牌!!!

好像从今天(1月14日)开始,当不使用ssl连接时,也会引发此错误。

有关403错误代码,请参见REST API? 解决方案(启用SSL,使用最新的twitter4j)。

此实现在Twitter4J API 3.0.3版本中对我有用。

ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true).setOAuthConsumerKey(Config.CONSUMER_KEY)
.setOAuthConsumerSecret(Config.CONSUMER_SECRET)
.setOAuthAccessToken(Config.ACCESS_TOKEN)
.setOAuthAccessTokenSecret(Config.ACCESS_TOKEN_SECRET);
cb.setUseSSL(true);                 
TwitterFactory twitterFactory = new TwitterFactory(cb.build());
twitter = twitterFactory.getInstance();

使它起作用的那条线是

cb.setUseSSL(true); 

听说这是Twitter4J API 3.0.5的默认设置。

这对我有用,您应该尝试使用ConfigurationBuilder。

ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey("YOUR_APP_KEY");
cb.setOAuthConsumerSecret("YOUR_APP_SECRET");
cb.setOAuthAccessToken("USER_TOKEN_KEY");
cb.setOAuthAccessTokenSecret("USER_TOKEN_SECRET");

Twitter twitter = new TwitterFactory(cb.build()).getInstance();   
String tweet="HELLO WORLD!";
twitter.updateStatus(tweet);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM