最新 RSS

horiday blog

2010/11/26

[diary] スーパーになる

本日は職場で打ち合わせがありました.打ち合わせ後にスタッフのニシモリ君が購入したスーパーカブ 50 を見せてくれました.

郵便配達や新聞配達で同じみのスーパーカブですが,実際に近くで見てみるとかなりオシャレな形だと思いました.

その後ニシモリ君が帰るときに,ラフな格好にフルフェイスのヘルメットを装着して,このスーパーカブに乗っている姿は,布の服と鉄の兜というアンバランスな組み合わせの装備をした人に見えて面白ろかったです.

関連リンク


2010/11/01

[perl] WWW::Mechanize でアクセスしたときのエラー処理

perl から WWW::Mechanize を使って,Web ページを解析していたときに,ページが取得できなかったときのことを考えずにコードを書いていました.

しかし実際はサーバから Temporarily Unavailable が返ってくるとプログラムごと終了してしまいました.

そこで下記のように get したあとに結果を確認するようにしたのですが,結局 get した時点でエラーを吐いて終わってしまいました.

my $mech = WWW::Mechanize->new();
$mech->get("http://whitebase.org/");
if ($mech->success()) {
  # code for page access
  print "ok\n";
} else {
  # code for not success
  print "not ok\n";
}

$mech->success() 自体使えないじゃないかと思いながら,WWW::Mechanize の仕様を確認してみると,下記のように書いてあり,デフォルトでエラー時には CORE::die が呼び出されているということがわかりました.

onerror => \&func
Reference to a die-compatible function, such as Carp::croak, 
that is called when there's a fatal error.

If this is set to undef, no errors will ever be shown.

If this value is not passed, Mech uses Carp::croak if Carp is 
installed, or CORE::die if not.

ということで,mechanize を new するときに下記のように書くと,エラー時には何も成功するまでトライ(汗)するようになりました... 実際には retry の処理などを書かないといけないのですが,get 時に問題があったら終了しないようにはできそうです.

my $mech = WWW::Mechanize->new(onerror => undef);
until (my $response = $mech->get("$url")) {}

関連リンク