クリエイター手抜きプロジェクト[189]InDesign CS3編 InDesign CS3でFTP、HTTP通信を行う(4)
── 古籏一浩 ──

投稿:  著者:


今回はサーバー上にあるXMLデータを処理する場合についてです。

サーバー上にあるのは、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/
>

photo
組版時間を半減する! InDesign自動処理実例集
(株)シータス
技術評論社 2008-11-25
おすすめ平均 star
starプログラミング経験のない方も気軽に挑戦してほしいです

1ランク上の技を身につけるInDesignの強化書 [+DESIGNING Professional Bible] (マイコミムック) (MYCOMムック +DESIGNING Professional Bi) InDesign CS3の仕事術 InDesign 逆引きデザイン事典[CS3/CS2/CS対応] Adobe InDesign「文字組み」徹底攻略ガイド 欧文書体 2 定番書体と演出法 (タイポグラフィの基本BOOK)



photo
改訂第4版 JavaScript ポケットリファレンス
古籏 一浩
技術評論社 2006-10-18
おすすめ平均 star
starJavaScriptを使ったプロジェクトのお供に是非
starJavaScript仮免者以上の方へ
starバランスの良いバイブル
star中級者向けです。

[改訂版] PHP ポケットリファレンス (Pocket reference) 改訂新版 SQLポケットリファレンス (Pocket reference) 改訂第5版 オールカラー  HTML ポケットリファレンス (POCKET REFERENCE) スタイルシート ポケットリファレンス (Pocket reference) 基礎 Ajax + JavaScript

by G-Tools , 2008/12/15