インターネットが高速になり、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> |
|