OAuth特有の引数を準備するVBA

手順1の部分のスクリプトは以下のようになります。

[リスト2]手順1.OAuth特有の引数を準備する

Private Sub SetParam(ByVal phase As Integer)

    param("oauth_consumer_key") = Range("consumer_key")
    param("oauth_signature_method") = "HMAC-SHA1"
    timestamp = DateDiff("s", #1/1/1970#, Now)
    param("oauth_timestamp") = CStr(timestamp)
    param("oauth_nonce") = CStr(timestamp + 1)
    Select Case phase
        Case 2 'アクセス・キー取得フェーズの追加引数
            param("oauth_token") = Range("request_token")
            param("oauth_token_secret") = Range("request_secret")
            param("oauth_verifier") = Range("pinCode")
        Case 3 'Webサービス利用フェーズの追加引数
            param("oauth_token") = Range("access_token")
    End Select

End Sub

これは、OAuthで必要な引数を設定したプロシージャです。仮引数のphaseはそれぞれ以下の意味を持っています(表3)。

表3. 仮引数phaseの意味

意味
1 リクエスト・トークンの要求
2 アクセス・トークンの要求
3 Webサービスへのアクセス

設定する引数のイメージは、図5のようになります。

図5.OAuthの引数の設定イメージ(フェーズ1の場合)

詳細は、以下の通りです。P1~3列の○/-は、フェーズ1~3での指定の要否を表します。

表4.OAuthの引数の種類と設定

P1 P2 P3 引数名 内容 設定値
oauth_consumer_key コンシューマー・キー アプリ登録時の文字列を設定
oauth_signature_method 電子署名の方式 Twitterの場合、HMAC-SHA1固定
oauth_timestamp 1970年1月1日から現在までの秒数 HTTP通信を行うごとに増加する値を設定する必要あり
oauth_nonce ランダムな文字列 HTTP通信を行うごとに異なる必要あり
oauth_token トークン文字列 フェーズ2ではリクエスト・トークン、フェーズ3ではアクセス・トークンを設定
oauth_verifier ユーザーが認証したことの確認 フェーズ2で、ブラウザに表示されたPINコードを設定
oauth_signature 電子署名 上記の引数を含む文字列から作成した電子署名の文字列を設定

timestampには、DateDiff関数を用いて設定値を求め、CStr関数で文字列に変換したものを、oauth_timestamp引数に設定しています。また、oauth_nonce引数には重複しないよう、便宜的にtimestamp + 1 の値を文字列に変換して設定しています。