2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

 

« 今飲んでいる酒 | トップページ | e.s.t聴いたよ その2 »

2006年12月17日 (日)

Webのデータをプログラムから読み込むには おかわり

前回の続き。

XMLHttpRequestオブジェクトでWebページを拾ってみる。やりたいことは、認証が必要なページにアクセスしてそこからデータを取得する。まぁ、ウチの会社の勤怠管理のWebページ(認証が必要)と、お客さんの所の勤怠情報が分かれている。この2つの情報が同じか確認するのに、今は手作業で行っていて手間がかかるので、自動化できないかなと。

分かったことは、

  • sendメソッドは、引数がVariant型である。文字列を渡すからといって、String型の変数を渡してもCOMエラー(インターフェイスがない)になる。
  • Webページのformのmethod属性が"POST"の場合は、例のようにsetRequestHeaderメソッドでヘッダを設定する必要がある。
    一方、"GET"の場合は、setRequestHeaderメソッドは要らない。openメソッドのURLのお尻に?とパラメータを付加してsendメソッドは引数なしで実行する。
  • 以下の例を流用して接続に失敗したら、URLが間違っているか、sendメソッドに渡すパラメータの内容が間違っている。パラメータは、実際にWebに接続してソースの<form>タグから、何を渡しているか確認する必要がある。
  • プロキシ認証は、openメソッドの第4数ユーザID、第5引数パスワードに設定するもよし、以下の例のように空文字を渡してもよし。空文字を渡した場合は、sendメソッド実行時に認証ダイアログが表示される。

ということで、大体、実現できたので接続部分を以下に示してみる。具体的にはVBでココログ(フリー)の投稿画面に接続して、ブログ一覧のページにまで移動してみる。その内容は変数strHtmlに入る。表示とかしていないので、デバックモードで最後のほうまで動かして変数strHtmlの内容を見てみそ。(イミディエイト ウィンドウで?strHtmlを実行して、出力結果をテキストエディタにコピーしてみると”ブログ一覧”があることで分かる。)
これには、ココログフリーのユーザIDとパスワードが必要です。(ユーザIDはUSER_NAMEに、パスワードはPASSWORDに設定してください)

Const USER_NAME As String = "" 'ユーザIDを設定してください
Const PASSWORD As String = "" 'パスワードを設定してください。

Private Sub CommandButton1_Click()
    Dim objHttp As Object
    Dim strHtml As String
    Dim varSendData As Variant
    Dim iStatus As Integer
    Dim strStatus As String
   
    If objHttp Is Nothing Then
        Set objHttp = CreateObject("MSXML2.XMLHTTP")
        If (Err.Number <> 0) Then
            Set objHttp = CreateObject("MSXML.XMLHTTPRequest")
        End If
    End If
   
    ' ココログフリーに接続 → ブログ一覧ページに移行(ブログタブを選択して開くページ)
    With objHttp
        varSendData = "username=" & USER_NAME & "&password=" & PASSWORD & "&remember=1"
        .Open "POST", "https://app.f.cocolog-nifty.com/t/app", False, "", ""
        Call .setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        .send varSendData
        iStatus = .Status
        strStatus = .statusText
       
        If iStatus >= 200 And iStatus < 300 Then
            strHtml = .responseText
        Else
            MsgBox "接続失敗" & vbCrLf & iStatus & ": " & strStatus
            Exit Sub
        End If

        .Open "GET", "https://app.f.cocolog-nifty.com/t/app/weblog", False, "", ""
        .send
        iStatus = .Status
        strStatus = .statusText
       
        If iStatus >= 200 And iStatus < 300 Then
            strHtml = .responseText
        Else
            MsgBox "接続失敗" & vbCrLf & iStatus & ": " & strStatus
            Exit Sub
        End If
    End With
End Sub

« 今飲んでいる酒 | トップページ | e.s.t聴いたよ その2 »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Webのデータをプログラムから読み込むには おかわり:

« 今飲んでいる酒 | トップページ | e.s.t聴いたよ その2 »