himorogiの日記

主にプログラミングに関することなど。少々ハード(電子工作)についても。

WSH(Javascript)+ MSXML で非同期に WebAPI を叩く。

IE を Automation で呼ばなくても MSXML から呼べば良い(らしい)。
Windows機を実家の親爺に譲ってしまったので、火曜日まで検証できない。いや、火曜日は連休の休み明けだから仕事溜まって無理かも。
だけど多分これで良いはず。
以下のとおり非同期処理のための下ごしらえが必要になるので下記のままでは駄目だな。
open の URL の次の parameter は非同期モード(ture)か同期モード(false)かの設定。
ただし参考にしたのが JScript の parameter 定義なので WSH でも使えるかどうか不明。呼んでる API は同じだが呼び出し側の環境が違うし。
Webアクセスだから、応答が帰ってこないこともありうるし、sync はやめとこう。async で callback 関数渡せるみたい。
Wait 処理、timeout 処理をどう書くか?
while() と sleep() の組み合わせを使ってる例が多いけど、趣味的には setInterval() 使いたい。調べてみたところ WSH でも new ActiveXObject("htmlfile") で document object を生成することで setInterval() が使える。
new ActiveXObject("htmlfile") で document object を生成すれば jQuery も問題ない。

var	oDoc = new ActiveXObject("htmlfile"); 
var	oHTTP = new ActiveXObject("MSXML2.XMLHTTP");
	oHTTP.open("GET", "http://d.hatena.ne.jp/himorogi",true);
	oHTTP.send();
	// wait・timeout 処理
	// 読み込み
	result = oHTTP.responseText;

これが使えると何が嬉しいかというと web service をブラウザではなく普通(?)の application から呼べる。
非同期対応と jQuery 利用で結構大掛かりになりそうなので、とりあえずこのままにして後日改めて別記事に書く予定。