LoginSignup
2
4

More than 1 year has passed since last update.

Twitter API をJava(twittered)で実行する

Posted at

はじめに

TwitterAPIのv2が発表され、キャッチアップのために触ってみることにした。
その際にAPIクライアントを twittered を利用するようにした。

twittered

Java製のTwitter API用のAPIクライアント。
公式サイトでも利用を促している。

試したバージョンは 2.6

v1.x も v2 も両方対応している。
更新頻度については高めですが、日本語の解説などは特に、見つからない。

導入方法

Readmeの Code samples を参考にした。

サンプルコード

@Component
public class Twitter {

  private static final String OAUTH_AUTHENTICATE_URL = "https://twitter.com/oauth/authenticate?oauth_token={{oauth_token}}";
  private static final String PLACE_HOLDER_OAUTH_TOKEN = "{{oauth_token}}";

  @Value("${client.twitter.api-key:}")
  private String apiKey;
  @Value("${client.twitter.api-secret-key:}")
  private String apiSecretKey;
  @Value("${client.twitter.callback-url:}")
  private String callbackUrl;

  /**
   * TwitterClientを生成する<br>
   *
   * @return TwitterClient
   */
  public TwitterClient createClient() {
    return
        this.createClient(
            new TwitterAccessToken(""),
            new TwitterAccessTokenSecret(""));
  }

  /**
   * TwitterClientを生成する<br>
   *
   * @param accessToken       Twitterのアクセストークン
   * @param accessTokenSecret Twitterのアクセストークンシークレット
   * @return TwitterClient
   */
  public TwitterClient createClient(
      TwitterAccessToken accessToken,
      TwitterAccessTokenSecret accessTokenSecret) {
    return
        new TwitterClient(
            this.createCredentials(
                accessToken.value(),
                accessTokenSecret.value()));
  }

  /**
   * RequestTokenを取得する<br>
   *
   * @return RequestToken
   */
  public RequestToken getRequestToken() {
    var client = this.createClient();
    return client.getOauth1Token(this.callbackUrl);
  }

  /**
   * 認証URLを取得する<br>
   *
   * @param requestToken RequestToken
   * @return 認証URL
   */
  public String oauthAuthenticate(RequestToken requestToken) {
    return OAUTH_AUTHENTICATE_URL.replace(PLACE_HOLDER_OAUTH_TOKEN, requestToken.getOauthToken());
  }

  /**
   * RequestTokenを取得する<br>
   *
   * @param requestToken RequestToken
   * @param pinCode
   * @return RequestToken
   */
  public RequestToken getOAuth1AccessToken(RequestToken requestToken, String pinCode) {
    var client = this.createClient();
    return client.getOAuth1AccessToken(requestToken, pinCode);
  }

  /**
   * Twitterへ投稿する<br>
   * <pre>POST statuses/update</pre>を実行し、Twitterの投稿IDを返却します<br>
   *
   * @param client  TwitterClient
   * @param message Twitterへの投稿内容
   * @return Twitterの投稿ID
   */
  @Async
  public CompletableFuture<String> postTweet(TwitterClient client, String message) {
    return
        CompletableFuture
            .supplyAsync(() -> client.postTweet(message))
            .thenApply(Tweet::getId);
  }

  private TwitterCredentials createCredentials(String accessToken, String accessTokenSecret) {
    return
        TwitterCredentials.builder()
            .accessToken(accessToken)
            .accessTokenSecret(accessTokenSecret)
            .apiKey(this.apiKey)
            .apiSecretKey(this.apiSecretKey)
            .build();
  }

}

おわりに

Twitter APIの利用の申請方法などは割愛したが、1日で利用できた。
twitterdの書き味も特に不便はなかった。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4