尝试使用twitter4j-lib将我的Web应用程序与Twitter集成
我已经在推特网站上注册了我的应用程序,并获得了Consumer key
和Consumer secret
值
没有什么特别的,标准OAuth
步骤。
代码:
public class TwitterService {
private final String CONSUMER_KEY = "xxx";
private final String CONSUMER_SECRET = "yyy";
public String fav() {
Twitter twitter = TwitterFactory.getSingleton();
twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
...
异常:
Caused by: java.lang.IllegalStateException: consumer key/secret pair already set.
我没有key
和secret
、任何.properties
或其他文件的更多配置。
编辑:
注释行twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
导致异常:
java.lang.IllegalStateException: OAuth consumer key/secret combination not supplied
从代码和文档来看,不建议使用实例化Twitter
实例的方法。如果您想以编程方式提供配置(而不使用属性),则需要向TwitterFactory
提供Configuration
。
。。。ConfigurationBuilder builder=新ConfigurationBuilder();builder.setOAuthConsumerKey(CONSUMER_KEY);builder.setOAuthConsumerSecret(CONSUMER_SECRET);配置配置=builder.build();TwitterFactory工厂=新的TwitterFactory(配置);Twitter Twitter=工厂.getInstance();。。。
未提供配置的工厂提供的单例默认使用由PropertyConfiguration
配置支持的Authorization
实现。如果没有属性文件,则看起来不应该实例化OAuthAuthorization
身份验证,这将导致您看到的异常。但是PropertyConfiguration
确实会在整个CLASSPATH
中搜索适当的属性文件,所以您可能忽略了其中一个。您可以在获得Twitter
实例后立即尝试记录密钥和机密,以查看它们设置为:
System.out.println("key:"+twitter.getConfiguration().getOAuthConsumerKey());System.out.println("secret:"+twitter.getConfiguration().getOAuthConsumerSecret());
我的直觉是,你正在设置私有的最终变量,然后twitter.setOAuthConsumer()也在尝试这样做。你应该只需要其中一个。你有没有试着评论掉twitter.setOAuthConsumer()行?
文档解释了设置这些内容的"首选"方式。