当我尝试从我的Twitter客户端更新状态时收到错误消息。 当我使用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)丢失或不正确。确保您已设置有效的conumer密钥/密钥,访问令牌/密钥和系统时钟同步。 错误 - 只读应用程序无法POST 请求 - /1/statuses/update.json 相关讨论可以在互联网上: 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,version = 2.2.6-SNAPSHOT(build:404bccc2082954dc0d12612322791a37f3daa917)} 在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)
答案 0 :(得分:3)
检查您是否已更改权限...您必须重新生成令牌!!!
答案 1 :(得分:1)
这对我有用,您应该尝试使用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);
答案 2 :(得分:1)
似乎截至今天(1月14日),当不使用ssl连接时,也会抛出此错误。
请参阅REST API, regarding 403 error code?了解解决方案(启用SSL,使用最新的twitter4j)。
答案 3 :(得分:1)
此实现在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的默认设置。