OAuth認証が必要なAPIの呼び出し
多くの実務向けWeb API(Google、Microsoft Graph、Twitterなど)は OAuth 2.0 による認証が必須です。
初心者にとっては「トークンを取得してからAPIを呼び出す」という流れが少し難しく感じられるので、コード例とテンプレートをかみ砕いて説明します。
基本の考え方
- OAuth 2.0とは?
ユーザーの認証情報(ID/パスワード)を直接扱わず、アクセストークン を使ってAPIにアクセスする仕組み。 - 流れ:
- クライアントID・シークレットを使って認証サーバーにアクセス
- アクセストークンを取得
- トークンをHTTPヘッダーに付けてAPIを呼び出す
テンプレ1:アクセストークンを取得する(POSTリクエスト)
Sub GetOAuthToken()
Dim http As Object
Dim url As String
Dim postData As String
Dim response As String
' 認証サーバーのトークンエンドポイント(例)
url = "https://example.com/oauth/token"
' クライアント情報と認証情報
postData = "grant_type=client_credentials" & _
"&client_id=あなたのClientID" & _
"&client_secret=あなたのClientSecret"
' HTTPオブジェクト作成
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", url, False
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
http.Send postData
response = http.responseText
MsgBox "トークンレスポンス: " & response
End Sub
VB- ポイント:
grant_type=client_credentialsは「サーバー間通信」用の認証方式。- レスポンスはJSON形式で返り、
access_tokenを取り出す必要がある。
テンプレ2:レスポンスからアクセストークンを取り出す
※「VBA JSON」ライブラリ(JsonConverter.bas)を導入しておくと便利。
Sub ParseOAuthToken()
Dim http As Object
Dim url As String
Dim postData As String
Dim response As String
Dim Json As Object
url = "https://example.com/oauth/token"
postData = "grant_type=client_credentials&client_id=xxx&client_secret=yyy"
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", url, False
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
http.Send postData
response = http.responseText
' JSON解析
Set Json = JsonConverter.ParseJson(response)
Dim token As String
token = Json("access_token")
MsgBox "取得したトークン: " & token
End Sub
VB- ポイント:
ParseJsonでレスポンスをDictionaryに変換。Json("access_token")でトークンを取り出す。
テンプレ3:アクセストークンを使ってAPIを呼び出す(GET)
Sub CallAPI_WithOAuth()
Dim http As Object
Dim url As String
Dim token As String
Dim response As String
' 事前に取得したトークンを変数にセット
token = "ここに取得したアクセストークンを入れる"
' 呼び出すAPIのURL
url = "https://example.com/api/data"
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", url, False
http.setRequestHeader "Authorization", "Bearer " & token
http.Send
response = http.responseText
MsgBox "APIレスポンス: " & response
End Sub
VB- ポイント:
Authorization: Bearer トークンをヘッダーに付ける。- これで認証済みのAPI呼び出しが可能。
テンプレ4:シートに展開する(実務向け)
Sub CallAPI_ToSheet()
Dim http As Object
Dim url As String
Dim token As String
Dim response As String
Dim Json As Object
Dim ws As Worksheet: Set ws = Worksheets("Data")
token = "取得したアクセストークン"
url = "https://example.com/api/users"
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", url, False
http.setRequestHeader "Authorization", "Bearer " & token
http.Send
response = http.responseText
Set Json = JsonConverter.ParseJson(response)
ws.Cells.Clear
ws.Range("A1").Value = "名前"
ws.Range("B1").Value = "メール"
Dim i As Long
For i = 1 To Json.Count
ws.Cells(i + 1, 1).Value = Json(i)("name")
ws.Cells(i + 1, 2).Value = Json(i)("email")
Next i
MsgBox "APIデータをシートに展開しました!"
End Sub
VB- ポイント:
- JSON配列をループしてExcelに書き込む。
- 実務で「ユーザー一覧」「商品一覧」などを取り込むのに便利。
例題で練習
'例1:トークンを取得する
'例2:レスポンスからトークンを取り出す
'例3:トークンを使ってAPIを呼び出す
'例4:レスポンスをシートに展開する
VB初心者向けポイント
- OAuthは「トークンを取得してからAPIを呼ぶ」流れ → 2段階構成。
- トークンはヘッダーに付ける →
Authorization: Bearer トークン。 - JSON解析ライブラリを導入すると便利 → レスポンス処理が簡単。
- シート展開が実務で最も使いやすい → API連携の定番パターン。
👉 この「OAuth必要なAPIテンプレ」を覚えておけば、Excel VBAで 認証付きAPIを呼び出し、シートにデータを展開して業務に活用する処理 を簡単に作成できます。
