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で使用できないクラスを置き換え
- XmlHttpRequest -> UrlFetch
- DOM -> Xml
- Base64 -> Utilities.base64Encode/base64Decode
サーバサイドスクリプトなんで、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"だと が思い浮かぶし…。
*1:structを含むレスポンスをパースするときに、nameの後にvalueがくることを前提としてるんです。すいません、対応が面倒だったんです。。。