40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

コマンドラインから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/

Tags: