今回は、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形式にcsvやxmlを選択できますが、xmlをvbaで扱う場合、「ツール」→「参照設定」で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 は認証が必要な場合にのみ指定。