3
5

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 3 years have passed since last update.

HTTPリクエストを投げて、レスポンスを受け取る vbscript

Last updated at Posted at 2020-06-11

#Excel郵便番号住所変換のHTTPリクエストをVBScriptで書いてみた
関連
ExcelのVBAでYahoo!路線情報からHTMLを取得して運賃を取得してみる
Excel 郵便番号→住所変換 MSXML2.XML HTTP.3.0

#VBSCriptだけで書いてみる
BASP21を使った処理は書いた事があるが、標準機能だけで書いてみる。

サンプルはこれを使わせてもらいました。

改造は2点
1.一時ファイル名UUID化する。
2.バイナリ→テキスト変換はFunctionで完結する

#UUIDの取得
VBSCriptの一時ファイル名取得(GetTempName)は重複が発生して、痛い思い出がある。その時の解決策は別であったが、今回はUUIDを使ってみた。これでも完全ではないらしい
UUID v4って規格?があるようで、同じ内容のサンプルが幾つかみつかったが今回はこちらを参考にした。

#バイナリ→テキスト変換はFunctionで完結する
バイナリ情報を一時ファイルに書き込み、読み出しでテキスト変換するそうです。
この一時ファイル名を固定にしたくなかったので、UUIDを使ってみました。

'************************************************************
'関数ID :binReadTextAll
'説明   :バイナリデータをテキストで返す
'			responseText は、euc か utf-8 のページの場合 unicode として変換されます
'			Shift_Jis は、responseBody でいったんバイナリ保存してから、読み込む
'戻り値 :バイナリデータのテキスト
'************************************************************
Function binReadTextAll(binData)
	Dim objFSO    											'ファイルシステムオブジェクト
	Dim oStream    											'ADODB.Streamオブジェクト
	Dim strTempFolder   									'一時フォルダ名
	Dim strTempFile     									'一時ファイル名
	Dim resStream    										'テキストストリームオブジェクト

	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

    strTempFile = objFSO.GetSpecialFolder(2)				'2:TemporaryFolder 特殊フォルダ 
    'strTempFile = strTempFile & "\"& objFSO.GetTempName()	'一時ファイル名 GetTempName では重複する場合がある
    strTempFile = strTempFile & "\"& UUID()				'一時ファイル名 
	
	Set oStream = CreateObject("ADODB.Stream")				'一時ファイルへバイナリデータを書き込む
	oStream.Open
	oStream.Type = 1                            			' バイナリ
	oStream.Write binData
	oStream.SaveToFile strTempFile
	oStream.Close

	Set resStream = objFSO.OpenTextFile(strTempFile, 1)		'一時ファイルから読み出す
	binReadTextAll = resStream.ReadAll
	resStream.Close
	objFSO.DeleteFile strTempFile							'一時ファイル削除
	
	Set resStream = Nothing
	Set oStream = Nothing
	Set objFSO = Nothing
End Function

#HTTPリクエスト

HTTPリクエスト
' 参考先 https://necoyama3.hatenablog.com/entry/20090424/1240592349
'************************************************************
	Dim oXMLHTTP   ' MSXMLオブジェクト
	Dim resData    ' レスポンス

	Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0")
	oXMLHTTP.Open "GET", URL, False                              ' FALSE:同期処理
	oXMLHTTP.Send                                                ' 受信

	If oXMLHTTP.Status = 200 Then
		resData = binReadTextAll(oXMLHTTP.responseBody)
		MsgBox resData
	Else
		resData = "Error returnCode:" & oXMLHTTP.Status
		MsgBox resData
	End If

	set oXMLHTTP = nothing

こんなテキストが取得できました。
VBSHTTP2020061101.png

物忘れ防止 VBScript MSXML2.XMLHTTP.3.0.vbs

3
5
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
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?