XML-RPC client on Google Apps Script を作りましたよ

ikikko/Mimic-for-Google-Apps-Script · GitHubに公開しています。

これを使えば、外部連携にXML-RPCを使うTracとかWordPressとかとも連携できて幸せになれますね。

ほんとに作りたいものの途中で必要だったのですが、需要があるかなと思ってXML-RPCの部分だけ切り出してみました。とは言っても、一から作るのはさすがに面倒だったので、Mimic - JavaScript XML-RPC ClientをベースにしてGoogle Apps Scriptで使用できないクラスを置き換えてやり、いくつか必要な部分を追加したのですが。

じゃっっっっっかん怪しいところがないわけでもないんですが*1、自分の使う範囲ではとりあえず動いているのでよしとします。何か不具合などありましたら、このブログもしくは@ikikko までつぶやいてください。もちろん、ソースをforkして自分で直してもらっても全然構いません。


概要

Google Apps Script上で動く、XML-RPCのクライアントプログラムです。

Google Apps ScriptとはGoogleドキュメントで動くサーバサイドスクリプトで、Excelのマクロのようなものをイメージしてもらえればいいかと思います。Google Apps Scriptについての細かい説明はしませんので、詳しく知りたい方は下記のサイトを参照してください。

オリジナルからの主な変更点

  • Basic認証のサポート
  • レスポンスで、型が指定されていない値はStringとみなす処理追加
  • Google Apps Scriptで使用できないクラスを置き換え

サーバサイドスクリプトなんで、DOMが使えないことはまぁ理解できるんです。が、オリジナルのソースコードでは、レスポンスのパースにDOMParserを使っていたんでここを丸ごととっかえました。Google Apps Scriptのエディタに使い慣れていなかったり、デバッグ環境が貧弱だったりで、結構苦労しました。

ちなみに、Mimic以外の他のXML-RPCクライアントも調査しましたが、軒並みDOMParserを使ってましたね。

インストール方法

下記URLからmimic-gas.jsの中身を全部コピーして、使いたいGoogle Apps Script中にペーストしてください。今のGoogle Apps Scriptでは外部JSファイルをインクルードするような機能が多分ないので、コピペするしかないと思います。

使用方法

基本的な使用方法は、Mimicと一緒です。ただし、Basic認証のサポートは今回新たに追加した箇所です。

function callCalculator() {  
    var method = document.getElementById("operation").value;
    var request = new XmlRpcRequest("demos/calc.php", method);
    request.setAuthentication("USERNAME", "PASSWORD"); // ここでBasic認証のユーザ・パスワードを指定
    request.addParam(document.getElementById("n1").value);
    request.addParam(document.getElementById("n2").value); 
    var response = request.send();  
    alert(response.parseXML());  
}


ところで、Google Apps Scriptって何て略せばいいんだろう。"Apps Script"だと「アップス スクリプト」で「ス」が続いて微妙に言いにくいし、"GAS"だとhttp://www.tokyo-gas.co.jp/image/logo.gif が思い浮かぶし…。

*1:structを含むレスポンスをパースするときに、nameの後にvalueがくることを前提としてるんです。すいません、対応が面倒だったんです。。。