30分プログラム一覧生成プログラム
30分プログラム、その221。30分プログラム一覧のページを生成するプログラム。ここ数日やってきた生成ツールの最後の部分。
#!/bin/sh mv 30min.yaml 30min.old.yaml perl yaml-collect.pl *-*-*.txt > delta.yaml perl yaml-merge.pl --key=url 30min.old.yaml delta.yaml > 30min.yaml perl yaml-conv.pl 30min.yaml > 1900-01-01.txt
とすることで、一覧ページを生成する。それぞれのプログラムは、yaml-collect.pl(id:mzp:20080107:collect)、yaml-merge.pl(id:mzp:20080110:merge)、yaml-conv(今日のやつ)。
使い方
$ cat 30min.yaml --- category: - Python title: cat -n url: http://d.hatena.ne.jp/mzp/20080101/cat --- category: - Python title: SQLiteをPythonで url: http://d.hatena.ne.jp/mzp/20080102/sqlite $ perl yaml-conv.pl 30min.yaml * 30分プログラム一覧 ** Python - [http://d.hatena.ne.jp/mzp/20080101/cat:title=cat -n] <a href=\ "http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/mzp/20080101/c\ at"><img src="http://b.hatena.ne.jp/entry/image/http://d.hatena.n\ e.jp/mzp/20080101/cat" /></a> - [http://d.hatena.ne.jp/mzp/20080102/sqlite:title=SQLiteをPython\ で] <a href="http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/mz\ p/20080102/sqlite"><img src="http://b.hatena.ne.jp/entry/image/ht\ tp://d.hatena.ne.jp/mzp/20080102/sqlite" /></a>
ソースコード
#! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- # # yaml-conv.pl - # # Copyright(C) 2008 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2008/01/12 23:25:14 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # use strict; use warnings; use YAML qw(LoadFile); use Data::Dumper; # load from file my ($filename) = @ARGV; my @yaml = LoadFile($filename); # divide by category my %category = (); for my $entry (@yaml){ for(@{$entry->{'category'}}){ $category{$_}=[] unless($category{$_}); push @{$category{$_}},$entry; } } # print entry sub say(@){ print @_,"\n"; } say ""; say "*list*30分プログラム一覧"; for my $name (sort keys %category){ say "** $name"; for(@{$category{$name}}){ my $url = $_->{url}; my $title = $_->{title}; my $bm_image = "<img src=\"http://b.hatena.ne.jp/entry/image/$url\" />"; my $bookmark = "<a href=\"http://b.hatena.ne.jp/entry/$url\">$bm_image</a>"; say "- [$url:title=$title] $bookmark"; } say ""; }