2006 年 8 月 18 日 23 時 19 分

フォルダの作成と写真の保存


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


これで、写真をダウンロードする準備は整った。

写真には、MixiDiaryEntry クラスの、
getImages メソッドからアクセスできる。
getImages は配列を返し、各要素はオブジェクトで、
thumbnailURL と photoURL をプロパティとして持つ。

それらを HTML から参照することもできるのだが、
日記の写真を mixi へのアクセスなしに参照するには、
それをファイルに保存しておく必要がある。

現在、日記のファイル名は、
「yyyy-mm-dd-hh-mm」をベースにしているので、
サムネイルと写真本体を、
「thumbnails/yyyy-mm-dd-hh-mm-x.jpg」と
「images/yyyy-mm-dd-hh-mm-x.jpg」として保存しよう。

すべてカレントフォルダに書き出すと見づらいので、
サブフォルダを切ってそこに格納することにする。

さて、まずは出力先のフォルダを自動生成させよう。
わざわざ用意しておくのは非常に面倒だ。

フォルダを作成するには、FileSystemObject を使用する。
FileSystemObject は COM オブジェクトで、ProgID は "Scripting.FileSystemObject" だ。

FileSystemObject の、FolderExists と、
CreateFolder メソッドを利用してフォルダを操作する。
では、_export 関数の一部を書き換えてみる。

    // フォルダ名の最後に \ をつける
    if (outDir.charAt(outDir.length - 1) != "\\") {
        outDir += "\\";
    }

    // 出力フォルダがなければ作成する
    var fs = new ActiveXObject("Scripting.FileSystemObject");
    if (!fs.FolderExists(outDir)) {
        fs.CreateFolder(outDir);
    }

    // images フォルダがなければ作成する
    if (!fs.FolderExists(outDir + "images")) {
        fs.CreateFolder(outDir + "images");
    }

    // thumbnails フォルダがなければ作成する
    if (!fs.FolderExists(outDir + "thumbnails")) {
        fs.CreateFolder(outDir + "thumbnails");
    }


では、実際にダウンロードさせるコードも書いてみよう。
_export 関数内の、日記でループする場所を書き換える。

    // 項目を取得
    var item = iterator.next();

    // テンプレートに埋め込む
    var content = template.replace(macro, func);
       
    // ファイルのベース名を決める
    var date = item.getDate();
    var basename = date.getFullYear().formatLeadingZeroes(4)
            + "-" + (date.getMonth() + 1).formatLeadingZeroes(2)
            + "-" + date.getDate().formatLeadingZeroes(2)
            + "-" + date.getHours().formatLeadingZeroes(2)
            + "-" + date.getMinutes().formatLeadingZeroes(2);

    // 写真があれば保存
    var images = item.getImages();
    for (var i = 0; i < images.length; ++i) {
        session.download(outDir + "thumbnails\\" + basename + "-" + i + ".jpg", images[i].thumbnailURL);
        session.download(outDir + "images\\" + basename + "-" + i + ".jpg", images[i].photoURL);
    }

    // 本文を出力
    _writeFileText(outDir + basename + "." + extension, "UTF-8", content);

これで写真を保存することができるようになった。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.