« Perlでニコニコ動画のflvとコメントxmlをダウンロードする | メイン | Plagger::Plugin::Filter::FetchNicoVideo / ver0.01 »

Danさんに勝手に添削されて学んだこと

Danさんに初めて勝手に添削された→ 404 Blog Not Found:perl - 勝手に添削 - ニコニコ動画ダウンローダー。 「勝手に」添削されるって不思議な気分。ぶっちゃけこの記事見つけたときには、「勝手に」添削されているだけあって一瞬ムっとしたw。だけど、Danさんのようなお方に直接コードを直してもらうってこと自体、ペーペーの俺にとっては嬉しいことだし、実際に直されたコードは、機能が追加されたにもかかわらず俺が書いたコード数の半分くらいになっていて読みやすくなっているのでPerlのノウハウとしても学ぶことが多かった。ってかこんだけ変わると自分の書いたコードが恥ずかしくなってくる。が、そこは、Perlのモットー「There's More Than One Way To Do It」に習って、「いろんな書き方があって面白いなー」とPerlの奥深さを楽しみつつ、自分もスマートなコードを書けるように鍛錬する。 以下、Danさんが書いたコードからいくつか学んだ点を、引用しつつ、自分でまとめる。

ユーザー名(mail)とパスワード(password)は、~/.nicovideo.ymlに移動。

これは「軽く試す」という目的のスクリプトなのでハードコンフィグでいいや、と思ってた。 コンフィグを分離するにはYAMLは便利ですね。コードもスマート。

UAでKeep Aliveを有効に。少しでも鯖をニコニコさせたいので。

keep_aliveオプションって使ったことないんだけどApacheのKeepAliveディレクティブと同様に「通常だとサイトへの接続が終了した後、続けて再度接続しようとすることがある。このオプションを使用すると接続を開いたままの状態で維持し、再接続時の遅延を最小限に抑える。」という解釈でいいのかな? 確かに相手の鯖のことも考えることは大事。

cookieは、必ずloginするので非保存に。

なるほど。無駄なファイルは作らなくて済むし。

queryの処理はCGIモジュールにおまかせ

これは驚いた。CGIモジュールってこんなことできるんだ。ソースで言うと以下の部分。

#Danさんのソース
#$res->contentは url=value&ms=value... といった文字列
my $q   = CGI->new( $res->content );

#俺のソース、一度splitで分解してから%dataというハッシュに入れてた
my %data;
my @temp = split("&",$res->content);
foreach my $prop (@temp){
        if($prop =~ /(.*?)=(.*)/){
                $data{$1} = $2;
        }
}

CGIのドキュメントみると「You can also initialize the query object from an associative array reference or from a properly formatted, URL-escaped query string ...」とか書かれてて例も出てた。こういうのを知っているか知らないかの差はでかいな。

    $query = new CGI('dinosaur=barney&color=purple');
ファイルへの保存をLWPに直接おまかせ。この方が$res->contentを使うよりメモリー節約になる。

今思うと確かになんで、いちいちファイルハンドル開いて$res->contentをprintするっていう面倒なことをしていたのか、と自己反省。ただLWPで直接保存するにはmirrorを使う方法しかしらなかった。 これもドキュメント読むと、$ua->requestの引数2つ目にファイル名が指定したり、$ua->getのcontent_fileオプションにもファイル名を指定してファイルとして保存することができる旨が書いてある。

コードの大幅な簡素化

まじ、簡素になった。これだけ機能追加した上に、コード量少なくなってかこいい。

qq{<thread res_from="-500" version="20061206" thread="$thread_id" />}

最後に、このqq/STRING/という書き方。 STRINGがダブルクォートに囲まれたという意味なんだけど、こう書けば、STRING内のダブルクォートをエスケープしなくて済んで楽。

ということでDanさん添削してくださってありがとうございます。

トラックバック

このエントリーのトラックバックURL:
http://yusukebe.com/mt/mt-tb.cgi/2139

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


ブログSEO対策:track word seo