使用twitter4j无法点赞推文,其余功能正常求问题排查
问题:使用twitter4j调用createFavorite方法报错,其他方法正常
我在使用twitter4j库进行Twitter操作时,发现除createFavorite(点赞推文)方法外,twitter实例的其他方法均可正常运行,但调用该方法时出现错误。
相关代码
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import twitter4j.TwitterFactory; import twitter4j.conf.ConfigurationBuilder; public class TwitterAutoLikerPart1 { private static Logger logger = LoggerFactory.getLogger(TwitterAutoLikerPart1.class); public static void main(String[] args) throws Exception { ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setDebugEnabled(true) .setOAuthConsumerKey("E") .setOAuthConsumerSecret("F") .setOAuthAccessToken("G") .setOAuthAccessTokenSecret("H"); TwitterFactory tf = new TwitterFactory(cb.build()); var twitter = tf.getInstance(); long tweetid=tweetid; logger.info("Tweet id is "+tweetid); logger.info(twitter.createFavorite(tweetid).getText()); /* Whereas this is working for(var x:twitter.getFavorites()) logger.info(x.toString());*/ } }
报错日志
Exception in thread "main" 401:Authentication credentials (https://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid consumer key/secret, access token/secret, and the system clock is in sync. {"request":"/1.1/favorites/create.json","error":"Read-only application cannot POST."} Relevant discussions can be found on the Internet at: http://www.google.co.jp/search?q=038fb9e8 or http://www.google.co.jp/search?q=480cbeca TwitterException{exceptionCode=[038fb9e8-480cbeca], statusCode=401, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=4.0.7} at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:170) at twitter4j.HttpClientBase.request(HttpClientBase.java:57) at twitter4j.HttpClientBase.post(HttpClientBase.java:86) at twitter4j.TwitterImpl.post(TwitterImpl.java:2102) at twitter4j.TwitterImpl.createFavorite(TwitterImpl.java:1241) at com.twiiterapi.mt.twitterapi.TwitterAutoLikerPart1.main(TwitterAutoLikerPart1.java:30) Process finished with exit code 1
问题排查与解决
编辑补充:经Andy Piper先生指出,问题源于应用权限设置,修改权限后功能恢复正常。
核心原因
报错日志里的Read-only application cannot POST是关键提示:
- 当前Twitter开发者应用的权限为只读权限,
createFavorite属于需要修改数据的POST操作,只读权限不允许执行这类写操作 - 而
getFavorites这类正常运行的方法都是只读的GET请求,所以不受权限限制
解决步骤
- 登录Twitter开发者平台,找到你的目标应用
- 进入应用的「权限与功能」设置界面
- 将应用权限从「只读」升级为「读写」(或根据实际需求选择更高权限)
- 权限更新后,重新生成OAuth访问令牌(旧令牌会因权限变更失效)
- 替换代码中的OAuth密钥信息,重新运行程序即可恢复正常
内容的提问来源于stack exchange,提问作者Dev_panda
相关产品推荐
相关产品推荐

