excel_vba_http_https_get_post_レスポンス_JSON

excelのvbaで httpおよび https のプロトコルで

リクエストを発行し get とpost の両方でパラメタを送信し、


返ってきたレスポンスに対して処理が行えるのでしょうか?


get、postでの送信するデータ、

受け取るレスポンスのタイプともに JSONに指定もできるのでしょうか?


    ↓


ExcelのVBAでHTTPおよびHTTPSプロトコルを使用して

GETおよびPOSTリクエストを発行し、

パラメータを送信し、返ってきたレスポンスに対して処理を行うことが可能です。


VBAでは、`MSXML2.ServerXMLHTTP`オブジェクトや

`WinHttp.WinHttpRequest`オブジェクトを使用して


リクエストを行うことができます。



### GETリクエスト


GETリクエストでは、URLにクエリパラメータを付与してリクエストを送信します。


```vba


Sub GetRequest()


    Dim http As Object

    Set http = CreateObject("MSXML2.ServerXMLHTTP.6.0")

    

    ' GETリクエストを発行(URLにパラメータを付与)

    http.Open "GET", 

"https://api.example.com/data?param1=value1&param2=value2",

False


    http.setRequestHeader 

"Content-Type", "application/json"

    

    ' リクエストを送信

    http.Send

    

    ' レスポンスの取得

    If http.Status = 200 Then

        MsgBox http.responseText ' レスポンス(JSON)を表示

    Else

        MsgBox "Error: " & http.Status

    End If

End Sub


```


### POSTリクエスト

POSTリクエストでは、ボディにデータをJSON形式で送信できます。


```vba


Sub PostRequest()


    Dim http As Object

    Dim postData As String

    

    ' 送信するデータ(JSON形式)

    postData = "{""param1"":""value1"",

""param2"":""value2""}"

    

    Set http = CreateObject("MSXML2.ServerXMLHTTP.6.0")

    

    ' POSTリクエストを発行

    http.Open "POST", 

"https://api.example.com/data", 

False

    http.setRequestHeader "Content-Type", 

"application/json"

    

    ' リクエストを送信(JSONデータを含む)

    http.Send postData

    

    ' レスポンスの取得

    If http.Status = 200 Then

        MsgBox http.responseText ' レスポンス(JSON)を表示

    Else

        MsgBox "Error: " & http.Status

    End If

End Sub


```


### JSONレスポンスの処理


レスポンスがJSONの場合、

VBAでJSONをパースして処理するには、

外部のライブラリを利用することが一般的です。


例えば、「VBA-JSON」というライブラリを使用することで、

JSONをパースしてVBAで操作可能なオブジェクトに変換できます。



#### VBA-JSONの例


1. [VBA-JSON](https://github.com/VBA-tools/VBA-JSON) 

ライブラリをダウンロードし、プロジェクトに追加します。


2. 以下のようにJSONをパースして利用します。



```vba


Sub ParseJsonResponse()


    Dim http As Object

    Dim json As Object

    Dim jsonResponse As String

    

    Set http = CreateObject("MSXML2.ServerXMLHTTP.6.0")

    http.Open "GET", 

"https://api.example.com/data", False

    http.setRequestHeader "Content-Type", 

"application/json"

    http.Send

    

    ' レスポンスを取得

    jsonResponse = http.responseText

    

    ' JSONをパース(VBA-JSONライブラリが必要)

    Set json = JsonConverter.ParseJson(jsonResponse)

    

    ' パースしたデータを使用

    MsgBox json("key1") ' JSONの特定のキーの値を表示

End Sub


```


### まとめ


- **GETリクエスト**:

URLにクエリパラメータを付与して送信可能。


- **POSTリクエスト**:

ボディにJSON形式のデータを送信可能。


- **レスポンス**:

JSON形式で受け取り、VBA-JSONライブラリを使用してパース・処理が可能。


これにより、ExcelのVBAでAPIと連携し、

データの送受信や処理が可能になります。



コメント