今回はサーバー上にあるXMLデータを処理する場合についてです。
サーバー上にあるのは、HTMLファイルやテキストファイルだけではありません。XMLファイルも多くあります。XMLはコンピュータプログラムで処理しやすいように作られているため、再利用しやすいというメリットがあります。
InDesignは、XMLと組み合わせてページレイアウトすることもできますが、これとは別にスクリプトで細かく処理していくことが可能です。
ここでは、XML形式としてはもっとも多く使われているRSSを読み込みInDesignに配置するプログラムについて説明します。サンプルでは、asahi.comで配信されているRSSを読み込み利用することにします。なお、RSSにはいくつかのバージョンがありますが、ここでは日本国内で多く使われているRSS 1.0(RDF)を使っています。
サーバー上にあるのは、HTMLファイルやテキストファイルだけではありません。XMLファイルも多くあります。XMLはコンピュータプログラムで処理しやすいように作られているため、再利用しやすいというメリットがあります。
InDesignは、XMLと組み合わせてページレイアウトすることもできますが、これとは別にスクリプトで細かく処理していくことが可能です。
ここでは、XML形式としてはもっとも多く使われているRSSを読み込みInDesignに配置するプログラムについて説明します。サンプルでは、asahi.comで配信されているRSSを読み込み利用することにします。なお、RSSにはいくつかのバージョンがありますが、ここでは日本国内で多く使われているRSS 1.0(RDF)を使っています。
XMLデータを読み込む場合も、これまでのHTMLファイル、テキストファイルを読み込む方法と同じです。異なるのはXMLデータの処理です。正規表現を使って処理する方法もありますが、InDesign CS3からXMLデータを処理するためのオブジェクトが追加されています。
読み込まれたXMLデータは、ただのテキストファイルです。これをプログラムで扱えるようにする(ドキュメントオブジェクトモデルに変換する)にはnew XML()のパラメータにXMLデータ(ただのテキスト状態のもの)を指定します。これにより、XMLオブジェクトが生成され、用意された命令を使ってXMLデータにアクセスできるようになります。XMLオブジェクトへのアクセスに関しては以下のURLからダウンロードできるJavaScript Tools Guide CS3を参照してください。
< http://www.adobe.com/devnet/bridge/pdfs/javascript_tools_guide_cs3.pdf
>
XMLデータにアクセスする方法はいくつか用意されていますが、ここではchild()を使います。child()は子ノードを示すもので、パラメータに子ノードの参照番号を指定します。最初の子ノードが0になり、次の子ノードが1というように1ずつ増えていきます。配信されているRSSでは0番目は< channel >で、次が< item >になります。記事のタイトルは< item >内にある< title >にあります。< title >〜< /title >内にある文字を取り出すにはtext()を使います。
まとめると、記事のタイトルを取り出すには以下のようにアクセスすることになります。
xmlObj.child(参照番号).child(0).text()
実際のプログラムがサンプル4になります。最新記事を10個読み込みInDesign上の最前面のドキュメントに配置します。
--------------------------------------------------------------
【RSSの構造】
< rdf:RDF >
< channel >〜< /channel >
< item >
< title >記事のタイトル< /title >
:
< /item >
記事の数だけ< item >〜< /item >が繰り返される
--------------------------------------------------------------
◎サンプル
// RSS (XML) ファイルを読み込みInDesign上に配置する
(function(){
var CR = String.fromCharCode(13);
var tfObj = app.activeDocument.textFrames.add();
tfObj.visibleBounds = ["2cm", "3cm", "10cm", "14cm"];
var fileObj = getHttpData(
"http://rss.asahi.com/f/asahi_newsheadlines
",
"%7E/tempXML.xml");
var flag = fileObj.open("r");
if(flag == true){
var xmlText = fileObj.read(); // XMLファイル内容を全て読み込む
var xmlObj = new XML(xmlText); // XMLオブジェクトを生成
var text = "";
for(var i=1; i< =10; i++){
var newsName = xmlObj.child(i).child(0).text();
text = text + newsName + CR;
}
tfObj.contents = text;
fileObj.remove(); // 一時的に作成したファイルを削除
}
})();
// HTTPを使って指定されたサーバーのデータを読み込みファイルオブジェクトを返す
function getHttpData(sURL, filePath){
if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
}
var http = new HttpConnection(sURL) ;
http.response = new File(filePath) ;
http.execute() ;
http.response.close() ;
return new File(filePath);
}
【古籏一浩】openspc@po.shiojiri.ne.jp
< http://www.openspc2.org/
>
何かと話題の麻生太郎氏ですが、Webページの文章を麻生語に変換するプラグインを作成しました。これで、皆さんのページも日本の首相と同じ日本語レベルになります。
・麻生語プラグイン!
< http://www.openspc2.org/serif/aso/index.html
>
長野県にいるのに、なんで上高地がないのかとか、近場にある黒部ダムとかがないのかというと、まあちょっとした事情があって非公開でした。が、先週から上高地や黒部ダム、駒ヶ岳などのメジャーどころのも無料でダウンロード&使用できるようにしました。他にも大量に追加しましたので是非、ご利用ください。
・ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/
>
- 改訂第4版 JavaScript ポケットリファレンス
- 古籏 一浩
- 技術評論社 2006-10-18
- おすすめ平均
- JavaScriptを使ったプロジェクトのお供に是非
- JavaScript仮免者以上の方へ
- バランスの良いバイブル
- 中級者向けです。
by G-Tools , 2008/12/15