コマンドラインからHTMLコンテンツ取得するスクリプト
タイトルの通りなのですが、コマンドラインからHTMLコンテンツ取得するVBScript 作ったのですが、単につくるだけでは芸が無いのと、今後の拡張を考えて、wget というクラスを1つ作り、それを継承する形ではてなやアマゾンのwebサービス利用できるようなものを目指してにしていこうかと思っています。
で、作りかけだけど、wget クラスは以下のような感じに。
Class Wget Private my_url Private objHTTP Private outputStream Private html Private ADTYPETEXT Private ADTYPEBINARY Private code Private my_htmlContents 'HTMLのBody要素全体を格納 Private objRe Private Sub Class_Initialize() ADTYPETEXT = 2 ADTYPEBINARY = 1 Set objHTTP = CreateObject("Microsoft.XMLHTTP") Set outputStream = CreateObject("ADODB.Stream") code = "Shift_JIS" my_htmlContents = "" End Sub Property Let Url(address) my_url = address End Property Property Let CharCode(str) code = str End Property Public Sub Print() WScript.Echo my_htmlContents End Sub Public Sub GetCommentElement() Set objRe = new RegExp objRe.Pattern = "" objRe.Global = True objRe.ignoreCase = True Set matches = objRe.Execute(my_htmlContents) End Sub Public Sub Fetch() Call objHTTP.Open("GET",my_url,False) objHTTP.Send() html = objHTTP.responseBody 'ADODB.Streamを利用してHTMLコンテンツ取得 outputStream.Type = ADTYPEBINARY outputStream.Open() outputStream.Write(html) outputStream.Position = 0 outputStream.Type = ADTYPETEXT outputStream.Charset = code my_htmlContents = outputStream.ReadText() outputStream.Close() End Sub End Class
で、このクラスをつかってwsfファイルを作成します。エキブロの仕様のため、一部のタグがつかえなかったりするので、必要と思われる所だけピックアップ
Dim objWget Set objWget = New wget Dim colArgs,tempData Set colArgs = WScript.Arguments If ChkArgs(colArgs) Then objWget.url = colArgs(0) Wscript.Echo "OK" objWget.CharCode = "UTF-8" objWget.Fetch() objWget.Print End if Function ChkArgs(colArgs) If colArgs.Count 1 then Wscript.StdErr.WriteLine("引数指定エラー") ChkArgs = False Wscript.Quit() Else ChkArgs = True End if End Function Set objWget = Nothing
使うときには、コマンドラインで以下のように入力すれば、OK。
cscript wget.wsf //nologo http://b.hatena.ne.jp/h5y1m141/vbs/