top

QG : Akiary Labo

最新7回分

[バックナンバー] [目次] [QG]

2009年11月15日(日)  フィードの記事へのリンク修正

先日、記事のアンカー名を「date」+DIDの、「date20091115_1234567890」のような形式に変更しました。全記事中の記事へのリンクとカテゴリーリストなどの修正を終え、すっかり片付いた気分でいましたが、フィードのことをすっかり忘れていました。なんというか、「aki2rss.cgiでDIDへのリンク」の二の舞です(笑)。

Akiaryオプショナル日記からRSSを生成してくれる、aki2rss.cgiに再び手を入れることに。「-」が頭についているのが削除した行、「+」が追加した行です。

「aki2rss.cgiでDIDへのリンク」の時は直接拡張子もリンク先に書き込みましたが、この際なので、日記の拡張子を選べるように設定項目を増やしました。v0.92オリジナル版115目あたり。

 # TimeZone。サーバーの時計がJSTなら'+09:00'で、UTCなら'+00:00'もしくは'Z'
'tz' => '+09:00',
+# 日記の拡張子
+'ext' => 'php',

結局変わらずphpなのですが(笑)。

それから、記事へのリンクを作る404行目あたり。

 sub date2uri {
my $date = shift;
my($ym, $d) = $date =~ /(\d{6})(\d{2})/;
- return join('', ($ym, '.html#', $ym, $d));
+ return join('', ($ym, '.'.$conf->{ext}.'#date', $ym, $d));
}

sub did2uri {
my($did, $date) = @_;
my $ym = substr($date, 0, 4);
- return join('', ($ym, '.html#', $did));
+ return join('', ($ym, '.'.$conf->{ext}.'#date', $did));
}

それから、430行目あたり。

        # uriを探す。
- if ($$refchunk =~ m|href\s*=\s*[\"\']?(\d{6}\.html#\d{8})(_\d{9,10})[\"\']?|) {
- $uri = $1 . $2;
+ $$refanchor =~ m/(\d{6})(\d{2})_(\d{10})/;
+ $uri = $1 . '.'.$conf->{ext}.'#date' . $1 . $2 . '_' . $3;

こいつがごっそり変わっているのは、「aki2rss.cgiでDIDへのリンク」の時に思うところがあって修正したものに今回手を入れたからでありまして。オリジナル版の以上の箇所だけを変えてもうまくいかないかもしれません。当時修正した経緯をじっくり読んでシンプルな変更で済みそうなら、またレポートしようと思います。

2009年10月30日(金)  カテゴリーテンプレートの修正を反映させるには

categlist.cgiを見ているとバージョン表記をするAkiaryタグがあったので、使おうと思いました。初期状態のカテゴリーテンプレートがなくて、うっかり書きそびれていました。

早速テンプレートに書き入れたのですが、同じカテゴリー名で新記事を投稿(日記書き込みページからcateglist.cgiに「日記」リンクでアクセス)しても、カテゴリーテンプレートの修正は反映されませんでした。そこで、新しいカテゴリー名を作ると反映されました。ただ、一度作ったカテゴリー名はカテゴリー毎のリストページが残っているためか、カテゴリー名削除(別のカテゴリー名に書き換え)後再びそのカテゴリー名を使って記事を投稿しても、テンプレートの修正は反映されませんでした。

カテゴリー復活」でも見た動作のように、categories.jsとcat_checked.txtの内容を空にしてアップするのと、カテゴリー毎のリストページを削除して初期状態に戻せば、更新時に反映されそうです。

また、少し気になったこととして、新しいカテゴリーを作った直後にできるカテゴリー毎のリストページが、リストを書き出すjavascriptのバグなのか、リストより後にあるソースが二度繰り返されて表示が二重になることがありました。もう一度更新すると正しく表示されました。必ずしも二重示になるわけでないので、原因が特定できていません。

2009年10月29日(木)  カテゴリー復活

Akiary v.0.51の時にはあったカテゴリーが無くて不便を感じ、保存していたデータからカテゴリー作成CGI「categlist.cgi」を使いました。Akiary v.0.61でもうまくいくことを祈りつつ。

CGIはパーミッションを755、カテゴリーリストを生成するjavascript「categories.js」とチェックリストの「cat_checked.txt」は666に。

カテゴリーリストを生成するjavascriptは、リンク先のファイルがカテゴリーファイルを置くディレクトリー「cat_dir」となっています。デフォルトのようにカテゴリーのCGIと同じディレクトリにファイルがあれば問題はなかったのでしょうが、1つ余分にさかのぼってしまいました。

$categindex.="document.writeln('[<a href=\"".$conf->{'cat_dir'}.&EscapePercent($file)."\">".$category."</a>]')\n";

そのため、日記を置くディレクトリをあらわすURL「uri_base」に指定し直し。

$categindex.="document.writeln('[<a href=\"".$conf->{'uri_base'}.&EscapePercent($file)."\">".$category."</a>]')\n";

categories.jsとcat_checked.txtの内容を空にしてアップし、日記を更新したら正しいURLに修正できました。

2009年10月28日(水)  改行処理まわりが怪しいのですが

タイムスタンプ追加」を書いていて、投稿後に書き込み欄がリロードされると、空けておいた改行がまた詰まってしまうという改行処理の怪しさに気付きました。

PREタグが混じった文章を久しぶりに書いていたから気付けたものの、見逃していたバグのようでした。「変換まわりのまとめ」では自身ありげに書いていたものですが、これだとULタグやDIVタグも本当はうまくいっていない可能性があります。

先日から、ちまちま試しになおとさんのパッチをakiary.cgiのコピーに当てたりしているのですが、こちらの信頼できるソースとすげ替えたくなってきました。しかし、自分独自の変換処理カスタマイズなどしているので、過去ログに生じるかもしれないバグ取りが大変になりそう。それをするならまた新たに日記ディレクトリを作ろうかと思い直しました。現ディレクトリにリンクでつなげば、読むには問題ないし。

2009年10月28日(水)  タイムスタンプ追加

QGを久しぶりに手直ししていて、日記にタイムスタンプを表示させたくなりました。
利用できるAkiaryタグはないようでしたので、Akiaryに手を入れることに。

「+」マークの行を追加しました。
オリジナル版1413行目あたり「# MakeBNDiary -- バックナンバーファイル作成関数 -- (5)日記ファイルを作成する」の「# body部作成」内。

            # 日記本文
$tmp=~s/<!--\s*akiary_body\s*-->/<!--akiary_body-->$bnbody{$_}<!--\/akiary_body-->/;
+ # タイムスタンプ
+ $times=substr($_, 9, 19);
+ ($ss, $mn, $hh) = localtime($times);
+ $dttm = sprintf("%02d:%02d", $hh, $mn);
+ $tmp=~s/<!--\s*akiary_time\s*-->/$dttm/g;
+
print FH "$tmp";
print FH "<!--/akiary_diary-->\n";
}

同様に、オリジナル版1695行目あたり「# <!-- akiary_diary [^>]*-->から<!-- /akiary_diary -->を日記に置換 (3)最新版日記を変数上で作成」の「# body部作成」内。

        # 日記本文
$tmp=~s/<!--\s*akiary_body\s*-->/$body{$_}/g;
+ # タイムスタンプ
+ $times=substr($_, 9, 19);
+ ($ss, $mn, $hh) = localtime($times);
+ $dttm = sprintf("%02d:%02d", $hh, $mn);
+ $tmp=~s/<!--\s*akiary_time\s*-->/$dttm/g;
+
$ret.=$tmp;
}


