frog.raindrop.jp.knowledge > Movable Type
Movable Typeでいろいろ実験とかしたいのですが・・・その話題を書こうかと。でも時間内のでなかなか増えないです。

January 14, 2005

mt-comments.cgi に簡易スパムフィルタを実装する

あまりにもコメントスパムが多くなってきたので、mt-comments.cgi に急遽自前フィルタを追加してみた。結構いい感じ。

下記は 'sex' と 'porn' を含むコメントをポストできなくした例。

実際にはスパム業者はある程度絞れるので、具体的に特定の URL を本文に含むもの、などとしている。

続きを読む...

November 3, 2004

Monthly アーカイブに BlogTimes を表示する

MTBlogTimes のサイトに書いてある、月ごとのファイル名で生成する方法ですが、実際にはうまくいかないんだよね。あれを真に受けて悩んだ人も多いのでは。で、ぐぐってみたらMTTagInvoke を MTBlogTimes に使う というステキな Tips を見つけた。早速、 Date-Based Archive に次のように追加して Rebuild した。

<!-- BlogTimes -->
<MTTagInvoke tag_name="MTBlogTimes" fillcolor="#999999" textcolor="#999999" linecolor="#ffffff" bordercolor="#ffffff" width="170" height="12" save_dir="images" show_text="on">
	<MTTagAttribute name="month"><$MTArchiveDate format="%Y%m"$></MTTagAttribute>
	<MTTagAttribute name="name"><$MTArchiveDate format="blogtimes-%Y-%b"$></MTTagAttribute>
	<MTTagContent><a href="http://nilesh.org/mt/blogtimes/" target="_blank"><img src="<$MTBlogTimesFileURL$>" width="<$MTBlogTimesWidth$>" height="<$MTBlogTimesHeight$>" border="0" alt="B L O G T I M E S" title="B L O G T I M E S" /></a></MTTagContent>
</MTTagInvoke>

出力結果は月別アーカイブ参照。

February 26, 2004

sanitize属性

テンプレートの汎用属性として、sanitizeがある。これは、データに含まれるタグを取り除いたりする方法を指定する。

Movable Typeのマニュアルのひな形 TAG たち > Tag 全体を通しての属性によると

疑いのある文書に,浄化フィルターをかけます. この属性の値が 1 の場合, weblog の設定か全体の設定でしてある,標準の浄化ルールが適用されます. 属性値が 0 の場合,この Tag に関しては浄化が行われません. 属性値がそれ以外の場合,属性値は浄化ルールとして扱われます.

で、すべてのタグを取り除きたい場合は、sanitize=""とすればいいのかと思ったら、それではどうも0と同じ扱いになるらしい。いったいどうしたらよいのでしょうか。

February 24, 2004

Google API 文字化け続報

エントリーのタイトルでの検索結果をでるように作ったものをREBUILDすると、こんなエラーになります。

MT::App::CMS=HASH(0x8069d44) Wide character in print at lib/MT/FileMgr/Local.pm line 88.

思いついて、MT::FileMgr::Localの73行目に

    binmode FH, ':utf8';

を追加してみました。結果、エラーはでなくなりましたが、文字化けは直りません。to be continued...

February 23, 2004

Google API で文字化け

MTGoogleSearchなどのタグを使って、エントリーのタイトルの検索結果を出そうと試みているのですが、文字化けしてしまいます。
Google API で文字化けでも、同じような症状が。でも、この際とは「EUCだから文字化け?」ってなってますが、raindropはUTF-8なんだけどな・・・。引き続き要調査。

外部リンクに自動的にtarget属性を追加しよう計画(調査編)

やっと、ブログ全体に手が入ったところで、次にいじくりたいのは、エントリー内でリンクを張ったとき、target="_blank"を毎回書くのがめんどくさい、というところ。要はfrog.raindrop.jp以外のホストへのリンクにはtargetを勝手につけるようなフィルタがあればいいなってところですか。そんなの、誰かが作ってそうなので、探してみようと思っているのですが、同時に、私の悪い癖「作ってみたい!」ってのも少しあるわけです。
そこで、調査に乗り出したところなのですが、これなんか参考になりそうです。
MovableTypeのプラグイン作成(邦訳)
ただし参考になるかならないかは、これから読むわけです。

December 19, 2003

文字列を折り返す・・・とか

「New Comment Posted to の文字化けをなおす。」でみた、Movable Typeのメールの本文作成するとこ

require Text::Wrap;
$Text::Wrap::cols = 72;
$body = Text::Wrap::wrap('', '', $body) . "\n$link_url\n\n" .
	$app->translate('IP Address:') . ' ' . $comment->ip . "\n" .
	$app->translate('Name:') . ' ' . $comment->author . "\n" .
	$app->translate('Email Address:') . ' ' . $comment->email . "\n" .
	$app->translate('URL:') . ' ' . $comment->url . "\n\n" .
	$app->translate('Comments:') . "\n\n" . $comment->text . "\n";

$body	 = jcode( $body )->jfold(( 72, "\n" ));
$body	.= "\n$link_url\n\n" .
	$app->translate('IP Address:') . ' ' . $comment->ip . "\n" .
	$app->translate('Name:') . ' ' . $comment->author . "\n" .
	$app->translate('Email Address:') . ' ' . $comment->email . "\n" .
	$app->translate('URL:') . ' ' . $comment->url . "\n\n" .
	$app->translate('Comments:') . "\n\n" . $comment->text . "\n";

のがよさげか?

New Comment Posted to の文字化けをなおす。

[raindrop::diary] New Comment Posted toの件を、取り急ぎなおしてみた。全体をちゃんと見たわけじゃないので、適当。だけどちゃんと直った。

# MT::App::Comments
# From Line 349
# <<< MODIFY
#            my $charset = $app->{cfg}->PublishCharset || 'iso-8859-1';
            my $charset = 'iso-2022-jp';
# >>> MODIFY
            $head{'Content-Type'} = qq(text/plain; charset="$charset");
            my $body = $app->translate(
                'A new comment has been posted on your blog [_1], on entry #[_2] ([_3]).',
                $blog->name, $entry->id, $entry->title);
            require Text::Wrap;
            $Text::Wrap::cols = 72;
            $body = Text::Wrap::wrap('', '', $body) . "\n$link_url\n\n" .
              $app->translate('IP Address:') . ' ' . $comment->ip . "\n" .
              $app->translate('Name:') . ' ' . $comment->author . "\n" .
              $app->translate('Email Address:') . ' ' . $comment->email . "\n" .
              $app->translate('URL:') . ' ' . $comment->url . "\n\n" .
              $app->translate('Comments:') . "\n\n" . $comment->text . "\n";
# <<< ADD
			require Jcode;
			$body = new Jcode( $body )->jis();
# >>> ADD

あとは、extlibにJcodeをいれる。こんだけ。