2006 年 7 月 30 日 23 時 15 分

一覧表示と詳細表示


このアーカイブは同期化されません。 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 へのアクセスを、
クラスに隠蔽することを考えてみよう。



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