このアーカイブは同期化されません。 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);
これで写真を保存することができるようになった。