天然パーマです。

Perl でライフハック(?)「リンクの横にはてなブックマークのUser数を表示する」捨てスクリプト

lestrrat こと 牧さん が中心となって推し進められている JPeA(Japan Perl Association) があります。 詳しいことは公式の wiki をご覧になっていただきたいのですが、 そのプレミーティングの時にたつをさんが、 「Perl はライフハックツールだ」みたいなことを切り出してみんなで盛り上がりました。

「Perl と言えば CGI の言語」と思われがちですがそんなことは無く、例えば Web に限らずに、 ちょっとした作業を自動化するプログラムをサクっと書けるのが魅力だったりします。 繰り返しが続く作業や、何かのフォーマットを違うフォーマットに変換するなどといったことは、 日々の業務でよく起こりうることで、それを Perl でもっと楽チンに、 そして楽しく処理しましょうね、 なんてことができるので「Perl はライフハックツール」とも言えるじゃないかということですね。 ( * もちろん他の言語でもできるのですが、Perl はテキストを扱うことに長けているのと、 俺が Perl 使っているのと、JPeA 的スタンスで「Perl かわいいよ」という展開になってますw)

さて、ちょうど先ほどの「あけおめ」エントリーでそのような場面に出くわしたので、 簡単に紹介します。記事の中では、以下のように他の記事へのリンクがたくさん出てきました。

 <p>
  最後に紹介するのは、以下の記事です。
</p>
<ul>
  <li>
    <a href="LDR">http://yusukebe.com/archives/08/05/29/105145.html">LDR 購読者 1000人を突破しました</a>
  </li>
</ul>

そこで、このリンクの横に「10users」といった被はてなブックマーク数を表示した方が、見てる人にとってわかりやすいかなと思いました。 手作業で HTML を書いて表示させればいいのですが、めんどかったので Perl で捨てスクリプトを書いて サクっとその作業を終わらせました。 捨てスクリプトってのは基本、その場限りで使うようなものなんで、 今自分が持っている知識の範疇であんまり後先考えず作って、とりあえず今動けばいいというスタンスのコードという個人的認識です。

スクリプトは以下の通り。基本正規表現の処理です。

 use strict;
use warnings;
use Encode;
use utf8;

my $filename = $ARGV[0] || 'text.txt';
open my $fh, '<', $filename or die $!;
for my $line (<$fh>){
    if($line =~ m!href="(.+?)".*>(.+?)</a>!){
        my $permalink = $1;
        my $title = decode("utf8",$2);
        my $html = <<"EOF";
<a href=\"$permalink\">$title</a><a href=\"http://b.hatena.ne.jp/entry/$permalink\"><img src=\"http://b.hatena.ne.jp/entry/image/$permalink\" alt=\"このエントリーのはてなブックマーク件数\"></a>
EOF
        print encode("utf8",$html);
    }else{
        print $line;
    }
}

よろしくない点が混じっている可能性ありますが、それは捨てスクリプトということでご勘弁を。 さて、こうして手作業ではなく、Perl を使って処理をさせることには以下いくつかの利点があると思います。

  • 早く終わる
  • 手作業よりプログラムを書くことの方が面白い
  • プログラムを汎用的にすれば、使いまわせる

と、まぁライフハックなのかなんだかよくわかりませんが、とにかくテキストを扱う単純作業は Perl でやると便利で楽しいよって話でした。

Perl 入門書

初めてのPerl
posted with yusukebe.com::AmazonSearch on 2009.1.1
  • ランダル・L. シュワルツ トム フェニックス
  • 単行本 / オライリージャパン
  • Amazon 売り上げランキング: 34265
  • Amazon おすすめ度の平均: 4.5
    • 5 素晴らしきPerlの世界への案内
    • 5 読み物としても十分面白い
    • 5 定番書
    • 5 初心者も持っておきたい一冊
    • 5 CGI言語としてのPerl
Amazon.co.jpで詳細を見る

続・初めてのPerl 改訂版
posted with yusukebe.com::AmazonSearch on 2009.1.1
  • Randal L. Schwartz brian d foy Tom Phoenix 吉川 英興 伊藤 直也 田中 慎司 株式会社ロングテール/長尾 高弘
  • 大型本 / オライリー・ジャパン
  • Amazon 売り上げランキング: 104232
  • Amazon おすすめ度の平均: 5.0
    • 5 脱初心者へのステップとして
Amazon.co.jpで詳細を見る