AccessのVBAからWebAPIをコールする方法です。
私はインセンティブ配信用のURLをAPI関数を使って取得するために利用しました。
会社でプレゼント企画を実施するならeギフト(デジタルギフト)がおすすめ!会社でプレゼント企画を開催するなら、eギフト(デジタルギフト)がおすすめです。思ったより手軽に発注、納品いただけますのでお客様へのインセンティブに最適です。配信会社を選定する際のポイントをご紹介しています。...
VBAからWebAPI関数をコールするための準備
HTTP通信を使うためには、「Microsoft XMLライブラリ」が必要です。
まずは、参照設定を追加しましょう。
VBAからAPIをコールする関数
準備が出来たらAPIコールの関数を作ります。
サンプルプログラムをコピーしてご利用ください。(引数も戻りもJSON形式のサンプルです)
※自己責任でお願いします(;^_^A
このサンプルでは、引数は以下の通りです。
- Request:”POST” または “GET”
- url:APIのURL
- accesstaken:認証トークン
- param:Json形式の文字列
.Open request, ulr, False
Openメソッドの第3引数は同期タイプです。
True=非同期、False=同期です。
同期の場合、通信が終了するまでそれ以降の処理が実行されません。
通信の結果を待って以降の処理を実行したい場合はFalseを指定します。
第3引数を指定しなかった場合、デフォルトは非同期となります。
' *============================================================== ' * WebAPIをキックする ' * ' * @param request POST/GET ' * @param url ' * @param accesstken(Encodeが必要であればEncode済みの文字列) ' * @param param(jsonオブジェクト) ' * @return responseテキストデータ ' *============================================================== Public Function KickWebApiOfJson(ByVal request As String, ByVal url As String, Optional ByVal accesstaken As String, Optional ByVal param As String) As String On Error GoTo Err_Exit With CreateObject("MSXML2.XMLHTTP") .Open request, url, False 'Basic認証 .setRequestHeader "Authorization", accesstaken .setRequestHeader "Content-Type", "application/json; charset=UTF-8" .send param Do While .readyState < 4 DoEvents Loop 'デバッグは↓をアンコメントしてレスポンスを確認 Debug.Print .responseText '.responseTextを戻り値とする KickWebApiOfJson = .responseText End With Exit Function Err_Exit: MsgBox Err.Number & ":" & Err.Description, vbOKOnly + vbCritical End Function
.responseTextにAPIコールの結果値が戻ります。
本サンプルでは戻り値もJSON形式であるという想定です。
戻ったJSON文字列から必要な情報を取り出す必要があるため、その作業はまた別記事でUPします。
アクセストークンをエンコードする必要がある場合
WebAPI関数の仕様でアクセストークンをエンコードする必要がある場合は以下の関数を使ってトークンをエンコードしてから”Authorization”に渡しましょう!
' *============================================================== ' * テキストをBase64でエンコードします ' * ' * @param text 変換する値 ' * @return Base64フォーマットデータ ' *============================================================== Public Function EncodeToBase64(ByRef text As String) As String ' オブジェクトの準備 Dim node As Object Set node = CreateObject("Msxml2.DOMDocument.3.0").createElement("base64") ' エンコード node.DataType = "bin.base64" node.nodeTypedValue = ConvertToBinary(text) ' 関数で取り除けない改行を削除して返却 EncodeToBase64 = Replace(node.text, vbLf, "") End Function
AccessVBAでJSONフォーマットのデータを作成するAccessからAPIをコールしてクラウドサービスから情報を取得することになりました。
APIの引数と戻り値の形式はJSONフォー...
ABOUT ME