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