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

UrlFetchとXmlデータの利用 (4/6)

作成:2011-07-11 08:02
更新:2011-07-11 08:02

■Xmlデータの扱い

外部のサイトにアクセスして必要な情報を取得する、という場合、単なるテキストデータなどであれば受け取ったデータの利用も簡単ですが、より複雑な構造を持つものとなるとそうはいきません。返されたデータをどう処理していくかを考える必要があります。

一般的なテキスト(標準テキスト)以外に、Webで広く使われるデータの形式といえば、「HTML」と「XML」でしょう。特に、配信情報として利用されているRSSAtomといったデータは、XMLで情報を記述してあります。ということは、fetchで取得したデータをXMLとして処理するやり方がわかれば、データの利用はずいぶんと簡単になります。

XMLデータの扱いは、「Xml」というオブジェクトとして用意されています。このオブジェクトから、各エレメントの情報をオブジェクトとして取得し処理していくことができます。Xmlで使われるオブジェクトの関係をざっと整理しておきましょう。

Xml――これがXMLデータを管理する基本機能を提供するものです。まず、このXmlオブジェクトからメソッドを呼び出して必要なオブジェクトを生成し処理を行います。

XmlDocument――XMLのドキュメントを管理するものです。XMLのデータを処理するときは、Xmlオブジェクトから、まずこのXmlDocumentを生成します。

XmlElement――XmlDocumentに保管されている各エレメントを示すものです。XmlDocumentから、必要に応じてこのXmlElementを取得し、そこからエレメントのデータをとり出します。

XmlAttribute――エレメントの属性を示すものです。XmlElementから、このXmlAttributeを取得して利用します。

XmlName――エレメントの名前を示すものです。XmlElementから、このXmlNameを取得し利用します。

全体的な流れとして、「XmlからXmlDocumentを取得し、そこからXmlElementを取り出してエレメントの各種データを取り出す」という形になります。

この中でもっとも重要となるのが、XmlElementでしょう。これは「1つのエレメントを示す」ものですが、そのエレメント自身に含まれているエレメントに関する情報も含んでいます。まずはルートのエレメントとなるXmlElementを取得し、その中にあるさまざまなエレメントを検索して取り出す、という形で処理していくことになるでしょう。

では、実際の利用例として、Googleニュースから「Google」の記事のRSSデータを取得し、アクティブシートにアップデート日、タイトル、コンテンツを書き出す、といったことをやってみましょう(下リスト)。

Xml関係オブジェクトの個々のメソッドについては後述するとして、ざっとこんな具合にすれば、XMLデータを扱える、ということはイメージできるでしょう。ここでは、まずUrlFetchApp.fetchでXMLデータ(Atomデータ)をダウンロードし、それをもとにXmlのオブジェクトを生成しています。

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

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

●プログラム・リスト●

function fetchData(){
	var sheet = SpreadsheetApp.getActiveSheet();
	var url = "http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=atom&q=google";
	var response = UrlFetchApp.fetch(url);
	var xml = Xml.parse(response.getContentText(), false);
	var els = xml.getElement().getElements("entry");
	for(var i = 0;i < els.length;i++){
		var el = els[i];
		var title = el.getElement("title").getText();
		var updated = el.getElement("updated").getText();
		var content	= el.getElement("content").getText();
		sheet.getRange(i + 1,1).setValue(updated);
		sheet.getRange(i + 1,2).setValue(title);
		sheet.getRange(i + 1,3).setValue(content);
	}
}

※関連コンテンツ

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