11

twitter4j libを使用して、webapp を Twitter と統合しようとしています。
アプリを 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.

keyand secret.propertiesその他のファイルの構成はもうありません。

編集:

コメント行twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);は例外を引き起こします:

java.lang.IllegalStateException: OAuth consumer key/secret combination not supplied
4

2 に答える 2

30

コードとドキュメントの両方を見ると、Twitterインスタンスをインスタンス化する方法は推奨されていないようです。Configurationプログラムで構成を提供する (プロパティを使用しない) 場合は、 に を提供する必要があるようですTwitterFactory

...
ConfigurationBuilder ビルダー = new ConfigurationBuilder();
builder.setOAuthConsumerKey(CONSUMER_KEY);
builder.setOAuthConsumerSecret(CONSUMER_SECRET);
構成 構成 = builder.build();
TwitterFactory factory = new TwitterFactory(構成);
ツイッター ツイッター = factory.getInstance();
...

構成が提供されていないファクトリによって提供されるシングルトンは、構成Authorizationによってサポートされる実装を使用するようにデフォルト設定されPropertyConfigurationます。プロパティ ファイルがない場合、認証をインスタンス化するべきではないように見えます。これが、表示されている例外の原因となります。OAuthAuthorizationただし、適切なプロパティ ファイルをPropertyConfiguration全体CLASSPATHで検索するため、見落としている可能性があります。Twitterインスタンスを取得した直後にキーとシークレットをログに記録して、それら何に設定されているかを確認できます。

System.out.println("key:" + twitter.getConfiguration().getOAuthConsumerKey());
System.out.println("secret: " + twitter.getConfiguration().getOAuthConsumerSecret());
于 2012-07-24T23:09:10.717 に答える
0

私の推測では、プライベートの最終変数を設定していて、twitter.setOAuthConsumer() が同じことをしようとしているということです。どちらか一方のみが必要です。twitter.setOAuthConsumer() 行をコメントアウトしてみましたか?

ドキュメントは、これらを設定するための「推奨される」方法を説明しています。

于 2012-07-20T21:46:09.527 に答える