コードサンプル
サンプルコードは src/twitter4j/examples/ 以下に配置されています。
それぞれ bin/className.cmd|sh で実行できます。
- スタテータスの更新
- タイムラインの取得
- ダイレクトメッセージの送受信
- Tweetの検索
- 非同期API
- ページ処理
- OAuth認可
- ストリーミング API
Twitter.updateStatus() メソッドで"今なにをしているか"を更新することができます。
詳しくは twitter4j.examples.Update.java をご覧ください。
Twitter twitter = new Twitter(twitterID,twitterPassword);
Status status = twitter.updateStatus(latestStatus);
System.out.println("Successfully updated the status to [" + status.getText() + "].");
Twitter.get****Timeline() メソッドで友達、パブリック、または指定ユーザの最近のタイムラインを返します。
詳しくは twitter4j.examples.GetTimelines.java をご覧ください。
Twitter twitter = new Twitter(twitterID,twitterPassword);
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.SendDirectMessage.java をご覧ください。
Twitter twitter = new Twitter(senderID,senderPassword);
sender.sendDirectMessage(recipientId,message);
Twitter receiver = new Twitter(recipientId,recipientPassword);
List<DirectMessage> messages = receiver.getDirectMessages();
for (DirectMessage message : messages) {
System.out.println("Sender:" + message.getSenderScreenName());
System.out.println("Text:" + message.getText() + "\n");
}
Java1.4 や Processing でコンパイルできませんか? FAQ をご覧ください
Query クラスと Twitter.search(twitter4j.Query) メソッドで検索を行えます。
Twitter twitter = new Twitter();
Query query = new Query("source:twitter4j yusukey");
QueryResult result = twitter.search(query);
System.out.println("hits:" + result.getTotal());
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.AsyncUpdate.java をご覧ください。
AsyncTwitter twitter = new AsyncTwitter(senderId,senderPassword);
twitter.updateStatusAsync(args[2], 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 == AsyncTwitter.UPDATE_STATUS) {
e.printStackTrace();
} else {
throw new AssertionError("Should not happen");
}
}
}
);
いくつかの API はページ処理をサポートしています。ぺージ処理には以下のパラメータを指定できます:
page: ページ count: 1ページあたりの件数 since_id: 指定した id 以降の要素を取得 max_id: 指定した id 以前の情報を取得これらのパラメータの指定には Paging クラスを利用します。
全てのパラメータが必ずサポートされているわけではないことに気をつけてください。どのパラメータがサポートされているかどうかはサポート API リストを確認してください。
Twitter twitter = new Twitter("user", "password");
// 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 Twitter();
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 = requestToken.getAccessToken();
}
} catch (TwitterException te) {
if(401 == te.getStatusCode()){
System.out.println("Unable to get the access token.");
}else{
te.printStackTrace();
}
}
}
//将来の参照用に accessToken を永続化する
storeAccessToken(twitter.verifyCredentials().getId() , at);
Status status = twitter.updateStatus(args[0]);
System.out.println("Successfully updated the status to [" + status.getText() + "].");
System.exit(0);
}
private void storeAccessToken(int useId, AccessToken at){
//at.getToken() を保存
//at.getTokenSecret() を保存
}
AccessToken を取得した以降は RequestToken は不要になります。次回からは consumer key/secret と AccessToken のみでユーザアカウントにアクセスできます。
public static void main(String args[]) thrwos Exception{
Twitter twitter = new Twitter();
twitter.setOAuthConsumer("[consumer key]", "[consumer secret]");
AccessToken accessToken = loadAccessToken(Integer.parseInt(args[0]));
twitter.setAccessToken(accessToken);
Status status = twitter.updateStatus(args[1]);
System.out.println("Successfully updated the status to [" + status.getText() + "].");
System.exit(0);
}
private 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
Query クラスと Twitter.search(twitter4j.Query) メソッドで検索を行えます。
Twitter twitter = new Twitter();
Query query = new Query("source:twitter4j yusukey");
QueryResult result = twitter.search(query);
System.out.println("hits:" + result.getTotal());
for (Tweet tweet : result.getTweets()) {
System.out.println(tweet.getFromUser() + ":" + tweet.getText());
}
Java1.4 や Processing でコンパイルできませんか? FAQ をご覧ください