[英]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.