CustomFeed::MangaOhClubをもとにPlaggeにCSVを読み込ませれるようにする

ここ数日は,まんが王倶楽部のCSVをパースしてPlaggerに読み込ませるCustomFeed::MangaOhClubを書いてた.これを汎用化できれば,簡単な正規表現で表現できるCSVとかを簡単にPlaggerに放り込めるんじゃね?というはなし.

なにはともあれ,CustomFeed::MangaOhClubのコード.なにかと野良っぽいけど,そこは勘弁.

MangaOhClub.pm*1

やってることは単純で,読み込んだCSVファイルを一行ずつに分割して,正規表現で日付やらタイトルやらをとりだしてPlagger::Entryにつっこんでる.ただし,CSVの形式というかカラムの現れる順番や種類がが提供されてるファイルごとに違うので,ファイルごとの設定なんかをハッシュに格納しておいて使ってる.

our $CATEGORY = {
    comic =>  {
        title   => 'コミック',
        csv_re  => qr{^"([^"]*)","(\d+/\d+/\d+)","([^"]*)","([^"]*)","([^"]*)","([^"]*)"$},
        capture => ['publisher', 'date', 'title', 'author', 'cost', 'info'],
        template => << "TEMPLATE",
<dl>
<dt>作者</dt>
<dd>%a</dd>
<dt>出版社</dt>
<dd>%p</dd>
<dt>発売日</dt>
<dd>%d</dd>
<dt>価格</dt>
<dd>%c円</dd>
</dl>
TEMPLATE
    },
}

こんな感じ.CSVの各行をcsv_reでマッチさせてcaptureをキーにあとでハッシュとして引けるようにして,テンプレートにつっこむ.こまかいとこはソースで読んでー.Filter::EntryFullTextのYAMLから設定をロードする部分をまねただけなんだけどね.

このモジュールはまんが王のCSV専用になっているんだけど,実際にCSVを処理する部分はまんが王のCSVに依存してないので設定でロードするCSVを指定できるようにすればわりと楽にCustomFeed::CSVは書けそう.ただ,String::Formatつかったテンプレートとかは結構きもいので,TTとか使わないとダメか.TT使ったこと無いけど.行ごとの正規表現もYAMLに書くようにするとかかなぁ.

CSVのみとはいわずに,簡単な正規表現だけでパースできるような文章をおてがるCustomFeedできるようなCustomFeed::Regexとかいけそうな気もするなー.単純な文章をちょっとCustomFeedするFilter::EntryFullText的なもの.じっさい,前に書いたCustomFee::JoyHackとかCustomFeed::SOSとかこれですぐできそう.

これは,ちょっと夢がひろがりんぐ.ひろがりすぎて自分では収拾つけれなさそうだが.

*1:そのうちtracで