end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

MSXML2.XMLHTTPでvbaからweb apiを利用

今回は、google map apiを例に、MSXML2.XMLHTTPとMSXML2.DOMDocumentによるvba(私の環境はexcel 2003)からのweb apiの利用方法を書き留めておきます。尚、google map apiのresponse形式等は、以前に紹介しているのでそちらをご覧下さい。

http://d.hatena.ne.jp/end0tknr/20081021/1224576363

MSXML2.XMLHTTPとMSXML2.DOMDocumentで簡単に実現

google map apiはresponse形式にcsvxmlを選択できますが、xmlvbaで扱う場合、「ツール」→「参照設定」でMSXML2.DOMDocumentを追加して下さい。

この参照設定が完了すれば、後は簡単。次のように MSXML2.XMLHTTP でgoogle map apiを呼び出し、MSXML2.DOMDocumentでxml responseをparseすることができます。

Sub httpRequest()

    Dim HttpReq As MSXML2.XMLHTTP
    Dim DomDoc As MSXML2.DOMDocument
    Dim targetURL As String
    
    targetURI = "http://maps.google.co.jp/maps/geo?key=&output=xml&q=東京都渋谷区桜丘町26-1"
    
    'HTTP GET
    Set HttpReq = CreateObject("MSXML2.XMLHTTP")
    HttpReq.Open "GET", targetURI, False
    HttpReq.send (Null)
    
    'XML PARSE
    Set DomDoc = CreateObject("MSXML2.DOMDocument")

    DomDoc.loadXML (HttpReq.responseText)
    dumpDomDoc DomDoc.childNodes
    
    Set HttpReq = Nothing
    Set DomDoc = Nothing
End Sub


Sub dumpDomDoc(objNode)
    Dim obj
    For Each obj In objNode
        MsgBox obj.parentNode.nodeName & " : " & obj.nodeValue
        If obj.hasChildNodes Then
            dumpDomDoc obj.childNodes
        End If
    Next
End Sub

response形式がcsvであれば、TextFieldParserを使用(多分)

response形式がcsvであれば、TextFieldParserを使用してparseできるようです。いくつかのサイトを見てみましたが、TextFieldParserを使用するにはresponseを一度、ファイルに書き込む必要があるようです。
今回は試していませんが、機会があれば調べるとこにします。

認証が必要が場合、openメソッドにoption追加

http://ponpon-village.net/ajax/xmlhttp.htm

↑このページによれば、認証が必要になる場合、openメソッドにoption追加すればいいようです。

open("method", "URL"[, asyncFlag[, "userName"[, "password"]]])

指定したメソッド method ( GET|POST|PUT|PROPFIND )で指定URL URL にリクエストする。リクエストの成功・失敗に関わらず次の処理を実行する場合があれば、asynFlag を False に。それ以外は Ture にする。省略すると True で実行。userName、password は認証が必要な場合にのみ指定。