今更ですが Twitter API を 貪り始めました。
Twitter4J というライブラリもありますが、先ずは生の API を利用した方法をメモしておきます。
今回はベアラートークンの取得をシンプルに行いたいと思います。
ユーザー認証後に取得できるトークンとは異なり、ユーザ認証不要で取得できます。その代わり使える API は限定されます。
違いについてはこのサイトを参考に。
Twitter REST APIの使い方
調べてみたのですが、ベアラトークンには特に有効期限は設定されていないようです。
開発者用 Twitter アカウントの取得や、アプリケーション申請などは済ませておいてください。
アカウント取得方法の参考です。
Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2018年9月時点の情報 - Qiita
コード
決められたとおりにアクセスすれば取得できるので、先ずはソースの全量を載せます。
getBearerToken メソッドがベアラトークンを取得しているメソッドです。
package org.yyama.twittorej.domein; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.Base64; /** * * BearerTokenクラス * * @author yyama * */ public class BearerToken { private final String token; /** * デフォルトコンストラクタ。ベアラトークンを取得する。 * * @throws IOException */ public BearerToken(String key, String seacret) throws IOException { token = getBearerToken(key, seacret); } private String getBearerToken(String key, String seacret) throws IOException { final String encodedKey = URLEncoder.encode(key, "UTF-8"); final String encodedSeacretKey = URLEncoder.encode(seacret, "UTF-8"); final String encodedString = Base64.getEncoder() .encodeToString((encodedKey + ":" + encodedSeacretKey).getBytes()); URL urlObj = new URL("https://api.twitter.com/oauth2/token"); HttpURLConnection http = (HttpURLConnection) urlObj.openConnection(); http.setDoOutput(true); http.setRequestMethod("POST"); http.setRequestProperty("Authorization", "Basic " + encodedString); http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); http.setUseCaches(false); BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(http.getOutputStream())); wr.write("grant_type=client_credentials"); wr.flush(); wr.close(); // ボディ(コンテンツ)の取得 InputStream is = http.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sbBody = new StringBuilder(); String s; while ((s = reader.readLine()) != null) { sbBody.append(s); sbBody.append("\n"); } // Json 形式で取得されるトークンの文字列だけを切り出して返す。 return getOnlyTokenString(sbBody.toString()); } private String getOnlyTokenString(String sbBody) { String tmp = sbBody.replaceAll("\\{|\\}|\"|\n", ""); return tmp.split(",")[1].split(":")[1]; } /** * ベアラトークンを返す。 * * @return bearer token */ public String token() { return token; } }
HttpURLConnection を利用して、HTTP ヘッダとボディ部を設定してから TwitterAPI にアクセスします。
コメントにも記載していますが、レスポンスは JSON 形式で取得できるので、トークンだけを取得したい場合は整形が必要です。
コンストラクタの引数になっている key と seacret はアプリケーションを Twitter に登録したときに発行される Access token と access token secret です。
余談ですが、コンストラクタ内で final な変数に値を代入する場合、別スレッドが初期化前の final 変数を参照してしまうことがなくなるので、このクラスはスレッドセーフになっています。
まとめ
以上簡単ではありますが、今回は Twitter API を利用してベアラートークンの取得方法を紹介しました。
それでは!
- 作者: 辻村浩
- 出版社/メーカー: ワークスコーポレーション
- 発売日: 2010/04/21
- メディア: 単行本
- 購入: 4人 クリック: 501回
- この商品を含むブログ (30件) を見る
- 作者: 辻村浩
- 出版社/メーカー: 九天社
- 発売日: 2007/09
- メディア: 単行本
- 購入: 2人 クリック: 53回
- この商品を含むブログ (27件) を見る
データを集める技術 最速で作るスクレイピング&クローラー (Informatics&IDEA)
- 作者: 佐々木拓郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/11/29
- メディア: 単行本
- この商品を含むブログ (2件) を見る