didの実態は新規記事作成をした時点のepochらしいです。
エポックとはこういうことだそうな。Perl 入門講座 [PRIVATE]

Perlは、時刻を、過去のある時点(『エポック秒』と呼ばれる)からの経過秒数で表す。
UNIXを始めとする多くのシステムでは、1970年1月1日0時0分(GMT)をエポック秒として使用している。

Akiary Laboでもこのエポック秒(UNIX時間と呼んでいました)を利用した事を書いた記事がありますが、localtime()で普通の日時に変換すれば出てくるやん、てことで。

まずはdidからエポック秒の部分(アンダーバー以下10文字)を取り出す。

$times=substr($_, 9, 19);

エポック秒は$timesに代入したので、localtime()の出番です。

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($times);

フルだとこのくらいになるところを、欲しいのが時間と分だけなので、必要な部分までを書きました。(変数名は処理中のと被らなければ何でもOK)

($ss, $mn, $hh) = localtime($times);

それから、2桁の時間:分にフォーマット。

$dttm = sprintf("%02d:%02d", $hh, $mn);

最後に、日記テンプレートで使えるように、Akiaryタグを定義。

$tmp=~s/<!--\s*akiary_time\s*-->/$dttm/g;

せっかくなので、Akiary Laboにも表示させることにしました。

2005年10月26日(水)  BlogPet再設置

リニューアル前は1つの日記にBlogPetのウトギも投稿させていたのですが、複数ユーザ対応になったのでウトギ専用の日記に投稿させるようにしました。
自分の投稿がないと、BlogPetの投稿ばかり続いてしまいましたし。

言葉を憶えるRSSはQGのRSSを設定。
投稿用APIは前回同様kkojimaさん作ak-xmlrpc.cgiで、サーバのPerlがバージョン5.8未満なのでJcode.pm版を使用。

取り敢えず初回はテストも兼ねて、ウトギっぽい文章で自ら投稿しましたが、今後自動で投稿が成功すること祈る。

2005年10月19日(水)  文字列URLエスケープ

旧Akiary改造ログをHTML文法チェックにかけていて気付いたのですが、アドレスに「&」が含まれていると、不明な実態参照扱いになっているとエラーが出ました。
文字コード」では、チルダ「~」の文字化けを「%7E」にして回避する方法を書いていますが、「&」までは気付かなかったようで。
「&」は「%26」にして、ジャンプも成功。

変換には「文字列URLエスケープ」を利用しました。


[バックナンバー] [目次] [QG]