chalowでChangeLogのエントリを書いた時間をRSSフィードに反映するhack

chalowユーザの方以外には通じない話題ですが、
chalowが出力するRSSフィードは、午前1時に書いたエントリでも、
午後18時に書いたエントリでも、
普通は無条件で23:59:59に書かれたことになります。

23:59:59という時間がエントリを書いた時間と一致しないために、
何とかならないか、と思った人もいると思います。

ということでchalow hack。すごく簡単ですが。

はじめに、エントリの記述時刻をChangeLogに書くときのルールや実装方針を
決めました。たつをさんに相談しました。


これなら、普段のChangeLogを書いていている流れで時間が書けそうです。

では、ChangeLogReader.pmとchalowを書き換えます。
+の文字が先頭についている行を新たに書いています。
上手いこと挿入してください。
-の文字が先頭についている行は消すか、コメントアウトしてください。

・ChangeLogReader.pmのstore_itemサブルーチン

 $entp->{curid}++;
+
+###
+# write time for rss feed & item pages
+###
+my $writetime;
+if ($ih =~ s|\[\s*(\d\d:\d\d)\s*\]\s*:\s*$|:|) {
+    $writetime = $1.":59";
+}
+elsif($ih =~ s|\[\s*(\d\d:\d\d:\d\d)\s*\]\s*:\s*$|:|) {
+    $writetime = $1;
+}
+ $entp->{$entp->{curid}}{wt} = $writetime;
+
 # Processing item header


ChangeLogReader.pmを書き換えたので、
ChangeLogに書いたエントリの記述時刻をRSSフィードや、
アイテムページ(パーマリンクページ)に対して反映できます。

RSSフィードへ反映するには、以下のように書き換えます。

chalowのwrite_rss_fileサブルーチン
-my $item_dcdate = # ($dcdate =~ /^$ymd/) ? $dcdate :
-   $ymd."T23:59:59+09:00";
+my $item_dcdate;
+if ($e->{$i}{wt}){
+    $item_dcdate = $ymd."T".$e->{$i}{wt}."+09:00";
+}
+else{
+    $item_dcdate = $ymd."T23:59:59+09:00";
+}


アイテムページに記述時間を反映したい場合は、
write_item_pageサブルーチンを以下のように書き換えて、
アイテムページのテンプレートに「<TMPL_VAR name=write_time>」と
書けば良いでしょう。

他のテンプレートは、make_item_htmlサブルーチンを書き換えて、
アイテムのテンプレートに「<TMPL_VAR name=write_time>」を書けば
記述時間を反映できます。

chalowのwrite_item_pageサブルーチン
 my $ymdi = "$ymd-$i";
+
+my $writetime;
+unless($ent->{$i}{wt}){$writetime = '23:59:59';}
+else{$writetime = $ent->{$i}{wt};}


 $t->param(url => $item_url); # 2001-01-01-1.html
+$t->param(write_time => $writetime); #hh:mm:59 or hh:mm:ss
 my $ostr = $t->output();


chalowのmake_item_htmlサブルーチン
 (my $item_id = $ymd.$i) =~ s/-//g; # Ex. "200309241"
+
+my $writetime;
+unless($e->{$i}{wt}){$writetime = '23:59:59'}
+else{$writetime = $e->{$i}{wt};}
+
 ### item の組み上げ


 $t->param(url => $item_url);
+$t->param(write_time => $writetime); #23:25
 my $this_item = $t->output();


以上です。

これで、「chalowの出力するエントリは、エントリの記述時刻と
RSSフィードの時刻がズレている」と言われなくなりますね。
実は1年前から気になっていたのでスッキリしました。


投稿者:としのり  日時:23:24:59 | コメント | トラックバック |
blog comments powered by Disqus