KazMuzik.net
Music / Technology / Healthcare / Immigration / アメリカ
Google
 
<< Twitter 2009-05-28Twitter 2009-05-29 >>

all blog entries fetched with curl - KazMuzik Blog
2009-05-28 09:31

1年前には、Nutch (0.9) を利用して、このブログのエントリをすべて fetch して、以降は、同様に差分だけを fetch して、これらの HTML をコンバートして、kazmuzik.net/lj を作成していました。しかし、各エントリのページだけならよいのですが、Tag のページや最新の 20エントリを含むページなども、その都度、fetch してコンバートしていたので、かなり無駄な作業をしていました。効率化する構想はずっとあったのですが、つい延ばし延ばしになっていました。今回は、web hosting service を利用し始めたので、本格的にブログを移行するため、本格的に手を入れることにしました。

まずは、各エントリページの fetch の部分を curl を用いることにしました。以前は Nutch を使っていたものの、depth=1 で、seeds のページだけを fetch していたので、crawler としては活用していませんでしたし、Hadoop ファイルシステムにデータがあったので、扱いが面倒になっていました。今回は curl によるシンプルな fetch として、各エントリごとに、ひとつのファイルとします。

その前に、自分のエントリの ID をすべて得ておく必要があります。これには、月ごとのページを利用することにします。例えば、今月のページは、http://kazuomik.livejournal.com/2009/05/ ですが、これから今月のエントリの ID をすべて得ることができます。このブログは 2006年から始めたので、それ以降の月のページをすべて curl で fetch します。
$ curl http://kazuomik.livejournal.com/[2006-2009]/[01-12]/ -o "#1-#2.html"
$ ls
2006-01.html	2006-11.html	2007-09.html	2008-07.html	2009-05.html
2006-02.html	2006-12.html	2007-10.html	2008-08.html	2009-06.html
2006-03.html	2007-01.html	2007-11.html	2008-09.html	2009-07.html
2006-04.html	2007-02.html	2007-12.html	2008-10.html	2009-08.html
2006-05.html	2007-03.html	2008-01.html	2008-11.html	2009-09.html
2006-06.html	2007-04.html	2008-02.html	2008-12.html	2009-10.html
2006-07.html	2007-05.html	2008-03.html	2009-01.html	2009-11.html
2006-08.html	2007-06.html	2008-04.html	2009-02.html	2009-12.html
2006-09.html	2007-07.html	2008-05.html	2009-03.html
2006-10.html	2007-08.html	2008-06.html	2009-04.html
$ 

一部、不要な月もありますが、データはないので気にする必要はありません。

次に、これらの HTML のパターンを解析して、ID を抽出します。
$ cat *.html | grep 'm:  <a href="http://kazuomik.livejournal.com/' \
| sed -e 's/^.*livejournal\.com\///' -e 's/\.html\">.*$//' \
| sort -k1nr \
> id.txt
$ cat id.txt
341891
341649
341249
341145
340856
340482
340465
340137
339949
339476
...
2603
2409
2080
1960
1598
1332
1120
1008
722
495
$ wc -l id.txt
    1335 id.txt
$ 

1,335 のエントリがありました。

あとは、各エントリのページをひとつずつ fetch します。
$ cat curl-all.sh
#!/bin/sh
for N in `cat id.txt`
do
  curl http://kazuomik.livejournal.com/${N}.html -o ${N}.html
done
$ sh curl-all.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 55323  100 55323    0     0   124k      0 --:--:-- --:--:-- --:--:--  630k

...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 52824  100 52824    0     0  78390      0 --:--:-- --:--:-- --:--:--  142k
$ 

25分程度で、1,335 すべてのエントリが fetch できました。

Tags: programming