2005/09/09

perlと格闘

IRCでRSSをとってきてblogの更新情報をNoticeで流してくれるBOTを整備してよ! って頼まれたのでちょっと必死でPerlと格闘してました。こういうのはたいぷちゃんの仕事だとおもうんだが

まぁベースになるスクリプト自体はnewsbot.plっていうのがあるからこれでなんとかして! って話だったんですが、オレCPANの使い方さえ知りませんから!

この話自体は昔からあって、昔はcygwinでCPANしようとして見事に撃墜されてこの話はお流れになってたんですが、coLinuxを整備した今ならいけるだろうということで、もう1回挑戦してみたわけです。にもかからわず、CPANでinstallがさっぱりできません。

えー、LinuxでCPANにハマるとかありえないよ、なんだこれ、オレperlに嫌われてるんじゃないのー(もしくはオレperlが嫌い)と思ってよくよくしらべてみたら、makeでこけてました。コンパイルでこけるんじゃなくて、makeコマンドが入ってないと。

そうだよなー、apt-getでパッケージとってくるだけだからmakeって今まで必要になったこと無かったし、そりゃ確かに入ってなくてもおかしくない(けど入ってないのはおかしいな)ってことで、apt-getでmakeパッケージ入れて、もっかいCPANと格闘。

…すんなり入るじゃないか…。

ということで必要なモジュールのインストールがおわったので、あとはちゃんと動くようにすればおっけーだ。いろいろ設定してテストしてみると…JugemのRSSでパースエラーとかでてますね。

RSS Validatorで調べてみてもエラーでないし、さてこまったなと思ってまた調べてみることに。とりあえずperlうんぬんの前にwgetで/?mode=rssなURLを叩いても普通のHTMLが出てくることを確認しました。なんだこれ。そこで--user-agent=Mozilla/4.0とかを追加してwgetしなおしてみるとあれ、ちゃんとRSSでてくるなぁ……ってことは、Jugemはmode=rssにしててもUAで選別してRSSを吐いてくれない場合とかがあるわけですかい。なんだこのヒドい仕様。

ってことで、newsbot.pl付属のrss.plを本格的にいじってblog.plとかいう別名で保存して、ちゃんとUAでMozilla/4.0とかを含むようなのを吐き出すようにしました。Mozilla/4.0 (compatible; blog.pl; coLinux; powawa)とかだったかな。てきとー。

で、動かしてみたら、ちゃんとUAおくれてねー。それもそのはず、LWP::UserAgentなオブジェクトを作るだけ作ってそれ使って取得してないんだもん、そりゃそうだ。ってことで。

$response = get($uri);

と1行で取得できてたのが

my $ua = LWP::UserAgent->new;
$ua->agent('Mozilla/4.0 (compatible; blog.pl; coLinux; powawa)');
my $reqObj=HTTP::Request->new('GET', $uri);
my $resObj=$ua->request($reqObj);
$response=$resObj->content();

5行になったけど、まぁこれでちゃんとUAおくってRSSとってきてパース通るようになったので、これでいいか。

とりあえず、なんかperlいじったぜみたいな気分になったけど、あんまり達成感っていう感じがしないのはなんだろね。

うされもん @acidlemonについて

|'-')/ acidlemonです。鎌倉市在住で、鎌倉で働く普通のITエンジニアです。

30年弱住んだ北海道を離れ、鎌倉でまったりぽわぽわしています。

外部サイト情報

  • twitter
  • github
  • facebook
  • instagram
  • work on kayac