Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
16
Help us understand the problem. What is going on with this article?
@aratana_ogawa

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

More than 3 years have passed since last update.

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 ライフを!

リンク

16
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
16
Help us understand the problem. What is going on with this article?