26
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【VBScript】ServerXMLHTTPでWebAPIにアクセスする

Last updated at Posted at 2017-12-02

ad_banner4.gif

このエントリーはアラタナAdventカレンダー3日目のエントリーです。
2日目は @mather314 さんによるエントリーでした。

平素は大変お世話になっております。アラタナ開発部の @aratana_ogawa です。

アラタナ Advent Calendar 2017 も3日目ですね。今回はASP(VBScript)でWebAPIにアクセスする方法について触れてみようと思います。

ServerXMLHTTP とは

ServerXMLHTTP は、サーバーをセキュリティで保護しながら、異なる Web サーバー間で HTTP アクセスを行うためのメソッドとプロパティを提供します。このオブジェクトを使用して、異なる Web サーバー間で XML/JSON データを交換できます。

実装

さっそく実装してみましょう。例としてQiita APIv2/tags をたたいて vbscript のタグ情報を取得してみます。

Dim oHTTP : Set oHTTP = CreateObject("MSXML2.ServerXMLHTTP")
oHTTP.Open "GET", "https://qiita.com/api/v2/tags/vbscript", False
oHTTP.SetRequestHeader "Content-Type", "application/json"
oHTTP.Send()

Response.write "status: " & oHTTP.status
Response.write "ResponseText: " & oHTTP.ResponseText

Set oHTTP = Nothing

出力結果

status: 200
ResponseText: {"followers_count":96,"icon_url":"https://s3-ap-
northeast-1.amazonaws.com/qiita-tag-
image/0d1729c2a49f71e7c201686d051382a3df4cf96b/medium.jpg?
1434007445","id":"VBScript","items_count":163}

簡単ですね!

少し解説してみます。

oHTTP.Open "GET", "https://qiita.com/api/v2/tags/vbscript", False

Open メソッドで「要求するメソッド」「URL」「非同期通信かどうか」を指定しています。

oHTTP.Send()

Send メソッドでサーバーに HTTP 要求を送信し、応答を受信します。

Response.write "status: " & oHTTP.status
Response.write "ResponseText: " & oHTTP.ResponseText

ここでレスポンスのステータスと内容を文字列として表示しています。
今回はJSONをそのまま表示していますが、実際には "ASPJSON" などのライブラリを使って、JSONをパースすることになると思います。

参考:レガシーASPのJSON入出力用ライブラリ "ASPJSON"のメモ - Qiita

タイムアウトを検知する

より実用的な実装にするため、タイムアウトを検知する方法も紹介しておきます。

Dim oHTTP : Set oHTTP = CreateObject("MSXML2.ServerXMLHTTP")
oHTTP.Open "GET", "https://qiita.com/api/v2/tags/vbscript", True
oHTTP.SetRequestHeader "Content-Type", "application/json"
oHTTP.Send()

If oHTTP.readyState <> 4 Then
	oHTTP.waitForResponse(10)
End If

If oHTTP.readyState = 4 Then
	Response.write "status: " & oHTTP.status
	Response.write "ResponseText: " & oHTTP.ResponseText
Else 
	Response.write "Timeout!"
End If

Set oHTTP = Nothing

これも解説していきます。

oHTTP.Open "GET", "https://qiita.com/api/v2/tags/vbscript", True

まずは非同期フラグを True にするのがポイントです。こうしないと、後述する
waitForResponse がうまく動きません。

If oHTTP.readyState <> 4 Then
	oHTTP.waitForResponse(10)
End If

ここで readyState4、つまり「完了」ではない場合は waitForResponse を使って 10 秒待ちます。

If oHTTP.readyState = 4 Then
	Response.write "status: " & oHTTP.status
	Response.write "ResponseText: " & oHTTP.ResponseText
Else 
	Response.write "Timeout!"
End If

10秒後、readyState4 になればレスポンスを出力し、
そうでなければタイムアウトと判断します。

以上、ServerXMLHTTP について解説してみました。

さいごに

明日は東京から宮崎に移住したエンジニアの話です。
みなさま良い ASP ライフを!

リンク

26
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?