WEB上のソースを利用する(1) :【VBScript】

インターネットが高速になり、WEB をハードディスクがわりにするのはとても便利であるとともに、
不用意にコピーされたファイルが存在しなくなるので間違いが確実に減ります。

VBScript は、テキストに書いてすぐ処理できるプログラム言語ですが、
もう相当前から、WEB からソースコードを取り込んで処理できるように設計されています

ブラウザでダウンロード
まずローカルで処理
拡張子を .vbs にしたファイルに関数を書き、拡張子を .wsf にしたファイルで
処理を書きます。 .wsf では、書き方の仕様がありますが、書式みたいなもので、
少しプログラムを知っておれば簡単に使えます。

言語的には、HTML 上で書く JavaScript のほうが遥かに難易度が高いのです。

以下は、関数として WEB から数メガの比較的小さいファイルをダウンロード
する関数と、Microsoft Access の MDB ファイルを作成する関数です
toolWsh.vbs
' ******************************************************
' バイナリダウンロード
' ******************************************************
Function HTTPDownload( strUrl, strPath )

	Dim objSrvHTTP,Stream

	Set objSrvHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")

	HTTPDownload = True

	on error resume next
	Call objSrvHTTP.Open("GET", strUrl, False )
	if Err.Number <> 0 then
		ErrorMessage = Err.Description
		HTTPDownload = False
		Exit Function
	end if
	on error goto 0

	objSrvHTTP.Send

	Set Stream = Wscript.CreateObject( "ADODB.Stream" )

	Stream.Open
	Stream.Type = 1	' バイナリ
	Stream.Write objSrvHTTP.responseBody
	Stream.SaveToFile strPath, 2
	Stream.Close

End Function

' ******************************************************
' MDB 作成
' ******************************************************
Function CreateMdb( strPath )

	Dim Adox

	Set Adox = Wscript.CreateObject( "ADOX.Catalog" )

	CreateMdb = True

	on error resume next
	Adox.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
		"Data Source=" & strPath & ";"
	if Err.Number <> 0 then
		CreateMdb = False
		ErrorMessage = Err.Description
	end if
	on error goto 0


End Function
この中身自体は専門的になるので、説明がかなり必要ですが、
使用方法は簡単です。気にさえしなければ、このコードをそのまま利用
するだけでその関数の機能を使う事ができます。

以下は、ローカルにこのファイルを置いて( 同じディレクトリ ) 実行する
ソースコードです。
act.wsf
<JOB>
<OBJECT id="WshShell" progid="WScript.Shell" />
<SCRIPT language="VBScript" src="toolWsh.vbs"></SCRIPT>

<SCRIPT language=VBScript>
' ***********************************************************
' 処理開始
' ***********************************************************

Dim ErrorMessage

strDir = WshShell.CurrentDirectory

' 上書きは不可
Call CreateMdb( strDir & "\db.mdb" )
if ErrorMessage <> "" then
	Wscript.Echo ErrorMessage
	ErrorMessage = ""
end if


' Google のロゴ
strUrl = "http://www.google.co.jp/intl/ja_jp/images/logo.gif"
Call HTTPDownload( strUrl, strDir & "\logo.gif" )
if ErrorMessage <> "" then
	Wscript.Echo ErrorMessage
	ErrorMessage = ""
end if

</SCRIPT>
</JOB>
最初に、カレントディレクリに db.mdb を作成しています。
もう一度実行すると、データベースは既に存在しています。
というメッセージが出ます。メッセージを出しているのは act.wsf で
すから、表示しないようにするのは、Wscript.Echo ErrorMessage を
書かないかまたはコメントにすれば良いでしょう。

エラーかどうかの判断は、ErrorMessage が空かどうかで判定する仕様になっています

二つ目の HTTPDownload は、Google のロゴ画像をダウンロードしています。
これは、もう一度実行すると上書きです。

注意するのは、存在しない URL を指定してもエラーにはならないで、
サーバーから送られた「そのページは存在しません」等のテキストが保存されます。
これは、HTTP の仕様なので、きっちりチェックする為には、HTTPDownload の
中でもっと処理が必要になりますが、そこまでするような内容でも無く、
これでたいていの目的は達成できると思います。

ただ、指定した url が、空白のように、まったく url として判定できない
ようなとんでも無い値の場合は、エラーになります( ErrorMessage になにか入ります )



toolWsh.vbs を WEB サーバーにコピーする
最も注意しなければならないのは、広告が自動的に入るサーバーは注意です。

おそらく、拡張子が .vbs であれば問題無いと思いますが、後々 .php とかで応用したい
場合は、広告が入ってしまって全く動かないものになってしまいます。

私は、自分のレンタルサーバに置いているのでその心配はありませんが、
一応将来的に問題が出無いように .htaccess を設置しています
.htaccess
AddType "text/plain" .vbs
これは、解らなければ無視して toolWsh.vbs を WEB サーバにアップロード
して、以下のコードでテストします。( ファイルが url 指定になっただけですが )

WEB サーバーが無い人は、http://winofsql.jp/webwsh/toolWsh.vbs は存在するので
そのまま使ってみて下さい
act_web.wsf
<JOB>
<OBJECT id="WshShell" progid="WScript.Shell" />
<SCRIPT language="VBScript" src="http://winofsql.jp/webwsh/toolWsh.vbs"></SCRIPT>

<SCRIPT language=VBScript>
' ***********************************************************
' 処理開始
' ***********************************************************

Dim ErrorMessage

strDir = WshShell.CurrentDirectory

' 上書きは不可
Call CreateMdb( strDir & "\db.mdb" )
if ErrorMessage <> "" then
	Wscript.Echo ErrorMessage
	ErrorMessage = ""
end if


' Google のロゴ
strUrl = "http://www.google.co.jp/intl/ja_jp/images/logo.gif"
Call HTTPDownload( strUrl, strDir & "\logo.gif" )
if ErrorMessage <> "" then
	Wscript.Echo ErrorMessage
	ErrorMessage = ""
end if

</SCRIPT>
</JOB>