-->
./
<!-- フラ&#65533;ュが見れな&#65533;のためにここに何か書&#65533; --> フラ&#65533;ュがインス&#65533;&#65533;ルされて&#65533;&#65533;たいで&#65533;&#65533;&#65533;

2009年10月28日

さくらのブログの過去記事を一覧のリストで取得

ブログの過去記事のアップロード日時を全て知りたいです。 RSSを使って日時を確認しようとしたのですが、 下記を取得すると http://blog.livedoor.jp/dqnplus/index.rdf 過.. - 人力検索はてな

 この記事を参考にさせていただきました。perlのスクリプトが紹介されていたので、試しに取得するURLの部分だけを書き換えて実行してみたところ、一発でうまく取得できました。
 しかし、結果をよく見てみると、一つ困った問題があることに気がつきました。せっかく取得できたリストのデータが記録された日付順に並んでいなかったんです。どういう規則で並んでいるのかも不明なのですが、8割方は順番に並んでいるように見えるものの実際はバラバラなのです。

 アーカイブのファイル名が例えば「2009-10.html」となっていますが、ブラウザからこのURLで接続すると記事の数に合わせて分割されたページのURLに置き換わりました。htmlという拡張子になっているので静的なhtmlファイルに見えますが、CGIやサーブレットで動的に生成されているページの可能性もあるかと思います。詳しく調べれば、仕組みもわかりそうですが、そこまではやっていません。

 分割されたページの数に応じて、「2009-10-1.html」、「2009-10-2.html」のように番号が振られ、今回自分の場合は5までありました。これはブラウザで接続したときのページにリンクとして表示されている数でもあるので、当然この番号に応じて記事が日付順に並んでいるはずだと考えました。

 そこでcurlコマンドを使い、次のように実行しました。
curl http://hirono-hideki.sblo.jp/archives/%04d-%02d-[1-5].html

 スクリプト中では変数を使っているので次のようになっています。これがhtmlを読み込むメインの部分です。
my $command = sprintf("curl -# http://hirono-hideki.sblo.jp/archives/%04d-%02d-[1-%d].html", $y, $m, $p);

 これでうまく順番通りに並んでくれるものと期待したのですが、結果はダメでした。さらにおかしなことに気がつきました。一月分のデータで「2009-10.html」などと指定しても肝心のリストのデータが取得できないのです。どうやら指定した年月から遡って一番古い記事までの範囲をすべてリクエストしなければ、必要なデータを得ることが出来ないみたいです。リクエストのヘッダ情報から応答の処理を切り替えているのか、それとも転送されたデータのバッファリングの問題なのか、と個人的に見当を付けているのですが、今までに経験したことのないような問題に遭遇してしまいました。

 一度、どういうわけか取得したhtmlのなかで、スクリプトで抜き出している情報を見ることができたのですが、その後はいろいろ試してみたものの、本体部分の抜けたスタイル情報のようなhtmlソースしか取得出来なくなりました。初めの方でたまたうまくいったときに、ソースコードを眺めて、カテゴリ情報の入っている部分を知ることが出来たので、これも参考にさせていただいたソースに付け加えました。他に変更点はコマンドをwgetからcurlに変更したことですが、curlの方が処理も速いみたいです。


ソースコード

#!/usr/bin/perl

#--- main
$y = 2009;
$p = 5;
while($y>=2009){
        $m = 10;
        while($m>=1){
                getDqn($y, $m);
                $m--;
        }
        $y--;
}
exit;


sub getDqn{
        sleep 1;
        my $command = sprintf("curl -# http://hirono-hideki.sblo.jp/archives/%04d-%02d.html", $y, $m);
        #my $command = sprintf("curl -# http://hirono-hideki.sblo.jp/archives/%04d-%02d-[1-%d].html", $y, $m, $p);
        open(my $fh, "$command |");
        while(<$fh>){
                print "TITLE: $1\n"   if(/dc:title="([^"]+)"/);
                print "CATEGORIE: $1\n" if(/dc:subject="([^"]+)"/);
                print "URL:   $1\n"   if(/dc:identifier="([^"]+)"/);
                print "DATE:  $1\n\n" if(/dc:date="([^"]+)"/);
        }
        close($fh);
}


 curlについては次のページを参考にさせていただきました。これまでにも何度かお世話になっているページです。実践的な使い方が書いてあります。
