アプリ版:「スタンプのみでお礼する」機能のリリースについて

TwitterAPI(Twitter4J)を利用してダイレクトメッセージに来た特定のコメントに対してリアルタイムで
応答できるプログラムを作ろうとしています。

Twitter4JのサンプルにあったプログラムPrintUserStreamを拡張して作成しようとしていますが、
かなり初歩的なところで躓いています。アドバイスいただけると助かります。

下のプログラムではonDirectMessage内でsendDirectMessageメソッドを呼び出そうとしていますが、
twitterオブジェクトが参照できずエラーになってしまいます。

代わりにcb2の認証定義をonDirectMessage内に宣言すると随時onDirectMessageイベントが発生するたび認証してしまいよろしくありません。

どのようなソースコードを書けば問題が解決されるでしょうか。


----------ソースサンプル----------------------------------------------
class PrintUserStream {
public static void main(String[] args) throws TwitterException {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("xxx")
.setOAuthConsumerSecret("xxx")
.setOAuthAccessToken("xxx")
.setOAuthAccessTokenSecret("xxx");

ConfigurationBuilder cb2 = new ConfigurationBuilder();
cb2.setDebugEnabled(true)
.setOAuthConsumerKey("xxx")
.setOAuthConsumerSecret("xxx")
.setOAuthAccessToken("xxx")
.setOAuthAccessTokenSecret("xxx");

Twitter twitter = new TwitterFactory(cb2.build()).getInstance();


TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();




twitterStream.addListener(listener);
// user() method internally creates a thread which manipulates TwitterStream and calls these adequate listener methods continuously.
twitterStream.user();
}

public static UserStreamListener listener = new UserStreamListener() {
// private DirectMessagesResources twitter;



@Override
public void onStatus(Status status) {
System.out.println("onStatus @" + status.getUser().getScreenName() + " - " + status.getText());
}



@Override
public void onDirectMessage(DirectMessage directMessage) {
System.out.println("onDirectMessage text:"
+ directMessage.getText());
System.out.println(directMessage.getSenderId());



if(directMessage.getText().contains("xxx")){
System.out.println(directMessage.getText());



twitter.sendDirectMessage(ID, "コメント");





}
}

};
}

A 回答 (1件)

TwitterAPIを使用したことはありません。



解決方法は2つ。
その1.Twitter twitterをfinal Twitter twitterにする。
その2.UserStreamListenerを無名クラスにするのをやめて、クラスを定義し、twitterの参照を渡す。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!