Twitter API をよく叩いている人であればもうご存知だとは思いますが、つい先日、Twitter API の認証・認可方法の1つとして、Application-only authentication が追加されました。
この Application-only authentication はその名が示すとおり (?)、ユーザの Twitter アカウントや認証に依存しない、分析目的のためにツイートを収集するなどのアプリケーションを作る際に向いている認証方法となります。レートリミットも、通常の OAuth 認証のものとは異なり一部大きく緩和されていたりします。
認証の手順は、従来の OAuth 1.0a ベースの手順とは異なり、かなり簡単な手順でアクセス用のトークンを払い出せるようになっています。すでに Python などでも お試し用のプログラムが作られているほどです。
今回は私が慣れ親しんでいる Ruby で、/oauth2/token
のエンドポイントを叩いてアクセス用トークンを取得するプログラムを書いてみました。
require 'net/https'
require 'base64'
require 'uri'
Net::HTTP.version_1_2
CONSUMER_KEY = 'ここに consumer_key を設定する'
CONSUMER_SECRET = 'ここに consumer_secret を設定する'
bearer_token = "#{CONSUMER_KEY}:#{CONSUMER_SECRET}"
encoded_bearer_token = Base64.strict_encode64(bearer_token)
url = URI.parse("https://api.twitter.com/oauth2/token")
https = Net::HTTP.new(url.host, 443)
https.use_ssl = true
https.start do
header = {}
header["Authorization"] = "Basic #{encoded_bearer_token}"
header["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"
req = Net::HTTP::Post.new(url.path, header)
req.body = "grant_type=client_credentials"
resp = https.request(req)
puts resp.body
end
このプログラムを実行するには、 http://dev.twitter.com/ でサインイン&アプリケーションの登録を済ませ、そこで払いだされた consumer_key / consumer_secret を上記プログラムの定数に仕込んであげる必要があります。
実行すると、
{"token_type":"bearer","access_token":"ここにトークンが設定される"}
のような出力が得られるので、この "access_token" に設定された文字列を、呼び出したい API の HTTP リクエストヘッダに
Authorization: Bearer アクセストークン
と設定して呼び出せば、ちょっと快適な Twitter API ライフが送れるようになります。