このドキュメントでは、Twitter APIへ承認済みリクエストを送信するにはどのようにHTTPリクエストを作成するのかを説明します。
Twitter API は全てHTTPプロトコル上で動作します。つまり、Twitter APIを使うソフトウェアはTwitterサーバに対して、決められた構造のメッセージを送信します。 例えば、“Hello Ladies + Gentlemen, a signed OAuth request!”というツイート文の投稿をリクエストするには以下のようになります:
POST /1/statuses/update.json?include_entities=true HTTP/1.1 Accept: */* Connection: close User-Agent: OAuth gem v0.4.4 Content-Type: application/x-www-form-urlencoded Content-Length: 76 Host: api.twitter.com status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
HTTP ライブラリを使えば、簡単に上記リクエストを生成して発行できるでしょう。しかし、以下の情報がないので上記リクエストは無効と見なされます:
アプリケーションがこの情報を送信できるようにするため、Twitter APIでは OAuth 1.0a protocolを使用しています。
At a very simplified level, Twitterの実装において、承認が必要なリクエストでは上記4つの質問の答えとなる十分な情報をHTTP Authorization
ヘッダに記載する必要があります。
上記の HTTP リクエストにこのヘッダを追加して変更すると、以下のようになります (通常 Authorization
ヘッダは一行にする必要がありますが、ここでは読みやすくするために改行しています):
POST /1/statuses/update.json?include_entities=true HTTP/1.1 Accept: */* Connection: close User-Agent: OAuth gem v0.4.4 Content-Type: application/x-www-form-urlencoded Authorization: OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", oauth_version="1.0" Content-Length: 76 Host: api.twitter.com status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
このリクエストを送信することで、Twitter APIはリクエストを有効と認めて受け付け、実際にthis tweetを作成します。
この署名プロセスがあなたの組み込み範疇を超えていると感じた場合は、アクセストークンを使わずにTwitter API とやり取りできるWeb Intentsの使用を検討してください。
Authorization
ヘッダにはキーと値の組み合わせが7つあるのが分かると思います。キーは全て“oauth_”の文字から始まっています。
Twitter API をリクエストする場合、これら7つの値を集めてヘッダを作成することで、リクエストに使う承認情報を設定することができます。
各値を生成する方法については以下で説明しています:
Consumer key
oauth_consumer_key
ではリクエストを作成したアプリケーションが何なのかを識別します。dev.twitter.com/appsのあなたのアプリケーションの設定ページをチェックしてこの値を取得してください。
oauth_consumer_key
|
xvz1evFS4wEEPTGEFPHBog |
Nonce
oauth_nonce
パラメータは、あなたのアプリケーションがリクエストごとに生成する重複のないトークンです。 Twitter ではこの値を使ってリクエストが複数回送信されているかどうかを判別します。この値はbase64 エンコードした32バイトのランダムデータによって生成し、そこから単語以外の文字を取り除いたものですが、とりあえずランダムな文字列を生成する方法であればここでは問題ありません。
oauth_nonce
|
kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg |
Signature
oauth_signature
パラメータには、他の全てのリクエストパラメータと二つの秘密情報を署名アルゴリズムで処理して作成した値を設定します。
署名の目的は、リクエストが転送時に改竄されていないことをTwitterが確認できる、リクエストを送信したアプリケーションをTwitterが確認できる、アプリケーションがユーザーのアカウントにアクセスする承認を受けているかTwitterが確認できる、といったことです。
このリクエストで oauth_signature
が算出されるプロセスについては署名を作成するで説明しています。
oauth_signature
|
tnnArxj06cWHq44gCs1OSKk/jLY= |
Signature method
Twitterで使用されるoauth_signature_method
は HMAC-SHA1
です。この値はTwitter APIへ送信される認証済みリクエストに使用されます。
oauth_signature_method
|
HMAC-SHA1 |
Timestamp
oauth_timestamp
パラメータはリクエストがいつ作成されたかを示します。この値はリクエストが生成されたタイミングのUnixエポック秒にしなければならず、大抵のプログラミング言語で簡単に生成可能です。 Twitterは作成時期が古すぎるリクエストを拒否するため、NTPで時刻同期を行ってコンピュータの時間を正常に保つことが重要です。
oauth_timestamp
|
1318622958 |
Token
oauth_token
パラメータは通常、アプリケーションに対して付与するユーザーアカウントへのアクセス権を表します。
この値を使わない、または別のトークン形式を使う認証リクエストもいくつかありますが、それらについてはアクセストークンを取得するで説明します。
もっとも一般的なリクエストの場合、アクセストークンと呼ばれるものを使用します。dev.twitter.com/appsのアプリケーションの設定ページで、あなたのアカウントで使う有効なアクセストークンを生成できます。
oauth_token
|
370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb |
Version
oauth_version
パラメータは、Twitter APIへ送信される全てのリクエストにおいて常に1.0
となります。
oauth_version
|
1.0 |
ヘッダ文字列を作成するには、「コピー先文字列」という空の文字列へ必要な文字列を追加していくのをイメージしてください。
この文字列を作成する際には、各値をパーセントエンコードするのには特に注意してください。例えば、 tnnArxj06cWHq44gCs1OSKk/jLY=
のoauth_signature
値は tnnArxj06cWHq44gCs1OSKk%2FjLY%3D
とエンコードしなければなりません。
収集した上記の各値に対してこれらの手順を実施した結果は、以下の文字列になります:
OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", oauth_version="1.0"
この値をリクエストの Authorization
ヘッダとして設定してください。