MovableType | メイン |
All Pages |  1  |  2  |  3  |  4  |  5  |  6  |  7 

またコメントスパム対策 mt-ban-nonja-comment.pl

英語しか含まないコメントをブロックしてるからしばらく平和だったのだが、
最近エントリー全文をIncludeした上でURLバンバンに送りつけてくるスパムが増えたため、
mt-ban-nonja-commentプラグインのハンドラ部分を一部改良した。
つってもたいしたことやってないが、まあこれもスルーするようなら文字列追加すればいいだけ。

変更前

if ( @match < $NofMatch ) {
my $remote_ip = $ENV{'HTTP_X_FORWARDED_FOR'} || $app->remote_ip;
$app->log("Non Japanese comment text from $remote_ip");
return 0;
}

return 1;
}

変更後

if ( @match < $NofMatch ) {
my $remote_ip = $ENV{'HTTP_X_FORWARDED_FOR'} || $app->remote_ip;
$app->log("Non Japanese comment text from $remote_ip");
return 0;
}

if( $text =~ '<a href=' || $text =~ '<A HREF=' ) {
return 0;
}


return 1;
}

そのものはここにある → mt-ban-nonja-comment.pl

ご自由にどうぞw
てか原作はσ(゚∀゚ オレ!!じゃねえしwww


by Daryl 2007年07月13日 16:47 | Permalink


Financeカテゴリーの分割

Financeカテゴリーが400エントリを超えてリビルドがくそ重くてしょーがないので、
2007年とそれ以前の分にカテゴリを分割した。
実際にはFinance 2007カテゴリーを作って、2007年の分のエントリを移動したあと、
Financeカテゴリーの名前を変更しただけなのだが、これやるとパーマリンク自体のURLが変わってしまう。

本来ならエントリ中の参照リンクやトラックバックとかも含めて全部直さないといけないんだが、
どーせσ(゚∀゚ オレ!!のカブログだし、そこまでシビアにみてるやつはいねえ、ってことで無視。
とりあえずエントリポストとカテゴリーリビルドは軽くなったからOKとしよう。


by Daryl 2007年06月27日 23:55 | Permalink


月間アーカイブリスト復活

表示がうざったいので消していた月間アーカイブを復活させてみた。
小粋空間さん月別アーカイブリストのツリー化 for Movable Typeを参考に
月間アーカイブリストのモジュールを改定。

個人的に折りたたみ式ツリーは好みじゃない(Javascriptうぜえ)ので、
プレーンでもって全部表示するようにしたわけだが。
ま、こんなカンジ。

#!/usr/local/bin/php
<div class="side" id="archives">
<ul><MTArchiveList archive_type="Monthly"><MTArchiveDateHeader><li><$MTArchiveDate format="%Y年"$></MTArchiveDateHeader><li>&nbsp;&nbsp;<a href="<$MTArchiveLink$>"><$MTArchiveDate format="%m月"$></a> [<$MTArchiveCount$>]</li><MTArchiveDateFooter></li></MTArchiveDateFooter>
</MTArchiveList></ul>
</div>

あとはこいつをindex.cgiにincludeしてやるだけでOK

<h2>月間アーカイブ</h2>
<? include"http://delta-j.web.infoseek.co.jp/cgi-bin/mt/monthly-list.cgi";?>

PHP化できてないと意味ないけどw


by Daryl 2007年03月23日 00:06 | Permalink


コメントリストの変更

PHPモジュールで作られるサイドバーのコメントリストを
名前+日付時間という表記にしていたのだが、
長い名前いれると折り返しがうざいので日付時間を削除

まあ[<$MTCommentDate format="%m/%d %X"$>]の部分をカットすりゃいいだけだが。

現状こんなカンジ

#!/usr/local/bin/php
<MTEntries recently_commented_on="5">
<li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><br>
<MTComments>
<span class="comment">・<$MTCommentAuthor$></span><br />
</MTComments>
</li>
</MTEntries>


by Daryl 2007年01月03日 21:27 | Permalink


アーカイブ再構築のエラー回避

PHP化+モジュール化しても全再構築時にコケることがでてきたので、
DailyやMonthlyアーカイブのリビルド数を変更することにした。
mt.cfgのEntriesPerRebuild は個別エントリのまとめ数を設定する。
たとえばリビルド単位が20だったとして、
Dailyアーカイブはこの倍の40、Weeklyは5倍の100、Monthlyは10倍の200エントリが再構築の1単位になる。
で、この倍数を決めてるのが、cms.pm内の下記部分。

my %Limit_Multipliers = (
Individual => 1,
Daily => 2,
Weekly => 5,
Monthly => 10,
Dynamic => 5,
);

こいつを↓のように書き換えてやれば大分マシになる。(はず)

my %Limit_Multipliers = (
Individual => 1,
Daily => 2,
Weekly => 2,
Monthly => 2,
Dynamic => 5,
);

少なくてもウチはこれでうまくいってる。
EntriesPerRebuild はデフォルトの40のままだ。


by Daryl 2006年09月18日 21:29 | Permalink


月間アーカイブリスト修正

FireFoxでレイアウトが乱れるってのが発覚したのでテンプレート修正

#!/usr/local/bin/php

<MTArchiveList archive_type="Monthly">
<MTArchiveDateHeader><li><$MTArchiveDate format="%Y年"$><br></MTArchiveDateHeader><a href="<$MTArchiveLink$>" title="<$MTArchiveDate format="%Y/%m"$>"><$MTArchiveDate format="%m"$></a>&nbsp;</MTArchiveList>


by Daryl 2006年08月04日 00:23 | Permalink


MovableType3.31ja

http://www.sixapart.jp/movabletype/news/2006/07/12-1500.html

MT3.31がでたのでDLしてきたのだが、、、
インストール要領みてメゲた。。。
既存のMTと別に設置するのがめんどくせえええええええ
上書きするにしてもめんどくせええええええ
全エントリ書き出し→全消し→MT3.31新規いんすこ→エントリ書き戻し、
とやればいいのだろうがPermalink名がたぶんおかしくなって整合が取れない、、と思う。
ゆえにめんどくささ爆発でバージョンこのままでいいや状態。

だってさー、そこまでしてアップグレードするメリットねえんだもん。
劇的に早くなるならともかく、MySQL前提で作られてるから
バークレーDBな環境じゃどうにもならんべ?
Perlも5.6.1だし、モジュールもすくねえし。
MT3.31使うなら別鯖に立てたほうがいいやな。


by Daryl 2006年07月17日 12:40 | Permalink


月間アーカイブリストのショート化

Weblog始めて1年も経つとそれだけで
月間アーカイブリンクが12個もタテに並ぶわけで、
σ(゚∀゚ オレ!!的に美観がよろしくない。

つーか、1個のリンクのために1行とられ、しかもそれは永久に増え続ける
→サイドバーの長さがどんどん長くなる
→(´Α`)ウゼーヨ

というわけで、ArchiveDateHeader Pluginを使ってこんな風にしてみた。

ma-before.jpg ma-after.jpg

月間アーカイブリストは例によってPHPモジュール化
monthly-archive.jpg

名前をmonthly-list.cgiとかにしておく。
内容は下記の通り。

#!/usr/local/bin/php
<MTArchiveList archive_type="Monthly">
<MTArchiveDateHeader>
<li><$MTArchiveDate format="%Y年"$><br></MTArchiveDateHeader> <a href="<$MTArchiveLink$>" title="<$MTArchiveDate format="%Y/%m"$>"><$MTArchiveDate format="%m月"$></a></li>
</MTArchiveList>

これでもってindex.cgiの月間アーカイブの記述をPHP includeに書き換える。

<h2>月間アーカイブ</h2>
<ul><? include"http://delta-j.web.infoseek.co.jp/cgi-bin/mt/monthly-list.cgi";?></ul>

あとはテンプレート保存・再構築でOK。
あ、monthly-list.cgiはメインページと同時にリビルドされるよう、
チェックいれておくことを忘れずに。
忘れると新しい月に変わったときにリンクが増えないwww


by Daryl 2006年07月08日 23:41 | Permalink


携帯からのアクセスをmt4i.cgiに振り分ける

携帯からのアクセス振り分けにはhtaccessによるURL書き換え(mod_rewrite使用)か、
Perl/Javascript/PHP等で判別→ページ移動がポピュラーだろう。
うちではPHP化したときにすでにhtaccessでごりごりリダイレクトかましてるので、
ここにさらに携帯用をいれるとすげー面倒くさい。
index.cgiだけならともかく、個別エントリまでとなるとやってられん。
というわけで、とりあえずindex.cgiの先頭でPHPによるUser-Agent判別を行い、
携帯のUAを持つ場合はmt4i.cgiへリダイレクトすることにした。

keitai-index.jpg

mt4i.cgiがインストール済みであり、
MovableTypeがすでにPHP化されているなら、
先頭行の#!/usr/local/bin/phpの次に下記のような判別/リダイレクトルーチンをいれるだけでOK。

<?
$ua = $_SERVER["HTTP_USER_AGENT"];
if(ereg("DoCoMo",$ua)){
header("Location: http://delta-j.web.infoseek.co.jp/cgi-bin/mt/mt4i.cgi");
exit;
}elseif(ereg("J-PHONE",$ua)){
header("Location: http://delta-j.web.infoseek.co.jp/cgi-bin/mt/mt4i.cgi");
exit;
}elseif(ereg("UP\.Browser",$ua)){
header("Location: http://delta-j.web.infoseek.co.jp/cgi-bin/mt/mt4i.cgi");
exit;
}elseif(ereg("Vodafone",$ua)){
header("Location: http://delta-j.web.infoseek.co.jp/cgi-bin/mt/mt4i.cgi");
exit;
}elseif(ereg("KDDI",$ua)){
header("Location: http://delta-j.web.infoseek.co.jp/cgi-bin/mt/mt4i.cgi");
exit;
}else{
}
?>
UAの判定はDoCoMo / KDDI / Vodafone / J-PHONE だけで足りるような希ガス。

携帯からHPルートにアクセスしたときのみ、自動的にmt4i.cgiへリダイレクトされるが、
この部分をそれぞれのアーカイブテンプレートの先頭につっこめば、
どこからどう携帯でアクセスされてもmt4i.cgiが表示されることになる。
ま、それもちょっとウザイかなと思ったし、
個別エントリを携帯からダイレクトに見たい酔狂人もいるかもしれないので、
とりあえずindex.cgiだけの措置にしてある。


by Daryl 2006年07月08日 10:36 | Permalink


iswebでエクスポートが失敗する件の対策

isweb鯖だけの問題だと思うが、
エントリ数が300を超えるとWeblogの「読み込み/書き出し」において
途中で終了してしまう現象がある。

たとえば、500を超えるエントリを書き出ししても、300くらいで終わってしまい、
何回やっても全エントリが取れない、ということが起こる。
読み込みに関してはエントリのサイズによっては1つしか読めないこともある。

とりあえず書き出しできないことにはブログのバックアップにもならんので、
分割エクスポートの方法を考えてみた。

といはいってもたいしたことじゃなくて。

ブラウザ出力でエントリを得ようとすると途中でタイムアウトするので、
テンプレートでエクスポート用のHTMLを作成し、ファイルに書き出させる方法をとったのだが、
それでも途中で終わる(InternalError500がでる)ので、
全エントリをブロック分けして書き出させ、FTPでDLするというもの。

export.jpg

書き出しのためのテンプレートはこれを使う


<MTEntries lastn="200">
AUTHOR: <$MTEntryAuthor strip_linefeeds="1"$>
TITLE: <$MTEntryTitle strip_linefeeds="1"$>
STATUS: <$MTEntryStatus strip_linefeeds="1"$>
ALLOW COMMENTS: <$MTEntryFlag flag="allow_comments"$>
CONVERT BREAKS: <$MTEntryFlag flag="convert_breaks"$>
ALLOW PINGS: <$MTEntryFlag flag="allow_pings"$>
<MTIfNonEmpty tag="MTEntryCategory">PRIMARY CATEGORY: <$MTEntryCategory$>
</MTIfNonEmpty><MTEntryCategories>
CATEGORY: <$MTCategoryLabel$>
</MTEntryCategories>
DATE: <$MTEntryDate format="%m/%d/%Y %I:%M:%S %p"$>
-----
BODY:
<$MTEntryBody convert_breaks="0"$>
-----
EXTENDED BODY:
<$MTEntryMore convert_breaks="0"$>
-----
EXCERPT:
<$MTEntryExcerpt no_generate="1" convert_breaks="0"$>
-----
KEYWORDS:
<$MTEntryKeywords$>
-----
<MTComments>
COMMENT:
AUTHOR: <$MTCommentAuthor strip_linefeeds="1"$>
EMAIL: <$MTCommentEmail strip_linefeeds="1"$>
IP: <$MTCommentIP strip_linefeeds="1"$>
URL: <$MTCommentURL strip_linefeeds="1"$>
DATE: <$MTCommentDate format="%m/%d/%Y %I:%M:%S %p"$>
<$MTCommentBody convert_breaks="0"$>
-----
</MTComments>
<MTPings>
PING:
TITLE: <$MTPingTitle strip_linefeeds="1"$>
URL: <$MTPingURL strip_linefeeds="1"$>
IP: <$MTPingIP strip_linefeeds="1"$>
BLOG NAME: <$MTPingBlogName strip_linefeeds="1"$>
DATE: <$MTPingDate format="%m/%d/%Y %I:%M:%S %p"$>
<$MTPingExcerpt$>
-----
</MTPings>
--------
</MTEntries>

画面みたくテンプレートを作成、エントリ数の指定のオフセットとファイル名を変えていけば、
全エントリのバックアップが鯖上にできる。これをFTPでDLすればOK。

<MTEntries lastn="200"> → <MTEntries lastn="200" offset="200">

こうすることで、次の200エントリの出力になる。
ただしファイル名を変えておかないと上書きされるので注意。

出力が成功したらローカルに保存してマージすれば全エントリのバックアップになるが、
iswebの場合、大量のエントリを「読み込み」しようとしても途中で止まってしまうので
分割しないといけない。

いくつに分割すればOKなのか?というのが問題なのだが、それが不定だから困る。
よって自分の場合は下記のスクリプトを使って全エントリをすべて単独のエントリに分解することにした。


#!/usr/local/bin/perl

use strict;

my($spl, $fi, $fo);
my(@buff, $cu, $c, $max);

$fi = "mt.txt";
$fo = "split/mt_%03d.txt";
$spl = "--------";
$max = 1;

@buff = ();
$cu = 0;
$c = 1;
open(IN, $fi) or die "open error $fi";
while(<IN>) {
chop;
push(@buff, $_);
if ($_ eq $spl) {
$cu++;
}
if ($cu == $max) {
&fout(\@buff, $fo, $c++);
@buff = ();
$cu = 0;
}
}
close(IN);
print "Content-type: text/html; charset=EUC-JP\n\n";
print "<html><body>split complete.</body></html>\n";
exit(0);

sub fout($$$) {
my($buff, $fo, $c) = @_;
my($foo);

$foo = sprintf($fo, $c);
open(OUT, ">$foo") or die "open error $foo";
foreach (@{$buff}) {
print OUT $_. "\n";
}
close(OUT);
}

__END__;

このスクリプト、どっかのHPにあったものなのだが出典がわからなくなってしまった。
出所不明で申し訳ないが、とりあえず動作はしている。

使い方

・全エントリを1ファイルにまとめる(ファイル名 mt.txt)
・スクリプトとmt.txtを同一ディレクトリに置き、配下にsplitディレクトリを作成
・スクリプトを実行するとsplitディレクトリ内にmt001.txtから連番で全エントリが個別ファイルに分割される
・Weblogにリストアするときは、$MTDIR/importディレクトリを作成し、そこにsplitされたファイルをすべてULする。
・その上で、Weblogの読み込みを実行すれば1エントリずつDBに書き戻してくれるので、iswebのタイムアウトに引っかからずにリストアができる

この方法考え付くまでにDBごと全部バックアップ・リストアしてたorz


by Daryl 2006年06月18日 06:53 | Permalink

1 |  2  |  3  |  4  |  5  |  6  |  7  | 次ページ»