30分プログラムリスト

mzp2007-11-09

30分プログラム、その178。id:20070529:flistに機能追加。
はてブのブックマーク数を表示するようにした。

使い方

$ perl croquis_list.pl ~/c/docs/hatena/*.txt

*list*[30分プログラム]30分プログラムリスト
**Perl
- [http://d.hatena.ne.jp/mzp/20070416/rpn:title] <a href="http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/mzp/20070416/rpn"><img src="http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/mzp/20070416/rpn" /></a>
- [http://d.hatena.ne.jp/mzp/20070419/fortune:title] <a href="http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/mzp/20070419/fortune"><img src="http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/mzp/20070419/fortune" /></a>
- [http://d.hatena.ne.jp/mzp/20070425/lcs:title] <a href="http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/mzp/20070425/lcs"><img src="http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/mzp/20070425/lcs" /></a>
- [http://d.hatena.ne.jp/mzp/20070429/cgi:title] <a href="http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/mzp/20070429/cgi"><img src="http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/mzp/20070429/cgi" /></a>
- [http://d.hatena.ne.jp/mzp/20070503/oop:title] <a href="http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/mzp/20070503/oop"><img src="http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/mzp/20070503/oop" /></a>
- [http://d.hatena.ne.jp/mzp/20070507/busybox:title] <a href="http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/mzp/20070507/busybox"><img src="http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/mzp/20070507/busybox" /></a>
- [http://d.hatena.ne.jp/mzp/20070511/db:title] <a href="http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/mzp/20070511/db"><img src="http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/mzp/20070511/db" /></a>

手で書ける限界をあっさり越えている気がする。

ソースコード

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Encode;

print "\n";
print encode("UTF-8","*list*[30分プログラム]30分プログラムリスト\n");

my @titles = map {
    open(FILE,$_);
    /(\d{4})-(\d{2})-(\d{2})\.txt$/ or die "filename is invalid";
    my $date = "$1$2$3";
    my @titles = grep {/\*.*\[30/ } <FILE>;
    close(FILE);
    map { [$date ,$_] } @titles;
} @ARGV;

for my $lang (qw(Perl Python Ruby Scheme Haskell Javascript OCaml)){
    print "**$lang\n";
    for (grep { $_->[1] =~ /$lang/i} @titles){
	if($_->[1] =~ /^\*(\w+)\*/){
	    my $url = "http://d.hatena.ne.jp/mzp/$_->[0]/$1";

	    # はてなブックマークへのリンクを貼る
	    my $entry = "http://b.hatena.ne.jp/entry/$url";
	    my $img = "http://b.hatena.ne.jp/entry/image/$url";
	    my $bookmark = qq(<a href="$entry"><img src="$img" /></a>);

	    print "- [$url:title] $bookmark\n"
	}
    }
}