複数のPDFを一つのファイルに
またまた小ネタですいません。
いや、週末はYAPCのまとめとか書くつもりだったんですが、なんだかんだいろいろと脱線しまくってたところで、嫁が「ウチは新聞とってないから区報を読もうと思ったらどっかでもらってこないと」と言いだしたので、区報なんて区のサイトに掲載されてたりするんじゃないの?と思って見てみると、練馬区の場合、ちゃんとPDFデータが公開されてるんだけど、1ページ1ファイルになっててそれが毎号8ページ分、っていう形式だったので、これはめんどくさいということで、全部ダウンロードしてくっつけてしまえ、というスクリプトを書いてみました。
もっとネタ的に面白くなるかと思ったんだけど、CPANを漁ってCAM::PDFというモジュールを見つけたら、あとはこんな簡単にできちゃってもうネタにもなりませんね。CPAN万歳!
#!/usr/bin/env perl use strict; use CAM::PDF; use LWP::UserAgent; my $date = shift || do { my ( $y, $m, $d ) = ( localtime() )[ 5, 4, 3 ]; sprintf "%d%02d%02d", $y + 1900, $m + 1, $d; }; my $base_url = 'http://www.city.nerima.tokyo.jp/kuho/' . $date; my $output = './' . $date . '.pdf'; my $ua = LWP::UserAgent->new( keep_alive => 1 ); my $get_pdf = sub { my $url = sprintf "%s/page%d.pdf", $base_url, $_[0]; my $response = $ua->get($url); die $response->status_line unless $response->is_success; return CAM::PDF->new( $response->content ); }; my $pdf = $get_pdf->(1); $pdf->appendPDF( $get_pdf->($_) ) for ( 2 .. 8 ); $pdf->cleanoutput($output); __END__
ちなみに、練馬区の区報は毎月1日11日21日の3回発行です。これを発行日に自動で実行するようにしといてメールで送りつけるとかもありですね。
あ、あとでYAPCのまとめもちゃんと書きますよ(のつもり)。