このページの本文へ

画像の自動アップロードもJavaScriptにお任せ! (2/4)

2010年02月12日 11時00分更新

文●古籏一浩

  • この記事をはてなブックマークに追加
本文印刷

Photoshopと組み合わせる

 ファイル転送の処理ができたので、前回解説したBridge Talkを使ってBridgeからPhotoshopを呼び出し、JPEG画像を生成した上でFTPサーバーに転送してみましょう。

 先ほどのFTP転送の処理はftpPut()という関数にまとめました。引数に転送元のファイル名と転送先のファイル名を指定して呼び出すと、特定のサーバーにファイルを転送します。

 Bridge TalkでPhotoshopのスクリプトを実行し、その後実行する処理をonResultに指定します(前回の記事を参照)。onResultはPhotoshopでの処理が正常に完了しなかった場合に"NG"の文字を返しますので、返り値が"NG"以外の場合にのみftpPut関数を呼び出し、FTP転送を実行します。

 ここまでをまとめたのがサンプル02です。WebサーバーからRSSファイルを読み込んで画像を生成し、FTP転送するまでを完全に自動化したものがサンプル03になります。多少長めのスクリプトですが、前回の記事も参照してもらえば流れが分かるでしょう。

●サンプル02


#target "Bridge"
var bt = new BridgeTalk();
bt.target = "Photoshop";
var fileObj = new File("~/ps_text.jsx");    // Photoshopで処理を行わせるためのスクリプトファイル名
var flag = fileObj.open("r");
if (flag){
    bt.body = fileObj.read();
}
bt.onResult = function(returnBtObj){ 
    if(returnBtObj.body != "NG") {  // 正常終了した場合に処理を行う
        var localfile = new File("~/rss_title.jpg");    // 転送元のファイルパス
        var filename = "rss_title.jpg";   // 転送先のファイル名
        ftpPut(localfile, filename);
        alert("FTP転送が終了しました");
    }
}
bt.send();
// FTP転送を行う関数
function ftpPut(localfile, filename){
    // Http, Ftpが使えるようにする
    if ( !ExternalObject.webaccesslib ) {
        ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
    }
    // FTP転送するサーバー名
    var url = "ftp://●●●●●●●●●";
    var username = "asc"; // ユーザー名
    var pw = "ascii"; // パスワード
    // FTPサーバーへ接続
    var ftp = new FtpConnection(url);
    ftp.username = username;    // ユーザー名
    ftp.password = pw;  // パスワード
    ftp.binary = true;  // バイナリモード
    var flag = ftp.open();
    if (flag == true){  // 正常に接続できた場合に処理
        ftp.put(localfile, filename); // ファイルを転送
        ftp.close();
    }else{
        alert("FTPサーバーに接続できませんでした");
    } 
    localfile.close();
}

●●●●●●●●●:FTPサーバー名を入れて下さい



●サンプル03


#target "Bridge"
// Http, Ftpが使えるようにする
if ( !ExternalObject.webaccesslib ) {
    ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
}
// RSS読み込み
RSS_read();
// Bridge TalkでPhotoshopを呼び出し
var bt = new BridgeTalk();
bt.target = "Photoshop";
var fileObj = new File("~/ps_text.jsx");    // Photoshopで処理を行わせるためのスクリプトファイル名
var flag = fileObj.open("r");
if (flag){
    bt.body = fileObj.read();
}
bt.onResult = function(returnBtObj){ 
    if(returnBtObj.body != "NG") {  // 正常終了した場合に処理を行う
        var localfile = new File("~/rss_title.jpg");    // 転送元のファイルパス
        var filename = "rss_title.jpg";   // 転送先のファイル名
        ftpPut(localfile, filename);
        alert("FTP転送が終了しました");
    }
}
bt.send();
// RSSデータを取得
function RSS_read(){
    // 取得先のURLと保存先のパスを指定
    var url = "http://www.ascii.jp/cate/1/rss.xml";
    var filepath = "~/rss_ascii.xml";
    var savepath = "~/rss_title.txt";
    // Webサーバーへ接続
    var http = new HttpConnection(url);
    http.response = new File(filepath);
    http.execute();
    http.response.close();
    // 読み込んだRSSのタイトルをファイルに保存
    var fileObj = new File(filepath);
    if (fileObj.open("r")){
        var txt = fileObj.read();
        var rssData = new XML(txt);
        var text = "";
        var count = rssData.channel[0].item.length();
        for(var i=0; i<count; i++){
            var newsTitle  = rssData.channel[0].item[i].title;
            text = text + newsTitle + "\n";
        }
        var fileObj = new File(savepath);
        if (fileObj.open("w") == true){
            fileObj.write(text);
            fileObj.close();
        }else{
            alert("ファイルを保存できません");
        }
    }
}
// FTP転送を行う関数
function ftpPut(localfile, filename){
    // FTP転送するサーバー名
    var url = "ftp://●●●●●●●●●";
    var username = "asc"; // ユーザー名
    var pw = "ascii"; // パスワード
    // FTPサーバーへ接続
    var ftp = new FtpConnection(url);
    ftp.username = username;    // ユーザー名
    ftp.password = pw;  // パスワード
    ftp.binary = true;  // バイナリモード
    var flag = ftp.open();
    if (flag == true){  // 正常に接続できた場合に処理
        ftp.put(localfile, filename); // ファイルを転送
        ftp.close();
    }else{
        alert("FTPサーバーに接続できませんでした");
    } 
    localfile.close();
}

●●●●●●●●●:FTPサーバー名を入れて下さい


この連載の記事

一覧へ

この記事の編集者は以下の記事をオススメしています