【VBA】HTTP通信でWEBスクレイピング6~WEBAPIを使ってみる~

WEBAPIを使ってみる

シルバーウィークも外出しないJimです。どうも✋

 

連休なんて『如何に体調崩さないようにするか』っていう修行じゃん。いらんて。

ほい。ってことで、今回は『WEBAPIを使ってみる』です。

自分で拵えたWEBAPIをVBAで使うっていう謎の記事。。。

まあ、いいや。

 

1、はじめに

前回までHTTP通信でWEBスクレイピングをやってきたけれど、実はWEBサイトによっては面倒な技術(WebSocket等)を使ってたりして難易度が跳ね上がることがある。

出来ないこともないかもしれないけど面倒だと思う。

というか、本来はプログラムする前に何のためにWEBスクレイピングが必要なのかというところから考えるのが大事。大事、要件定義。

殆どはWEBアプリケーションが対象で、サーバーにあるDBから何らかの情報を取得・追加・更新することが目的でしょう。

WEBアプリはサーバー内で動くプログラムのことで、上記のこと以外にも何かしらの計算やファイルの生成なども行うので、もしかするとソレが目的かもしれないが。。。

どちらにせよ、仕事っていうのは難しくしちゃうと、、難しい。

 

なので、順当に考えると⇒

①DBに直接接続できる(ODBC接続など

この環境なら、わざわざHTTP通信やブラウザを操作する必要はなくSQLを使えばよい。

(DB側で更新権限を設定できるので担当部署に相談するのもいいかもしれない)

 

②WEBAPIが用意されている

今回、取り上げる部分です。後で説明します。

 

③HTTP通信を直接行う

『①②』が不可能でWEBを介す必要がある場合、単純なGET/POSTなら今回やったHTTP通信を試してみるとよい。

 

④ブラウザを操作

何らかのドライバやライブラリ等を使ってブラウザを操作する。

 

⑤最終手段

ロボットになりきって「ウィーン!」と言いながら手動操作します。

 

 

2、WEBAPIとは

SFDCやSAPなどの大きめのパッケージには、だいたいWEBAPIが用意されています。(確認要:利用きるかはグレードによる)

ネーミングから想像できるかもしれないけれど、簡単に例えると『異なるプログラム同士がWEBを介してやり取りする仕組み』の事で、主流なのはJSONのリクエストに対してデータを処理してJSONで処理結果をレスポンスするものです。

JSON(JavaScript Object Notation)とは『人間が読みやすく、コンピューターも処理しやすい形式』のこと。

例でいうと⇒

{
  "配列の名前": [
    {
      "name": "山田太郎",
      "department": "情報システム",
      "age": 30,
      "gender": "男"
    }
  ]
}

JSONはサーバー側のプログラムでは秒で配列にできるので便利。配列にした後に様々な処理を行います。

そう。配列ってことは一度に複数の処理ができるので、前述の『1、はじめに』に記載したような優先順位(SQLの次)にしたのだ。

WEBAPIやJSONについては、薄っぺらい説明なので気になったらググってください。テヘペロ

WEBAPIはプログラムによって使い方が違うので仕様を確認ましょう。

 

3、WEBAPIを使ってみる

使用するWEBAPIの仕様⇒

①従業員の新規追加をするプログラム(実際にはDB登録されません)

②ログイン無しで使用可能(手抜きしました)

③JSON形式で下記の項目をPOSTする(ヘッダ:"Content-Type", “application/json")

④配列の名前:『employees』で固定

name:氏名(文字列がないとエラー)

department:部署名(文字列がないとエラー)

age:年齢(数値以外はエラー)

gender:性別(男女以外はエラー)

⑤処理結果はsuccessをtrueかfalseでレスポンス(trueの場合は『名前と新規の従業員番号』も返す)

 

今回は例として下記2名分の新規登録を行う。

{“employees":[

{“name":"山田太郎","department":"営業部","age":30,"gender":"男"}

,{“name":"佐藤花子","department":"総務部","age":28,"gender":"女"}

]}

 

それでは行ってみましょう。

Public Sub json()

    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")

    'Json形式で新規社員情報を作成
    Dim json As String
    json = "{""employees"":[" & _
        "{""name"":""山田太郎""," & _
        """department"":""営業部""," & _
        """age"":30," & _
        """gender"":""男""}," & _
        "{""name"":""佐藤花子""," & _
        """department"":""総務部""," & _
        """age"":28," & _
        """gender"":""女""}" & _
        "]}"

    'WEBAPIにPOST
    http.Open "POST", url & "/test_api.php", False
    http.setRequestHeader "Content-Type", "application/json"
    http.Send json

    Debug.Print http.Status
    Debug.Print http.responseText

    Set http = Nothing

End Sub

 

成功の場合は下図のようにsuccessがtrueで社員番号と名前がレスポンスされる。

 

失敗すると下図のようにfalseがレスポンスされる。

 

特に詳しい解説はなしです。

単純にJSONをPOSTしてるだけなので『HTTP通信でWEBスクレイピング』の1~5を理解していれば余裕でわかると思います。

 

 

はい。ってことで『WEBAPIを使ってみる』でした。

次回のオマケ回で『HTTP通信でWEBスクレイピング』を最終回にしようと思ってます。

何か思い出したら追加するかもしれないけどね。

したら、またね✋