2009/02/08
■ [sns] しょぼしょぼ日記システムの rss bug?
知り合いから私のブログの RSS がリーダーからちゃんと見れないよと教えてもらいました.
調べてみると,RSS にあるブログ URL の「~ チルダ」が「2.009000e+03」と謎の文字列になっていました...
しょぼしょぼ日記システムの lib/SNS.pm の update_rss のなかの下記の部分を,
foreach my $section (@sections){
my $anchor = &Util::escapeXML(sprintf("$index_url?Date=%04d-%02d-%02d#%04d%02d%02d%02d",
$diary->year,$diary->month,$diary->day,
$diary->year,$diary->month,$diary->day,$section->{ID}));
...
下記のように &Util::escapeXML を外したら正しく表示されました.
foreach my $section (@sections){
my $anchor = sprintf("$index_url?Date=%04d-%02d-%02d#%04d%02d%02d%02d",
$diary->year,$diary->month,$diary->day,
$diary->year,$diary->month,$diary->day,$section->{ID});
...
これは Util::escapeXML をなおすべきかもしれませんね...
2006/12/31
■ [sns] カテゴリ一覧 plugin
私はブログシステムに sns を使っているのですが,これはカテゴリ一覧を出す機能がありません.
しかしここのブログ を見るとメニューに,
Categories
として記事のカテゴリ一覧を出力している部分がありました.
ということで私もカテゴリ一覧を出力する plugin を作ってみました.下記の内容を plugin ディレクトリに入れて,サイドバー部分に <%= category_list => と記述するとサイドメニューにカテゴリ一覧が表示されます.
# category_list.pl - category listup plugin for sns
#
# usage: {{category_list("days")}}
# wiki style {{category_list}}
# html style <%= category_list %>
sub category_list {
my $max = shift;
my (%category);
my $buf;
if ($max eq "") {
$max = 365;
}
my @list = $sns->load_diary({rows=>$max});
foreach my $diary (@list){
my @sections = $diary->parse();
foreach my $section (@sections){
my $sec_title = $section->{TITLE};
if ($sec_title =~
s/\[(.*?)\] (.*)/"[<a href=\"diary.cgi?Search="
.&Util::url_encode("[$1]")."\">$1<\/a>]"/eg) {
$category{$sec_title}++;
}
}
}
$buf = "<ul>\n";
foreach my $i (sort keys %category) {
$buf .= "<li>" . $i . " ($category{$i})</li>\n";
}
$buf .= "</ul>\n";
return $buf;
}
2006/12/11
■ [sns] spam filter on sns
このブログにも最近スパムコメントやスパムトラックバックが届くようになりました.
ここのブログシステムは sns なのですがスパムフィルターを探してみるとさっそくありました.
どうやら plugin/filter.pm にフィルタルールを書けば良いだけらしい.そこで下記のように記述したら確かにバッチリ効いてました.
# filter.pl
sub _comment_filter {
my $name = shift;
my $comment = shift;
# TODO ここに任意の判定ロジックを記述してください
if (length($comment) > 256) { #長いのはイヤ!
return 0;
}
if ($comment =~ /\n/) { # 複数行もカンベンして
return 0;
}
if ($comment =~ /<[aA] /) { #リンクもダメ
return 0;
}
return 1;
}
sub _trackback_filter {
my $title = shift;
my $excerpt = shift;
my $blog_name = shift;
my $url = shift;
# TODO ここに任意の判定ロジックを記述してください
if ($excerpt =~ /<[aA] / || $excerpt =~ /http:/) {
return 0;
} # 要約の中にリンクが含まれる場合ははじく
return 1;
}
1;
2006/12/10
■ [sns] 日記編集中の添付ファイル
sns 3.12がリリースされたので更新してみました.
使っていて気付いたのですが日記編集中に添付ファイルへのアンカーをクリックしても画像が見れませんでした.
- 日記編集中の添付画像一覧部分
見てみると sns/lib/SNS.pm の下記の部分を変更したら日記編集中に添付ファイルへのアンカーが正しく出力されました.
# lib/SNS.pm
# line: 724 -
foreach my $file (@{$diary->attach}){
- my $localfile = sprintf("%04d%02d%02d.%s",$year,$month,$day,&Util::url_encode($file));
+ my $localfile = sprintf("%04d%02d%02d.%s",$diary->year,$diary->month,$diary->day,&Util::url_encode($file));
2006/09/07
■ [sns] YouTube plugin for sns
ここを参考に sns用の YouTube plugin を作ってみました.
といってもほぼコピーですが...
下記の内容を plugin/youtube.pl に書いて
{{youtube("ID", "size")}}
の形で呼び出します.
# youtube.pl - YouTube plugin for sns
# usage: {{youtube("ID","size")}}
# size = 1,2,3,...,5,... (large)
# ex: {{youtube("bMMmxorsg4Y","2")}}
sub youtube {
my ($id, $size) = @_;
$size = 5 if (not defined $size or $size < 1);
my $url = "http://www.youtube.com/v/$id";
my ($w, $h) = (85 * $size, 70 * $size);
return qq(<object width="$w" height="$h">).
qq(<param name="movie" value="$url"></param>).
qq(<embed src="$url" type="application/x-shockwave-flash" ).
qq(width="$w" height="$h"></embed></object><br>\n);
}