このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
日記一覧ページである、list_diary.pl では、
完全な日記の情報は得られない。
何が不足しているか。
まずは、本文である。
日記一覧ページでは要約しか表示されていない。
そして、日付である。
一見、日付と時間は取得できるように見えるが、
そのうち、「年」の情報が不足している。
2006/7/29 と 2005/7/29 の区別ができないのだ。
つまり、日記一覧ページから取得できるのは、
「タイトルだけ」ということになる。
タイトル以外の詳細情報を取得するためには、
日記詳細の各ページにアクセスする必要がある。
各日記項目に対応する日記詳細ページの URL は、
「続きはこちら」のリンクに記載されており、
view_diary.pl?id=(日記 ID)&owner_id=(所有者 ID)
という形式になっていることがわかる。
view_diary.pl は、list_diary.pl と違い、
所有者 ID が必須である。
では、タイトルと日記 ID と所有者 ID を抜き出してみよう。
========== Main.js ==========
function main() {
// ログイン
var session = new MixiSession(
"自分のメールアドレス", "パスワード");
// 日記一覧ページの HTML を取得
var html = session.fetch("http://mixi.jp/list_diary.pl");
// 日記の正規表現
var rexEntry = new RegExp(
"<td bgcolor=#F2DDB7> ([\\w\\W]*?)</td></tr>"
+ "[\\w\\W]*?"
+ "<a href=\"view_diary.pl\\?id=(\\d+)&owner_id=(\\d+)\">続きはこちら</a>", "ig");
for (;;) {
var match = rexEntry.exec(html);
if (match == null) break;
WScript.Echo("================================");
WScript.Echo("タイトル: " + match[1]);
WScript.Echo("日記 ID: " + match[2]);
WScript.Echo("所有者 ID: " + match[3]);
WScript.Echo("================================");
// view_diary.pl から詳細を取得する
/*
session.fetch("http://mixi.jp/view_diary.pl",
{ id : match[2], owner_id : match[3] } );
*/
}
}
main();
========== end of Main.js ==========
上記では、日記詳細の取得はコメントアウトしている。
現在 MixiSession は制限をしていないため、
サーバに対して連続的にリクエストが飛び、
このままでは負荷を掛けることになってしまうからだ。
また、コードが少し複雑になってきたので、
明日は、list_diary.pl と view_diary.pl へのアクセスを、
クラスに隠蔽することを考えてみよう。