1. 概要

この記事では、JavaアプリケーションでTwitter4Jを使用してTwitterと通信する方法について説明します。

2. Twitter4J

Twitter4J はオープンソースのJavaライブラリであり、 TwitterAPIにアクセスするための便利なAPIを提供します。

簡単に言えば、TwitterAPIを操作する方法は次のとおりです。 私たちはできる:

  • ツイートを投稿する
  • 最新のツイートのリストを使用して、ユーザーのタイムラインを取得します
  • ダイレクトメッセージを送受信する
  • ツイートなどを検索する

このライブラリにより、これらの操作を簡単に実行できるようになります。また、ユーザーのセキュリティとプライバシーも確保されます。当然、アプリでOAuthクレデンシャルを構成する必要があります。

3. Mavenの依存関係

pom.xmlでTwitter4Jの依存関係を定義することから始める必要があります。

<dependency>
    <groupId>org.twitter4j</groupId>
    <artifactId>twitter4j-stream</artifactId>
    <version>4.0.6</version>
</dependency>

ライブラリの新しいバージョンがリリースされているかどうかを確認するには–ここでリリースを追跡します

4. 構成

Twitter4Jの構成は簡単で、さまざまな方法で行うことができます。たとえば、プレーンテキストファイルやJavaクラスで、あるいは環境変数を使用することもできます。

これらの方法を1つずつ見ていきましょう。

4.1. プレーンテキストファイル

twitter4j.properties という名前のプレーンテキストファイルを使用して、構成の詳細を保持できます。 提供する必要のあるプロパティを見てみましょう。

oauth.consumerKey =       // your key
oauth.consumerSecret =    // your secret
oauth.accessToken =       // your token
oauth.accessTokenSecret = // your token secret

これらの属性はすべて、新しいアプリを作成した後、Twitter開発者コンソールから取得できます。

4.2. Javaクラス

ConfigurationBuilder クラスを使用して、JavaでプログラムによってTwitter4Jを構成することもできます。

ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
  .setOAuthConsumerKey("your consumer key")
  .setOAuthConsumerSecret("your consumer secret")
  .setOAuthAccessToken("your access token")
  .setOAuthAccessTokenSecret("your access token secret");
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();

次のセクションでは、データのフェッチを開始するときにTwitterインスタンスを使用することに注意してください。

4.3. 環境変数

環境変数を介して構成することは、私たちが持っているもう1つの選択肢です。 その場合、変数にtwitter4jプレフィックスが必要になることに注意してください。

$ export twitter4j.oauth.consumerKey =       // your key
$ export twitter4j.oauth.consumerSecret =    // your secret
$ export twitter4j.oauth.accessToken =       // your access token
$ export twitter4j.oauth.accessTokenSecret = // your access token secret

5. リアルタイムツイートデータの追加/取得

完全に構成されたアプリケーションを使用して、最終的にTwitterと対話できます。

いくつかの例を見てみましょう。

5.1. ツイートを投稿する

Twitterのツイートを更新することから始めます。

public String createTweet(String tweet) throws TwitterException {
    Twitter twitter = getTwitterinstance();
    Status status = twitter.updateStatus("creating baeldung API");
    return status.getText();
}

status.getText()、を使用すると、投稿されたばかりのツイートを取得できます。

5.2. タイムラインを取得する

ユーザーのタイムラインからツイートのリストを取得することもできます。

public List<String> getTimeLine() throws TwitterException {
    Twitter twitter = getTwitterinstance();
    
    return twitter.getHomeTimeline().stream()
      .map(item -> item.getText())
      .collect(Collectors.toList());
}

twitter.getHomeTimeline()、を使用すると、現在のアカウントIDで投稿されたすべてのツイートを取得できます。

5.3. ダイレクトメッセージを送信する

Twitter4jを使用して、フォロワーに直接メッセージを送受信することもできます。

public static String sendDirectMessage(String recipientName, String msg) 
  throws TwitterException {
 
    Twitter twitter = getTwitterinstance();
    DirectMessage message = twitter.sendDirectMessage(recipientName, msg);
    return message.getText();
}

sendDirectMessageメソッドは2つのパラメーターを取ります。

  • RecipientName :メッセージ受信者のTwitterユーザー名
  • msg :メッセージの内容

受信者が見つからない場合、sendDirectMessageは例外コード150で例外をスローします。

5.4. ツイートを検索する

テキストを含むツイートを検索することもできます。 これにより、ユーザーのユーザー名でツイートのリストを取得します。

このような検索を実行する方法を見てみましょう。

public static List<String> searchtweets() throws TwitterException {
 
    Twitter twitter = getTwitterinstance();
    Query query = new Query("source:twitter4j baeldung");
    QueryResult result = twitter.search(query);
    
    return result.getTweets().stream()
      .map(item -> item.getText())
      .collect(Collectors.toList());
}

明らかに、 QueryResult で受信した各ツイートを繰り返し処理し、相対データを取得できます。

5.5. ストリーミングAPI

Twitter Streaming API は、リアルタイムで更新が必要な場合に役立ちます。 スレッドの作成を処理し、イベントをリッスンします。

ユーザーからのツイートの更新をリッスンするリスナーを作成しましょう。

public static void streamFeed() {

    StatusListener listener = new StatusListener() {

        @Override
        public void onException(Exception e) {
            e.printStackTrace();
        }
        @Override
        public void onDeletionNotice(StatusDeletionNotice arg) {
        }
        @Override
        public void onScrubGeo(long userId, long upToStatusId) {
        }
        @Override
        public void onStallWarning(StallWarning warning) {
        }
        @Override
        public void onStatus(Status status) {
        }
        @Override
        public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
        }
    };

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

    twitterStream.addListener(listener);

    twitterStream.sample();
}

println()ステートメントを配置して、すべてのメソッドで出力ツイートストリームをチェックできます。 すべてのツイートには、ロケーションメタデータが関連付けられています。

APIによってフェッチされるすべてのツイートデータはUTF-8形式であり、Twitterは多言語プラットフォームであるため、一部のデータ形式はその発信元に基づいて認識できない場合があることに注意してください。

6. 結論

この記事は、JavaでTwitter4Jを使用するための簡単で包括的な紹介でした。

示されている例の実装は、GitHub にあります。これはMavenベースのプロジェクトであるため、そのままインポートして実行するのは簡単です。 必要な変更は、独自のOAuthクレデンシャルを挿入することだけです。