libro
www.tuyano.com
Google Apps Scriptプログラミング [中級編]

SOAP/WSDLによるWebサービスを利用する (4/4)

作成:2012-07-17 08:52
更新:2012-07-17 08:52

■CurrencyConvertorへアクセスする

では、実際にCurrencyConvertorにアクセスをしてみましょう。今回は、ドル=円の換算レートを取得しログに表示してみます。

下のリスト欄に、簡単なサンプルをあげておきます。実行すると、CurrencyConvertorにアクセスし、結果を取得します。

ここでは、結果をそのままXMLのソースコードとして出力し、そこから換算レートの値を取り出してログに出力しています。――では内容を説明していきましょう。
 var param = ["ConversionRate",
                {"xmlns":"http://www.webserviceX.NET/"},
                ["FromCurrency","USD"],
                ["ToCurrency","JPY"]
              ];

パラメータを用意します。FromCurrency"USD"ToCurrency"JPY"と値を指定します。これらはそれぞれ「米国ドル」「日本円」を示す値です。CurrencyConvertorでは、このようにそれぞれの国の貨幣単位を3文字の記号で指定します。
var wsdl = SoapService.wsdl("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL");
var service = wsdl.getService("CurrencyConvertor");
SoapServicewsdlWsdlオブジェクトを取得し、getServiceで指定のサービスのWsdlServiceオブジェクトを取得します。ここまでは既に説明済みですね。
var result = service.ConversionRate(param);
var source = result.toXmlString();
ConversionRateメソッドを呼び出します。引数には、あらかじめ用意しておいた変数paramを指定します。これで得られた結果は、XMLドキュメントXmlDocumentオブジェクト)の形になっています。ですから、ここから必要に応じて値を取り出さないといけません。

とりあえず、XMLのソースコードが取り出せればなんとかなるだろう、という場合は、「toXmlString」メソッドを呼び出します。これで以下のようなテキストが得られます。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ConversionRateResponse xmlns="http://www.webserviceX.NET/">
            <ConversionRateResult>79.005</ConversionRateResult>
        </ConversionRateResponse>
    </soap:Body>
</soap:Envelope>
<soap:Envelope>内に<soap:Body>があり、その更に中に<ConversionRateResponse>、更にその中に<ConversionRateResult>が組み込まれています。通常のXmlDocumentならば、getElementで特定の要素を取り出せるのですが、これはうまくいきません。それぞれの要素を階層構造ごとに正確に記述していくことになります。
var body = result.Envelope.Body;
まず、結果内の<soap:Envelope>内の<soap:Body>を取り出します。result.Envelope.Bodyというように、(<soap:○○>soapを除いた)タグ名をオブジェクトのプロパティとして指定していくのです。
var convrate = body.ConversionRateResponse.ConversionRateResult;
更に、ボディ内から<ConversionRateResponse>を、そのまた中から<ConversionRateResult>を取り出します。これでようやく<ConversionRateResult>79.005</ConversionRateResult>のタグ部分がXmlElementとして取得できました。
Logger.log("Rate: " + convrate.getText());
後は、getElementで取得したXmlElementオブジェクトの「getText」メソッドで、タグ内のテキストを取り出すだけです。これで79.005というテキスト部分が取り出せました。

――なお、ここでは、わかりやすいようにいくつかの文に分けて書いてありますが、これはもちろん以下のようにまとめて書いてもかまいません。
Logger.log("Rate: " + result.Envelope.Body.ConversionRateResponse
        .ConversionRateResult.convrate.getText());

WSDL利用のポイントは、「WSDLのドキュメントから、サービス、オペレーション、必要なパラメータといった情報を取り出し再構築するか」という点でしょう。それさえわかれば、SoapServiceの利用そのものはそれほど難しくはないことがわかるでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

function accessToWsdl() {
  var param = ["ConversionRate",
                {"xmlns":"http://www.webserviceX.NET/"},
                ["FromCurrency","USD"],
                ["ToCurrency","JPY"]
              ];
  var wsdl = SoapService.wsdl("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL");
  var service = wsdl.getService("CurrencyConvertor");
  var result = service.ConversionRate(param);
  var source = result.toXmlString();
  Logger.log(source);
  var body = result.Envelope.Body;
  var convrate = body.ConversionRateResponse.ConversionRateResult;
  Logger.log("Rate: " + convrate.getText());
}


※関連コンテンツ

「Google Apps Scriptプログラミング [中級編]」に戻る