Twitter集成:已经设置了消费者密钥/秘密对

ser*_*nni 11 twitter integration key twitter4j

尝试使用twitter4j lib 将我的webapp与Twitter集成.
我已经注册了我的Twitter网站的应用程序,并获得Consumer keyConsumer 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);
...
Run Code Online (Sandbox Code Playgroud)

例外:

Caused by: java.lang.IllegalStateException: consumer key/secret pair already set.
Run Code Online (Sandbox Code Playgroud)

我没有更多配置keysecret,任何.properties或其他文件.

编辑:

注释行twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);导致异常:

java.lang.IllegalStateException: OAuth consumer key/secret combination not supplied
Run Code Online (Sandbox Code Playgroud)

Ara*_*xia 30

查看代码和文档,看起来Twitter不推荐使用实例化实例的方法.如果你想以编程电源配置(而不是使用属性),它看起来像你需要提供ConfigurationTwitterFactory.

...
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(CONSUMER_KEY);
builder.setOAuthConsumerSecret(CONSUMER_SECRET);
Configuration configuration = builder.build();
TwitterFactory factory = new TwitterFactory(configuration);
Twitter twitter = factory.getInstance();
...

由未提供配置的工厂提供的单例默认使用AuthorizationPropertyConfiguration配置支持的实现.如果没有属性文件,看起来它不应该实例化OAuthAuthorizationauth,这将导致您看到的异常.但是PropertyConfiguration,搜索整个CLASSPATH相应的属性文件,所以也许你忽略了一个.您可以在获取Twitter实例后立即尝试记录密钥和密钥以查看它们设置:

System.out.println("key:" + twitter.getConfiguration().getOAuthConsumerKey());
System.out.println("secret: " + twitter.getConfiguration().getOAuthConsumerSecret());