English | Japanese | Korean

 



コードサンプル

サンプルコードは src/twitter4j/examples/ 以下に配置されています。
それぞれ bin/className.cmd|sh で実行できます。
サンプルコードを動作させるには OAuth の認証情報を twitter4j.properties 記載しておく必要があります。twittetr4j.properties の設定方法について詳しくはTwitter4J - 設定のページをご覧ください

  1. ツイート

  2. Twitter.updateStatus() メソッドでツイートできます。
    詳しくは twitter4j.examples.tweets.UpdateStatus.java をご覧ください。

        // このファクトリインスタンスは再利用可能でスレッドセーフです
        Twitter twitter = TwitterFactory.getSingleton();
        Status status = twitter.updateStatus(latestStatus);
        System.out.println("Successfully updated the status to [" + status.getText() + "].");
    

  3. タイムラインの取得

  4. Twitter.get****Timeline() メソッドでホームタイムラインを返します。
    詳しくは twitter4j.examples.timeline.GetHomeTimeline.java をご覧ください。

        // このファクトリインスタンスは再利用可能でスレッドセーフです
        Twitter twitter = TwitterFactory.getSingleton();
        List<Status> statuses = twitter.getHomeTimeline();
        System.out.println("Showing home timeline.");
        for (Status status : statuses) {
            System.out.println(status.getUser().getName() + ":" +
                               status.getText());
        }
    
    Java1.4 や Processing でコンパイルできませんか? FAQ をご覧ください

  5. ダイレクトメッセージの送受信

  6. Twitter.sendDirectMessage() / Twitter.getDirectMessages() メソッドでダイレクトメッセージの送受信ができます。
    このメッセージは送信した相手にしか見えません。
    詳しくは twitter4j.examples.directmessage.SendDirectMessage.java をご覧ください。

        // このファクトリインスタンスは再利用可能でスレッドセーフです
        Twitter sender = TwitterFactory.getSingleton();
        DirectMessage message = sender.sendDirectMessage(recipientId, message);
        System.out.println("Sent: " message.getText() + " to @" + message.getRecipientScreenName());
    
    Java1.4 や Processing でコンパイルできませんか? FAQ をご覧ください

  7. Tweetの検索

  8. Query クラスと Twitter.search(twitter4j.Query) メソッドで検索を行えます。
    詳しくは twitter4j.examples.search.SearchTweets.java をご覧ください。

        // このファクトリインスタンスは再利用可能でスレッドセーフです
        Twitter twitter = TwitterFactory.getSingleton();
        Query query = new Query("source:twitter4j yusukey");
        QueryResult result = twitter.search(query);
        for (Status status : result.getTweets()) {
            System.out.println("@" + status.getUser().getScreenName() + ":" + status.getText());
        }
    
    Java1.4 や Processing でコンパイルできませんか? FAQ をご覧ください

  9. 非同期API

  10. 非同期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();
        AsyncTwitter asyncTwitter = factory.getInstance();
        asyncTwitter.addListener(listenrer);
        asyncTwitter.updateStatus(args[0]);
    

  11. ページ処理

  12. いくつかの API はページ処理をサポートしています。ぺージ処理には以下のパラメータを指定できます:

    page: ページ
    count: 1ページあたりの件数
    since_id: 指定した id 以降の要素を取得
    max_id: 指定した id 以前の情報を取得
    これらのパラメータの指定には Paging クラスを利用します。
    全てのパラメータが必ずサポートされているわけではないことに気をつけてください。どのパラメータがサポートされているかどうかはサポート API リストを確認してください。
        // このファクトリインスタンスは再利用可能でスレッドセーフです
        Twitter twitter = TwitterFactory.getSingleton();
        // 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());
        }
    

  13. OAuth認可

  14. 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[]) throws Exception{
        // このファクトリインスタンスは再利用可能でスレッドセーフです
        Twitter twitter = TwitterFactory.getSingleton();
        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[]) throws Exception{
        // このファクトリインスタンスは再利用可能でスレッドセーフです
        TwitterFactory factory = new TwitterFactory();
        AccessToken accessToken = loadAccessToken(Integer.parseInt(args[0]));
        Twitter twitter = factory.getInstance();
        twitter.setOAuthConsumerKey("[consumer key]", "[consumer secret]");
        twitter.setOAuthAccessToken(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

  15. Twitterアカウントによるサインイン

  16. OAuth を使うと Twitter のアカウントで Web アプリケーションの認証を行うこともできます。これは RequestToken を取得する際に認証後に戻ってくるコールバックURLを指定し、コールバックURLに渡される oauth_verifier パラメータを使って AccessToken を取得することで実現できます。
    シンプルな実装例は http://github.com/yusuke/sign-in-with-twitter にあります。

  17. ストリーミング API

  18. ストリーミング 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().getInstance();
        twitterStream.addListener(listener);
        // sample() method internally creates a thread which manipulates TwitterStream and calls these adequate listener methods continuously.
        twitterStream.sample();
    }
    
    Java1.4 や Processing でコンパイルできませんか? FAQ をご覧ください