GoogleAppsScript で Xml API の代わりに XmlService を使う

Google Apps Scriptで遊んでます

時々、趣味でGoogle Apps Scriptをいじっております。
Google Apps Script(以降、GAS)は、Googleが提供するスクリプト環境です。

誤解を恐れずに言うと、GASとは、VBAのGoogle版です。
ちょっとしたプログラムを組んで動かすには最適です。

ただ、GASの特徴として、

  • JavaScript互換である
  • Googleのサービスとの連携に強い
  • トリガー機能

が挙げられます。

特にトリガー機能が強力で、
特定の時間だったり、Googleドキュメントの編集だったりをトリガーにして、
自動で作成したプログラムを実行することが出来ます。

簡単に自動でツイートし続けるTwitterBotを作成したり、
IFTTTなど外部サービスと連携して、ライフログを集計したりも可能です。
やりようによっては、ニコニコ動画で有志が作成しているような、
動画ランキング用の集計データも自動で集計出来るかもしれませんね。
面白そうだな。今度やってみよう。

GASは日月進歩

さて、そんなGASですが、他の言語に比べて情報量が少なく、
参考書もあまりリリースされていなかったり、
リリースされていたとしても当り障りのないような記述しかありません。

と、いうことで情報収集は専らネットになるのですが、
GASもまだまだ発展途上ということで、ちょこちょこ仕様が変わります。
なので、折角ネット上で見つけた情報が古くて使えなかったりすることもしばしば。

ワタクシも本日Xml APIが使えなくて非常に困ったのですが、
自分なりの解決策を見つけたので、ここにメモとして残し、
いずれ仕様が変わった際、後続の方にも同じ歯がゆい思いをしていただこうと思います。

Xml APIが使えない?今はXmlServiceを使うらしい

Xmlを取得、解析する際Xml APIを使用するのですが、
2015年6月現在、Xml APIは廃止されています。
現在は、代わりにXmlServiceを使用します。
使い方は基本的に変わらないので、戸惑うことは無いと思います。

一応、サンプルを。

【旧】Xml APIを利用した記述

var response = UrlFetchApp.fetch(“RSSのアドレス”);
var xmlparse = xml.parse(response.getContentText(), false);
var items = xml.getElement().getElement(“item”);
var title = items[i].getElement(“title”).GetText();

【新】XmlServiceを利用した記述

var response = UrlFetchApp.fetch(“RSSのアドレス”);
var xmlparse = XmlService.parse(response.getContentText());
var items = xmlparse.getRootElement().getChildren(‘item’, ※続きますXmlService.getNamespace(‘xmlnsのアドレス’));
var title = items[i].getChildText(‘title’, XmlService.getNamespace(‘xmlnsのアドレス’));

基本的にコマンドの置換えだけですが、
getElement()の代わりはgetRootElement()(root)、
getChildren()(子)となっています。
子は、getChildren()の他にgetChild()もあります。
詳しく確かめていませんが、対象が複数ある場合はgetChildren()になるはず。

getChildren()やgetChildText()で子要素を抜き出すときは、
名前空間を要求されます。
こちらも詳しくは調べてませんが、
XmlService.getNamespace()でxmlnsのアドレスを指定すればOK。
RSSの中にxmlns=”http://hogehoge”という記載があるはず。
取得したい対象に合わせてセットしましょう。

うーん、一度javascriptの勉強をしたほうがいいかもしれない。

参考にさせていただいた情報

サイト

今回の情報は以下のサイト様を参考にさせていただきました。
手持ちの書籍の情報が古いものだったので大変助かりました。

Qiita mistolteen様の投稿より
GASからCalendarResourceAPIを叩いてみた(+XmlServiceの説明)

アンギス Satoshi Yoshida様
Google Apps Script の新しいXMLパーサーに対応してみる【GASでXMLが読めなくなった同志へ】

書籍


多分、現在出回っているGASのリファレンスとしては
一番丁寧な解説をされていると思います。
今回のXmlのように古くなってしまっている情報もありますが、
とっかかりの情報としてはまだまだ活用できるレベルだと思います。
最新版出ないかな。