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 »
コメント