http://www.big.or.jp/~crane/cocoa/0800_internet/curl/

 curlを知り使うようになったのは3年ほど前でしょうか、Emacsのhatena-modeを動かすのに必要になりました。Linuxでも標準ではインストールされていないと思いますが、apt-getやyumで簡単に入るはずです。WindowsXPのMeadowでもhatena-modeを使っていたので、Windowsパソコンでもcurlを使えると思いますが、あれはCygwinのパッケージに含まれていたものであったかもしれません。

 スクリプトを実行した結果は次のような感じです。
TITLE: vimのシンタックスハイライト処理をクリップボードに入れる
URL:   http://hirono-hideki.sblo.jp/article/33157861.html
CATEGORIE: UNIXコマンドスクリプト
DATE:  2009-10-24T12:39:37+09:00

TITLE: ほとんど触れなかった場合、「捜査続行を意味し、立件を本気で目指している可能性が高い」
URL:   http://hirono-hideki.sblo.jp/article/33137174.html
CATEGORIE: 検察
DATE:  2009-10-23T13:05:07+09:00

TITLE: 娘の死に関する真相の一端でも知りたい、押尾被告の初公判に女性遺族が傍聴券求め並ぶ
URL:   http://hirono-hideki.sblo.jp/article/33136692.html
CATEGORIE: 刑事裁判
DATE:  2009-10-23T12:42:18+09:00

TITLE: 賠償責任を巡り県と市が争った裁判で、最高裁が初判断
URL:   http://hirono-hideki.sblo.jp/article/33136524.html
CATEGORIE: 日記
DATE:  2009-10-23T12:29:11+09:00

TITLE: 「宅八郎容疑者を書類送検 アキバ系と揶揄されミクシィに「ぶっ殺す」」:イザ!
URL:   http://hirono-hideki.sblo.jp/article/33136444.html
CATEGORIE: インターネット/ブログ
DATE:  2009-10-23T12:22:42+09:00

TITLE: [fml]メーリングリストの初期化
URL:   http://hirono-hideki.sblo.jp/article/33129065.html
CATEGORIE: インターネット/ブログ
DATE:  2009-10-23T02:56:48+09:00
TITLE: [fml]さくらインターネットのfmlでバージョン確認
URL:   http://hirono-hideki.sblo.jp/article/33124008.html
CATEGORIE: インターネット/ブログ
DATE:  2009-10-22T23:13:01+09:00
TITLE: fmlコマンドリファレンス
URL:   http://hirono-hideki.sblo.jp/article/33123840.html
CATEGORIE: 日記
DATE:  2009-10-22T23:03:13+09:00
 並べ替えもかねて、今度暇のあるとき、RubyでMySQLのデータベースに自動で登録するスクリプトを作り、それをRailsで検索表示が出来るようにしたいと考えています。このさくらのブログは今月の12日から始めたのですが、記事も100件近くになっているみたいで、もうこの段階においても目的の過去記事を探し出すのは容易ではなくなっています。
 Hatena::Diaryだと過去記事の一覧のページがあったり、検索機能でも記事名だけの表示が出来たので、本当に不便に感じていました。RSSだと最新記事から15件程度しか取得できないみたいですし、手作業でリストを作る気にもなれず、どうしたものかと頭を痛めていました。

 なお、「bloglines」(http://www.bloglines.com/myblogs)というサービスも参考にさせていただいたところで知り、早速登録して使ってみました。RSSの記事情報が蓄積されるみたいなのですが、まだ始めたところなので、どういう具合かよくわかりません。ざっとみたところカテゴリー別の表示なども出来ないみたいなので、記事が増えれば探し出すのに相当、時間も手間が掛かりそうです。








Powered by ScribeFire.

この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/33237647

この記事へのトラックバック