KazMuzik.net
Music / Technology / Healthcare / Immigration / アメリカ
Google
 
<< Kaz Muzik Blog Google Search Project #4Kaz Muzik Blog Google Search Project #5 >>

Kaz Muzik Blog Backup Project #26 - KazMuzik Blog
2007-11-10 20:34

先ほどの Kaz Muzik Blog Google Search Project (#4) のために、しばらくサボっていた Kaz Muzik Blog Backup Project を再開させることにしました。

まずは、6/3 (#22) に書いたように、-init オプションをつけて LiveJournalFetchPreparator を実行しましたが、"/?skip=80" のページで Exception が発生して abort してしまいました。これは、4/30 (#11) の LiveJournalEntryParser にバグがあったためです。9/19 のエントリには、Tags, Current Location, Current Mood のすべてが付いていますが、HTML では、この 3つの情報がすべて、この順番に 1行に含まれています。ところが、この行を parse する順番が間違っていたため、Location に Current Mood: ... の余計な文字列が含まれて、長くなってしい、Derby データベースにストアするときに、エラーが発生してしまいました。まずは、この bug fix からです。
public class LiveJournalEntryParser extends BufferedReader {
  ...
  public LiveJournalEntry parse() throws IOException {
    ...
    String location = null;
    m = line.indexOf("<strong>Current Mood:</strong> ");
    if (m >= 0) {
      mood = removeTags( line.substring(m+31) );
      line = line.substring(0,m);
    }
    m = line.indexOf("<strong>Current Location:</strong> ");
    if (m >= 0) {
      location = removeTags( line.substring(m+35) );
      line = line.substring(0,m);
    }
    m = line.indexOf("<strong>Tags:</strong> ");
    ...
  }
  ...
}

次に実行したところ、"/?skip=400" で止まってしまいました。
$ ant
$ java -classpath classes:/usr/java/derby/lib/derby.jar LiveJournalFetchPreparator -init
http://kazuomik.livejournal.com/
152249*I 145303*I 151961*I 151707*I 151514*I 135539*I 151218*I 150763*I 150220*I 149897*I
149594*I 151028*I 150495*I 149305*I 149228*I 148921*I 148134*I 148649*I 148363*I 147935*I
http://kazuomik.livejournal.com/?skip=20
...
http://kazuomik.livejournal.com/?skip=380
54835*I 54734*I 54482*I 54085*I 53978*I 53663*I 53377*I 53139*I 52777*I 52543*I
52328*I 52168*I 51855*I 51556*I 51418*I 51044*I 50862*I 50481*I 50411*I 50032*I
http://kazuomik.livejournal.com/?skip=400
54835 54734 54482 54085 53978 53663 53377 53139 52777 52543
52328 52168 51855 51556 51418 51044 50862 50481 50411 50032
$ 

実際、/?skip=380/?skip=400 に直接アクセスすると、同じ情報が表示されます。LiveJournal では、"/?skip=NNN" の指定は、400 エントリまでの表示にしか対応していないようです。"/?skip=380" のページを一番下までスクロールさせて、"Previous" のリンクを確認すると、"/YYYY/MM/DD/" という日のページにリンクされています。

このブログのエントリも 400 を超えたため、以前のように、"/?skip=NNN" を使って、すべてのエントリを収集することが不可能になってしまいました。また、Google Search で、昔のエントリについては、月や日のページしか出てこないのは、これが原因のようです。

2007-11-17 update
ソースコードの <strong> を &lt; でエスケープしました。<pre> の中ですが、エスケープする必要があります。また、この箇所のために、LiveJournalEntryParser が、このエントリを処理している最中に、Exception が発生してしまいました。

Tags: programming