今回でInDesign CS3を使ったFTP、HTTP通信のネタは終わりです。
FTPサーバー上にあるファイル内容が更新されたり、新たにファイルが追加された場合には、ファイル一覧を取得した後、処理を行う必要があります。InDesign CS3の場合、更新日時などファイルに関する情報はFTPオブジェクトのいくつかのプロパティに分割されて格納されます。
まず、ファイル一覧はls()により取得することができます。ls()の戻り値はtrueまたはfalseで、取得に成功した場合にはtrue、失敗した場合にはfalseとなります。
これとは別にFTPの場合、パッシブモードを設定しておく必要があります。これはネットワーク環境に依存します。パッシブモードは、FTPオブジェクトのpassiveプロパティにtrueまたはfalseを指定します。trueであればパッシブモードになります。ls()でファイル一覧を取得したまま、次の処理が行われない場合には、パッシブモードの設定を確認してみてください。
FTPサーバー上にあるファイル内容が更新されたり、新たにファイルが追加された場合には、ファイル一覧を取得した後、処理を行う必要があります。InDesign CS3の場合、更新日時などファイルに関する情報はFTPオブジェクトのいくつかのプロパティに分割されて格納されます。
まず、ファイル一覧はls()により取得することができます。ls()の戻り値はtrueまたはfalseで、取得に成功した場合にはtrue、失敗した場合にはfalseとなります。
これとは別にFTPの場合、パッシブモードを設定しておく必要があります。これはネットワーク環境に依存します。パッシブモードは、FTPオブジェクトのpassiveプロパティにtrueまたはfalseを指定します。trueであればパッシブモードになります。ls()でファイル一覧を取得したまま、次の処理が行われない場合には、パッシブモードの設定を確認してみてください。
ls()によりファイル一覧を取得できた場合には、それぞれ以下のFTPオブジェクトのプロパティにファイル情報が格納されます。
files ファイル名/ディレクトリ名
flags 種類(ファイルかディレクトリかなど)
sizes ファイルサイズ (バイト数)
dates ファイルの作成日 (Dateオブジェクト)
サンプルは、FTPサーバー上にあるホームディレクトリの一覧を取得しInDesign上に配置するものです。
ls()によるファイル一覧の取得を行う場合には、必ず以下の方法でWeb Accessライブラリを読み込ませてください。古いJavaScript Tools Guideのサンプルコードでは、エラーになってしまうことがあるためです。
if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
}
また、FTP処理でエラーが発生した場合には、FTPオブジェクトのerrorプロパティを参照することで、どのようなエラーなのかを確認することができます。エラーの中でも、タイムアウトに関しては注意が必要です。タイムアウトまでの時間は、FTPオブジェクトのtimeoutプロパティで秒数を指定します。特に設定しない場合には5秒となっており、ネットワーク環境や状況によってはタイムアウトとなってしまうこともあります。うまく接続できない場合には、タイムアウトまでの時間を120秒や180秒など長めに指定してみてください。
●サンプル
// FTPサーバーにあるファイル一覧を取得しInDesign上に配置する
(function(){
var CR = String.fromCharCode(13);
var tfObj = app.activeDocument.textFrames.add();
tfObj.visibleBounds = ["2cm", "3cm", "10cm", "14cm"];
var fileList = getFtpFilelist("ftp://www.openspc2.org","adobe","indesign","./",);
for (var i=0; i< fileList.files.length; i++){
tfObj.contents += fileList.files[i] + CR;
}
})();
// FTPを使って指定されたサーバーのディレクトリにあるファイル一覧を取得し返す
function getFtpFilelist(sURL, userName, password, dir){
if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
}
var ftp = new FtpConnection(sURL);
ftp.username = userName;
ftp.password = password;
ftp.ftpDir = dir;
ftp.passive = false; // パッシブモードの設定
var flag = ftp.ls();
if (flag == false){
alert("エラーです。ファイル一覧を取得できません");
}
ftp.close();
return ftp;
}
これで、やっとInDesign CS3の通信ネタが終わりですが、このような機能を利用することでより自動化を進めることが可能になります。Webサーバーなどを用意したりせずとも、InDesign CS3で可能になるわけです。クライアントから送信されたデータがあれば自動的にチェックしてレイアウトするなど、使い方次第で強力なものになると思います。
【古籏一浩】openspc@po.shiojiri.ne.jp
< http://www.openspc2.org/
>
昨年購入したSeagateの1.5TBのハードディスク、例のファームウェアが駄目なやつでした。幸い箱に入ったままで使っていませんでしたので、トラブルに巻き込まれることはありませんでしたが。
< http://gigazine.net/index.php?/news/comments/20090119_barracuda_7200_11/
>
機械ものは滅多に不良品にあたらないはずなのに。新サーバーも1.5TB HDDを装着予定だったので、しばらく稼働しない状態に。
ということで、映像素材などの追加は当面先になりそうです。
・AfterEffects CS4自動化作戦
< http://www.openspc2.org/book/AfterEffectsCS4/
>
CS4のScripting Guideはどこに? AdobeのWebサイトには見あたらない……
(CS3のままになっているようですが)
- 改訂第4版 JavaScript ポケットリファレンス
- 古籏 一浩
- 技術評論社 2006-10-18
- おすすめ平均
- JavaScriptを使ったプロジェクトのお供に是非
- JavaScript仮免者以上の方へ
- バランスの良いバイブル
- 中級者向けです。
- Ajax逆引きクイックリファレンスWeb2.0対応for Windows & Macintosh
- 古籏 一浩
- 毎日コミュニケーションズ 2006-03
- おすすめ平均
- Ajaxの基本的な用途がわかる
- みやすくわかりやすい
- 入門は不要な人向け
- 知ってる人は使いやすい
- サンプル多いのが良い
by G-Tools , 2009/02/02