Java から Twitter API にアクセスするときは、Twitter4J が定番です。
ただ、せっかく新しい Twitter API v2 とそれに対応した公式の twitter-api-java-sdk が出ていたので、今回はこちらを使ってみました。
その際の、ツイートするまでの手順とサンプルコードをまとめました。
必要な手順は以下の3つです。
- 開発者情報を登録
- "Client ID" と "Client Secret" を取得
- "Access token" と "Refresh token" を取得
- Twitter API Java SDK でツイート
開発者情報を登録
- Twitter Developers を開く
- 開発者情報(利用目的など)を入力
- 開発者契約(Developer Agreement)を承諾して、"Submit" をクリック
- メールが送られてくるので、その中の "Confirm your email" をクリック
"Client ID" と "Client Secret" を取得
- 適当なアプリ名(あとで変更可)を設定して、"Next" をクリック
- 値をメモして、"App settings" をクリック
- "User authentication settings" の "Set up" をクリック
- "Callback URL", "Website URL" (適当なURLで大丈夫)を設定して、"Save" をクリック
- "Client ID" と "Client Secret" をメモして、"Done" をクリック
"Access token" と "Refresh token" を取得
1. サンプルプログラムをチェックアウト
git@github.com:YujiSoftware/twitter-api-java-sdk-sample.git
2. 先ほど取得した Client ID / Client Secret、設定した Callback URL を twtitter.properties
に書く
TWITTER_OAUTH2_CLIENT_ID=xxxx
TWITTER_OAUTH2_CLIENT_SECRET=xxxx
TWITTER_OAUTH2_CALLBACK=https://xxxx
3. oauth を実行(OAuth.java)
./gradlew oauth:run
OAuth.java
の中で、スコープ(権限)を4つ設定しています。
-
ツイートするのに必要
tweet.read
tweet.write
users.read
-
トークンの更新に必要
offline.access
ほかのスコープが必要な時は、書き換えて再度実行してください。
4. メッセージ(with URL)が表示されて止まります。
Go to the Authorization URL and authorize your App:
https://twitter.com/i/oauth2/authorize?code_challenge=...
After that paste the authorization code here
>>
以下の手順で、コードを貼り付けます。
- 表示されている URL (
https://twitter.com/i/oauth2/authorize?code_challenge=...
) にブラウザでアクセス - "アプリにアクセスを許可" をクリック
- リダイレクトされるので、そのページの URL の
code
パラメータをコピー (code=xxxx
のxxxx
の部分) - 貼り付けて、Enter
5. 以下のメッセージが表示されるので、値をメモ
Access token: xxxx
Refresh token: yyyy (may be null)
Twitter API Java SDK でツイート
1. 先ほど取得した Access token / Refresh token を twitter.properties
に設定
(Refresh token は、null なら設定不要)
TWITTER_OAUTH2_CLIENT_ID=xxxx
TWITTER_OAUTH2_CLIENT_SECRET=xxxx
TWITTER_OAUTH2_ACCESS_TOKEN=xxxx
TWITTER_OAUTH2_REFRESH_TOKEN=yyyy
2. tweet を実行 (Tweet.java)
./gradlew tweet:run
これで、うまくいったら「Hello world!」とツイートされています!
Access Token の更新
上記で Access Token を発行していますが、これの有効期限は2時間です。
この時間を超えてツイートする場合、以下のいずれかの方法で Access Token を更新する必要があります。
- 明示的に
TwitterApi#refreshToken()
を呼び出す -
TwitterCredentialsOAuth2
のコンストラクタの第5引数isOAUth2AutoRefreshToken
にtrue
を設定しておく- サンプルコード: Refresh.java