
コードサンプル
サンプルコードは src/twitter4j/examples/ 以下に配置されています。
それぞれ bin/className.cmd|sh で実行できます。
サンプルコードを動作させるには OAuth の認証情報を twitter4j.properties 記載しておく必要があります。twittetr4j.properties の設定方法について詳しくはTwitter4J - 設定のページをご覧ください
スタテータスの更新
タイムラインの取得
ダイレクトメッセージの送受信
Tweetの検索
非同期API
ページ処理
OAuth認可
Twitterアカウントによるサインイン
ストリーミング API
Twitter.updateStatus() メソッドで"今なにをしているか"を更新することができます。
詳しくは twitter4j.examples.tweets.UpdateStatus.java をご覧ください。
// このファクトリインスタンスは再利用可能でスレッドセーフです
Twitter twitter = new TwitterFactory().getInstance();
Status status = twitter.updateStatus(latestStatus);
System.out.println("Successfully updated the status to [" + status.getText() + "].");
Twitter.get****Timeline() メソッドで友達、または指定ユーザのホームタイムラインを返します。
詳しくは twitter4j.examples.timeline.GetHomeTimeline.java をご覧ください。
// このファクトリインスタンスは再利用可能でスレッドセーフです
Twitter twitter = new TwitterFactory().getInstance();
List<Status> statuses = twitter.getFriendsTimeline();
System.out.println("Showing friends timeline.");
for (Status status : statuses) {
System.out.println(status.getUser().getName() + ":" +
status.getText());
}
Java1.4 や Processing でコンパイルできませんか? FAQ をご覧ください
Twitter.sendDirectMessage() / Twitter.getDirectMessages() メソッドでダイレクトメッセージの送受信ができます。
このメッセージは送信した相手にしか見えません。
詳しくは twitter4j.examples.directmessage.SendDirectMessage.java をご覧ください。
// このファクトリインスタンスは再利用可能でスレッドセーフです
Twitter sender = new TwitterFactory().getInstance();
DirectMessage message = sender.sendDirectMessage(recipientId, message);
System.out.println("Sent: " message.getText() + " to @" + message.getRecipientScreenName());
Java1.4 や Processing でコンパイルできませんか? FAQ をご覧ください
Query クラスと Twitter.search(twitter4j.Query) メソッドで検索を行えます。
詳しくは twitter4j.examples.search.SearchTweets.java をご覧ください。
// このファクトリインスタンスは再利用可能でスレッドセーフです
Twitter twitter = new TwitterFactory().getInstance();
Query query = new Query("source:twitter4j yusukey");
QueryResult result = twitter.search(query);
for (Tweet tweet : result.getTweets()) {
System.out.println(tweet.getFromUser() + ":" + tweet.getText());
}
Java1.4 や Processing でコンパイルできませんか? FAQ をご覧ください
非同期APIを使うと実際のメソッドコールの終了を待たずして処理を続行することができます。
実際のメソッドコールは別のスレッドで行われ、処理の結果は TwitterListener インターフェースにて受信できます。
非同期 API を使うには Twitter クラスの替わりに twitter4j.AsyncTwitter クラスを使い、***Async() メソッドを twitter4j.TwitterListener のインスタンスと共に呼び出します。
詳しくは twitter4j.examples.async.AsyncUpdate.java をご覧ください。
TwitterListener listener = new TwitterAdapter() {
@Override public void updatedStatus(Status status) {
System.out.println("Successfully updated the status to [" +
status.getText() + "].");
}
@Override public void onException(TwitterException e, int method) {
if (method == TwitterMethods.UPDATE_STATUS) {
e.printStackTrace();
} else {
throw new AssertionError("Should not happen");
}
}
}
// このファクトリインスタンスは再利用可能でスレッドセーフです
AsyncTwitterFactory factory = new AsyncTwitterFactory(listenrer);
AsyncTwitter asyncTwitter = factory.getInstance();
asyncTwitter.updateStatus(args[0]);
いくつかの API はページ処理をサポートしています。ぺージ処理には以下のパラメータを指定できます:
page: ページ count: 1ページあたりの件数 since_id: 指定した id 以降の要素を取得 max_id: 指定した id 以前の情報を取得これらのパラメータの指定には Paging クラスを利用します。
全てのパラメータが必ずサポートされているわけではないことに気をつけてください。どのパラメータがサポートされているかどうかはサポート API リストを確認してください。
// このファクトリインスタンスは再利用可能でスレッドセーフです
Twitter twitter = new TwitterFactory().getInstance();
// 2ページ目をリクエスト, 1ページあたりの件数は 40件
Paging paging = new Paging(2, 40);
List statuses = twitter.getFriendsTimeline(paging);
for (Status status : statuses) {
System.out.println(status.getUser().getScreenName() + ":" + status.getText());
}
// 3ページ目をリクエスト、since_id は (long)1000
statuses = twitter.getFriendsTimeline(new Paging(3).sinceId(1000l));
for (Status status : statuses) {
System.out.println(status.getUser().getScreenName() + ":" + status.getText());
}
OAuth 認可方式を使うとユーザーにユーザID、パスワードを提供してもらうことなくユーザのアカウントにアクセスできます。OAuth を利用するには http://twitter.com/oauth_clients/new で事前にアプリケーションを登録しておき consumer key, consumer secret を取得しておく必要があります。key と secret は Twitter#setOAuthConsumer() でセットするか、システムプロパティで VM パラメータとして以下のように指定しておきます。
-Dtwitter4j.oauth.consumerKey=[consumer key] -Dtwitter4j.oauth.consumerSecret=[consumer secret]最初はユーザアカウントへのアクセス権がありません。以下のように authorization URL にユーザを誘導し、AccessToken を取得する必要があります。
public static void main(String args[]) thrwos Exception{
// このファクトリインスタンスは再利用可能でスレッドセーフです
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer("[consumer key]", "[consumer secret]");
RequestToken requestToken = twitter.getOAuthRequestToken();
AccessToken accessToken = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (null == accessToken) {
System.out.println("Open the following URL and grant access to your account:");
System.out.println(requestToken.getAuthorizationURL());
System.out.print("Enter the PIN(if aviailable) or just hit enter.[PIN]:");
String pin = br.readLine();
try{
if(pin.length() > 0){
accessToken = twitter.getOAuthAccessToken(requestToken, pin);
}else{
accessToken = twitter.getOAuthAccessToken();
}
} catch (TwitterException te) {
if(401 == te.getStatusCode()){
System.out.println("Unable to get the access token.");
}else{
te.printStackTrace();
}
}
}
//将来の参照用に accessToken を永続化する
storeAccessToken(twitter.verifyCredentials().getId() , accessToken);
Status status = twitter.updateStatus(args[0]);
System.out.println("Successfully updated the status to [" + status.getText() + "].");
System.exit(0);
}
private static void storeAccessToken(int useId, AccessToken accessToken){
//accessToken.getToken() を保存
//accessToken.getTokenSecret() を保存
}
AccessToken を取得した以降は RequestToken は不要になります。次回からは consumer key/secret と AccessToken のみでユーザアカウントにアクセスできます。
public static void main(String args[]) thrwos Exception{
// このファクトリインスタンスは再利用可能でスレッドセーフです
TwitterFactory factory = new TwitterFactory();
AccessToken accessToken = loadAccessToken(Integer.parseInt(args[0]));
Twitter twitter = factory.getOAuthAuthorizedInstance"[consumer key]", "[consumer secret]", accessToken);
Status status = twitter.updateStatus(args[1]);
System.out.println("Successfully updated the status to [" + status.getText() + "].");
System.exit(0);
}
private static AccessToken loadAccessToken(int useId){
String token = // load from a persistent store
String tokenSecret = // load from a persistent store
return new AccessToken(token, tokenSecret);
}
See also:
Twitter API Wiki / OAuth FAQ
OAuth を使うと Twitter のアカウントで Web アプリケーションの認証を行うこともできます。これは RequestToken を取得する際に認証後に戻ってくるコールバックURLを指定し、コールバックURLに渡される oauth_verifier パラメータを使って AccessToken を取得することで実現できます。
シンプルな実装例は http://github.com/yusuke/sign-in-with-twitter にあります。
ストリーミング API 向けに TwitterStream クラス には複数のメソッド が用意されています。StatusListener インターフェースの実装を用意しておけばスレッド作成、ストリームの読み込みは Twitter4J が行ってくれます。
詳しくは twitter4j.examples.stream.PrintSampleStream.java をご覧ください。
public static void main(String[] args) throws TwitterException, IOException{
StatusListener listener = new StatusListener(){
public void onStatus(Status status) {
System.out.println(status.getUser().getName() + " : " + status.getText());
}
public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {}
public void onTrackLimitationNotice(int numberOfLimitedStatuses) {}
public void onException(Exception ex) {
ex.printStackTrace();
}
};
TwitterStream twitterStream = new TwitterStreamFactory(listener).getInstance();
// sample() method internally creates a thread which manipulates TwitterStream and calls these adequate listener methods continuously.
twitterStream.sample();
}
Java1.4 や Processing でコンパイルできませんか? FAQ をご覧ください