特定のサイトのデータを読み込みレイアウトする

■プログラム説明(ソースコード説明)
 特定のサイトのデータ(HTMLなど)をダウンロードするにはシェルスクリプトを呼び出します。シェルスクリプトでcurlを呼び出して指定したサイトデータを取得します。これは

curl http://www.openspc2.org/

のようにします。このままでは標準出力にデータが出力されるため一旦ファイルに書き出します。これは

curl http://www.openspc2.org/ > tmp.html

のように>を使い、右側に保存するファイル名を指定します。次にtmp.htmlファイルの漢字コードをRubyを使ってSHIFT JISに変換します。変換が終了したら処理が完了したことを知らせるためのファイルをtouchコマンドで作成します。
 JavaScript側ではtouchコマンドで作成されたファイルが存在するかどうかをexistsで調べます。ファイルが存在した場合には正常に動作した事になるのでテキストフレームを作成しファイル内容を表示します。そうでない場合には、タイムアウトになるまで待ちます。タイムアウトの時間はサンプルでは1000*30として30秒待つようになっています。10秒にしたい場合には1000*10のように変更します。


■ソースコード
fileObj = new File("/sample.sh");
fileFlag = new File("/id_text/flag.txt");
if (fileFlag.exists) fileFlag.remove();
htmlFile = new File("/id_text/0.html");
fileObj.execute();
dObj = new Date();
timeoutFlag = true;
while((new Date()).getTime() < dObj.getTime() + 1000*30)
{
if (fileFlag.exists)
{
timeoutFlag = false;
break;
}
}
if (!timeoutFlag)
{
pageObj = app.documents.add();
txtObj = pageObj.textFrames.add();
txtObj.visibleBounds = ["2cm","2cm","26cm","18cm"];
txtObj.place(htmlFile);
}else{
alert("タイムアウトで読み込めませんでした");
}


■ソースコード(シェルスクリプト側)
#!/bin/bash
rm -f /id_text/flag.txt
curl "http://www.yahoo.co.jp/" > /id_text/tmp.html
/kanji.sh
touch /id_text/flag.txt
rm -f /id_text/tmp.html


■ソースコード(Ruby)
#!/usr/bin/ruby
require "kconv"
fh = open("/id_text/tmp.html","r")
txt = fh.read
fh.close
fh = open("/id_text/0.html","w")
fh.print txt.tosjis
fh.close


■ポイント
 MacOS X用のサンプルです。開かれたターミナルは自動的には閉じないため場合に寄っては、手動で閉じるかAppleScriptを使ってウィンドウのみを閉じるか、killを使ってプロセスを止めるなどの処理が必要になります。漢字コード変換にRubyを利用していますが、場合によっては文字コードが正しく認識できずに文字化けしてしまう可能性があります。

■実際のスクリプトをダウンロード(sample.js.zip)