##はじめに
EC業界ではおなじみネクストエンジンのAPIに対して
MS Excelブックから接続、データ取得までを記載します。
アカウントの取得、アプリケーションの申請等下準備については割愛しますが、いずれドキュメント化したいと思います。
Excelブックという便利な記憶領域があるので、ネクストエンジンから取得したアクセストークン等はセルの中に入れておけば良いと思います。
以下にサンプルコードを示します。
必要な取得条件を設定し、ネクストエンジンAPIに接続、Json経由で必要な受注明細データを取得してExcelシートに貼り付けています。
※JsonのパースについてはJsonConverterをインポートして使用しています。(参考サイトを参照ください)
###サンプルコード
getmeisai.bas
'受注明細処理取得(ネクストエンジンAPI接続)
Private Sub getmeisai()
Dim Token As String 'アクセストークン
Dim Refresh As String 'リフレッシュトークン
Dim jsonObj As Object 'パースしたjson用のオブジェクト
Dim httpReq As New XMLHTTP60
Dim i As Integer 'loopカウンタ
Dim rngToken As Range
Dim rngRefresh As Range
Dim ws As Excel.Worksheet
Dim ary() As Variant
Dim cnt As Long 'レコード件数
'取得する受注明細フィールド
Const FIELDS As String = "&fields=receive_order_row_receive_order_id,receive_order_purchaser_name,receive_order_row_goods_id,receive_order_row_stock_allocation_quantity"
'受注明細を取得するときの条件(受注分類タグ=[hoge] AND 受注状態区分=納品書印刷済み)
Const WHERE As String = "&receive_order_cancel_type_id-eq=0&receive_order_gruoping_tag-neq=[hoge]&receive_order_row_goods_name-like=%hoge%&receive_order_order_status_id-eq=40"
Set ws = Worksheets("hoge")
Set rngToken = ws.Range("J2")
Set rngRefresh = ws.Range("J3")
'画面からアクセストークン・リフレッシュトークンをセットする
Token = rngToken.Value
Refresh = rngRefresh.Value
With httpReq
'リクエストURLとエンドポイント
.Open "POST", "https://api.next-engine.org/api_v1_receiveorder_row/search"
'ヘッダ
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
'パラメータを入れて送信
.send ("&access_token=" & Token & "&refresh_token=" & Refresh & FIELDS & WHERE)
'jsonをパースする
Set jsonObj = JsonConverter.ParseJson(.responseText)
End With
Set httpReq = Nothing
'取得したトークンをそれぞれ画面に戻す
If jsonObj("result") = "success" Then
rngToken.Value = jsonObj("access_token")
rngRefresh.Value = jsonObj("refresh_token")
rngToken.Offset(0, 1).Value = jsonObj("access_token_end_date")
rngRefresh.Offset(0, 1).Value = jsonObj("refresh_token_end_date")
Set rngToken = Nothing
Set rngRefresh = Nothing
ws.Range("A2:D1000").ClearContents
'件数を取得
cnt = jsonObj("count")
'取得した検品対象データを配列に埋め込む
ReDim Preserve ary(cnt - 1, 3)
For i = 1 To cnt
Application.StatusBar = "処理中" & i & "/" & jsonObj("count")
ary(i - 1, 0) = CStr(jsonObj("data")(i)("receive_order_purchaser_name"))
ary(i - 1, 1) = CLng(jsonObj("data")(i)("receive_order_row_receive_order_id"))
ary(i - 1, 2) = CStr(jsonObj("data")(i)("receive_order_row_goods_id"))
ary(i - 1, 3) = CInt(jsonObj("data")(i)("receive_order_row_stock_allocation_quantity"))
Next i
'シートにはめ込む
ws.Range(ws.Cells(2, 1), ws.Cells(cnt + 1, 4)).Value = ary
ThisWorkbook.Save
Else
Call MsgBox("受注情報を取得できませんでした ", vbExclamation, "エラー")
End If
Set jsonObj = Nothing
Application.StatusBar = ""
End Sub
##参考サイト
エクセルVBAでHTTPリクエストをする最も簡単なプログラム
【VBA】JSONファイルの内容をEXCELファイルに読み込む
宇宙一わかりやすい?VBA-JSONを使ったJSONパースのしかた