PC / Net
Plagger::Plugin::Publish::MT [fatal] Sorry, entry post is failed. Because maximum何が悪さしているのかさっぱり分かりませんので、
number of posts a day beyond. : cfcd2 at /usr/lib/perl5/vendor_perl/5.8.8/Plagger/
Plugin/Publish/MT.pm line 81. at line 52
base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'],の部分が復活しています。CPANでアップデートかけたときに、このモジュールも置き換わってしまったのでしょう。smartd[3590]: Device: /dev/sda, 2 Currently unreadable (pending) sectorsこんなのが多量に出ていて、どうもHDDの状態が怪しくなったようです。
kernel: sd 0:0:0:0: [sda] Sense Key : Medium Error [current] [descriptor]
kernel: sd 0:0:0:0: [sda] Add. Sense: Unrecovered read error - auto reallocate failed
kernel: end_request: I/O error, dev sda, sector 488182221
68.41.134.17 - - [15/Jul/2008:14:23:01 +0900] "POST /~izumi/cgi-bin/tt-cgi/tt_tb.cgi/306 HTTP/1.1" 200 123 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0rc1) Gecko/20020417"こんなのが短時間に50発くらい来ていたりします。
84.196.139.173 - - [15/Jul/2008:14:23:02 +0900] "POST /~izumi/cgi-bin/tt-cgi/tt_tb.cgi/288 HTTP/1.1" 200 123 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"
24.20.170.201 - - [15/Jul/2008:14:23:01 +0900] "POST /~izumi/cgi-bin/tt-cgi/tt_tb.cgi/325 HTTP/1.1" 200 123 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows 98; QXW0332q)"
68.120.229.146 - - [15/Jul/2008:14:23:01 +0900] "POST /~izumi/cgi-bin/tt-cgi/tt_tb.cgi/521 HTTP/1.1" 200 123 "-" "Opera/7.0 (Windows NT 5.0; U) [en]"
60.62.227.207 - - [15/Jul/2008:14:23:01 +0900] "POST /~izumi/cgi-bin/tt-cgi/tt_tb.cgi/173 HTTP/1.1" 200 123 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows 95; USA On-Site)"
24.93.99.39 - - [15/Jul/2008:14:23:01 +0900] "POST /~izumi/cgi-bin/tt-cgi/tt_tb.cgi/463 HTTP/1.1" 200 123 "-" "Opera/6.01 (Windows 98; U) [en]"
75.118.63.75 - - [15/Jul/2008:14:23:04 +0900] "POST /~izumi/cgi-bin/tt-cgi/tt_tb.cgi/341 HTTP/1.1" 200 123 "-" "Opera/6.02 (Windows 2000; U) [en]"
89.149.202.127 - - [14/Jul/2008:18:28:10 +0900] "GET /~izumi/blog/archives/2006_7_9_306.html HTTP/1.1" 200 18277 "-" "Mozilla/4.0 (compatible; MSIE 4.0; MSN 2.6; Windows 95; Gateway2000)"こちらも短時間にこのようなアクセスが50回以上来ています。UserAgentがコロコロ変わっていて怪しいですよね。
89.149.202.127 - - [14/Jul/2008:18:28:10 +0900] "GET /~izumi/blog/archives/2006_7_26_317.html HTTP/1.1" 200 20873 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0rc1) Gecko/20020417"
89.149.202.127 - - [14/Jul/2008:18:28:10 +0900] "GET /~izumi/blog/archives/2006_6_12_288.html HTTP/1.1" 200 19352 "-" "Opera/7.02 Bork-edition (Windows NT 5.0; U) [en]"
89.149.202.127 - - [14/Jul/2008:18:28:10 +0900] "GET /~izumi/blog/archives/2006_8_26_341.html HTTP/1.1" 200 17799 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0rc2) Gecko/20020510"
89.149.202.127 - - [14/Jul/2008:18:28:10 +0900] "GET /~izumi/blog/archives/2006_8_5_325.html HTTP/1.1" 200 17981 "-" "Opera/6.03 (Windows 2000; U) [en]"
89.149.202.127 - - [14/Jul/2008:18:28:13 +0900] "GET /~izumi/blog/archives/2007_1_17_417.html HTTP/1.1" 200 20906 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.0) Gecko/20020530"
89.149.202.127 - - [14/Jul/2008:18:28:13 +0900] "GET /~izumi/blog/archives/2007_8_8_494.html HTTP/1.1" 200 17796 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.0) Gecko/20020530"
89.149.202.127 - - [14/Jul/2008:18:28:13 +0900] "GET /~izumi/blog/archives/2007_11_19_527.html HTTP/1.1" 200 17129 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0rc1) Gecko/20020417"
89.149.202.127 - - [14/Jul/2008:18:28:13 +0900] "GET /~izumi/blog/archives/2007_11_13_526.html HTTP/1.1" 200 16870 "-" "Opera/6.01 (Windows 98; U) [en]"
89.149.202.127 - - [14/Jul/2008:18:28:13 +0900] "GET /~izumi/blog/archives/2007_8_20_497.html HTTP/1.1" 200 17428 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; DT)"

User-Agent: baiduspiderと書いてあるのですが、ログを見る限りではrobots.txtには1回もアクセスしていません。相変わらず「そんなの関係ねぇ」のようです。困ったもんだ。
Disallow: /

NGワードファイルには、NGワードを1行に1ワードずつ書いておきます。ちなみに上記の例ではteeter totterのcgiが入っているフォルダ直下(libの上)に置くようにしていますが、絶対パス指定すれば別の所に置いても良いでしょう。トラックバック用と共用にすれば、メンテナンスも楽ですね。
sub entryregist {
&get_time;
&get_host;
if ($in{'name'} eq "") { &error("名前が入力されていません"); }
if ($in{'comment'} eq "") { &error("コメントの内容が入力されていません"); }
if ($in{'reno'} eq "") { &error("記事番号がありません"); }
if ($in{'mail'} ne "") {
if ($in{'mail'} !~ /[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,4}/) {
&error("E-Mailの入力内容が不正です");}
}
# /* NG wordチェック
$commnent_body = $in{'comment'};
&$jcnv(\$commnet_body, "euc");
$ng_word_data = './ng_word.cfg';
@ng_word = ( );
## ng_wordの読み込み
if(!open(IN,"$ng_word_data")){
&error("ファイルをオープンできません");
}
@ng_word = <IN>;
close (IN);
## コメント本文とng_wordとをマッチング
foreach(@ng_word){
&$jcnv(\$_, "euc");
$_ =~ s/\r\n//g;
$_ =~ s/\r//g;
$_ =~ s/\n//g;
if( $comment_body =~ /$_/gi ) {
&error("コメントの内容が正しくありません");
}
}
# NG wordチェック /*
if ($set_data1[23] eq "1" || $set_data1[23] eq "2") {
if ($in{'comment'} !~ /[\x80-\xff]/) { &error("コメントの入力内容が不正です"); }
}
212.182.96.0/255.255.224.0先頭の2つですが、何回もアクセスがあったため手動で追加したものです。
202.216.176.0/255.255.240.0
12.154.240.33
38.101.222.130
60.52.193.122
61.195.146.214
62.2.87.18
62.93.33.52
67.207.145.238
69.217.73.52
118.98.163.2
123.49.42.2
124.146.168.42
145.76.18.22
147.91.209.22
161.184.175.71
165.98.60.109
166.70.45.166
168.187.205.3
189.10.47.252
189.16.194.250
189.43.175.60
195.242.99.82
195.251.200.62
195.75.146.229
196.12.184.190
196.20.7.74
196.207.40.212
196.27.107.158
196.29.227.86
196.35.158.181
196.45.161.118
196.46.233.5
202.72.210.158
202.79.222.87
202.84.17.42
202.87.216.241
203.115.229.180
203.149.32.4
203.172.184.19
203.212.38.43
203.82.67.196
205.188.189.155
210.4.36.175
211.12.84.183
212.248.240.1
212.92.23.102
213.133.102.67
213.133.99.195
213.157.69.92
213.23.227.194
216.171.98.77
216.55.245.142
217.150.244.143
217.169.46.98
217.41.27.254
219.209.194.156
222.255.24.74


[user@server ]$ plagger -c hogehoge.yaml
Plagger::Cache [error] Can't load Cache::FileCache. Fallbacks to Plagger::Cache::Null
Plagger [info] plugin Plagger::Plugin::Subscription::Config loaded.
Weak references are not implemented in the version of perl at /usr/lib/perl5/site_perl/5.8.8/HTML/TreeBuilder/XPath.pm line 86
BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.8.8/HTML/TreeBuilder/XPath.pm line 86.
Compilation failed in require at /usr/lib/perl5/vendor_perl/5.8.8/Plagger/Plugin/CustomFeed/Simple.pm line 8.
BEGIN failed--compilation aborted at /usr/lib/perl5/vendor_perl/5.8.8/Plagger/Plugin/CustomFeed/Simple.pm line 8.
Compilation failed in require at /usr/lib/perl5/vendor_perl/5.8.8/Plagger.pm line 232.
[root@server ~]# perl -MCPAN -e shell
cpan> install Cache-FileCache
CPAN: Storable loaded ok
Going to read /root/.cpan/Metadata
Database was generated on Mon, 06 Aug 2007 18:48:31 GMT
CPAN: LWP::UserAgent loaded ok
Fetching with LWP:
ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/authors/01mailrc.txt.gz
LWP failed with code[500] message[Errno architecture (i386-linux-thread-multi-2.6.9-34.elsmp) does not match executable architecture (i386-linux-thread-multi-2.6.9-55.0.9.elsmp) at /usr/lib/perl5/site_perl/5.8.8/Errno.pm line 11.
Compilation failed in require at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/IO/Socket.pm line 17.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/IO/Socket.pm line 17.
Compilation failed in require at /usr/lib/perl5/5.8.8/Net/FTP.pm line 18.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.8/Net/FTP.pm line 18.
Compilation failed in require at /usr/lib/perl5/site_perl/5.8.8/LWP/Protocol/ftp.pm line 24.
Fetching with Net::FTP:
ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/authors/01mailrc.txt.gz
Can't locate object method "new" via package "Net::FTP" at /usr/lib/perl5/5.8.8/CPAN.pm line 2250.
[root@server ~]# locate Errno.pmと2つあります。
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/Errno.pm
/usr/lib/perl5/site_perl/5.8.8/Errno.pm
[root@server ~]# mv /usr/lib/perl5/site_perl/5.8.8/Errno.pm /usr/lib/perl5/site_perl/5.8.8/Errno.pm.org
[root@server ~]# perl -MCPAN -e shell
cpan> force install Scalar::Util
[root@fedora ~]# vi /etc/swatch/apache_error.confこれでswatchを廻しておくと、1時間に1つくらい引っかかっているようで、ちゃんと効果が出ていますね。
# logfile /var/log/httpd/error_log
# access.cgiへのアクセスを検知したら該当ホストからのアクセスを規制
watchfor /access.cgi/
pipe "/usr/local/bin/swatch_action.sh 8 lock"
package Plagger::Plugin::CustomFeed::LDTraffic;yamlはこんな感じにしています。
use utf8;
use strict;
use base qw( Plagger::Plugin );
use Plagger::Date;
use Plagger::Util;
use Switch;
use URI;
sub register {
my ($self, $context) = @_;
$context->register_hook(
$self,
'subscription.load' => \&load,
);
}
sub load {
my($self, $context) = @_;
my $ym = Plagger::Date->now()->strftime("%y%m");
my $feed = Plagger::Feed->new;
$feed->aggregator( sub { $self->aggregate($context, $ym); });
$context->subscription->add($feed);
}
sub aggregate {
my ($self, $context, $ym) = @_;
my $sec = "0";
my $urls = $self->conf->{url};
my $feed = Plagger::Feed->new;
$feed->link($urls);
$feed->title("鉄道運行情報");
my $list = $self->parse(Plagger::Util::load_uri(URI->new($urls)));
for my $item (@$list) {
my $entry = Plagger::Entry->new;
if( $item->{body} =~ /運転を再開しました/ ) {
$entry->title($item->{title}."【運転再開】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /遅れが出ています/ ) {
$entry->title($item->{title}."【列車遅延】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /運転を見合わせています/ ) {
$entry->title($item->{title}."【運転見合わせ】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /平常通り運転しています/ ) {
$entry->title($item->{title}."【平常運転】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /一部列車に運休が出ています/ ) {
$entry->title($item->{title}."【一部運休】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /運転変更が出ています/ ) {
$entry->title($item->{title}."【運転変更】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /遅れや運休が出ています/ ) {
$entry->title($item->{title}."【運休・遅延】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} else {
$entry->title($item->{title}."(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
}
$entry->body($item->{body});
$entry->link($urls);
$sec = (length($entry->title) + length($entry->body)) % 60; ←Publish::Twitter対策
$entry->date(Plagger::Date->strptime("%y%m%d%H%M%S", $ym.$item->{day}.$item->{hour}.$item->{min}.$sec));
$feed->add_entry($entry);
}
$context->update->add($feed);
}
sub parse {
my ($self, $content) = @_;
my $list = [];
while ($content =~ m{
<tr>
.*?<th.*?>(\d{2})/(\d{2}).(\d{2})\:(\d{2})</th>
.*?<td.*?>(.*?)</td>
.*?<td.*?>(.*?)</td>
.*?</tr>
}gsx) {
push @$list, {
month => $1,
day => $2,
hour => $3,
min => $4,
title => $5,
body => $6,
};
}
$list;
}
=head1 NAME
Plagger::Plugin::CustomFeed::LDTraffic - Custom feed for livedoor traffic information
=head1 SYNOPSIS
- module: CustomFeed::LDTraffic
config:
url: http://transit.livedoor.com/traffic_info/kantou
=head1 DESCRIPTION
=head1 AUTHOR
=head1 SEE ALSO
L<Plagger>
=cut
1;
plugins:
- module: CustomFeed::LDTraffic
config:
url: http://transit.livedoor.com/traffic_info/kantou
- module: Filter::Rule
rule:
module: Deduped
compare_body: 1
- module: Publish::Twitter
config:
username: Twitterのユーザ名
password: Twitterのパスワード
|
という部分です。
試しに文字化けするメールのヘッダを見てみると、確かにMime-Versionが書かれていません。
無理矢理ヘッダを書き換えてMime-Versionを書き加えてみると、本文がちゃんと表示されるようになります。
どうも、Mime-Versionが入っていないメールを受け取ると、SquirrelMailが文字コードの判定をミスるようですね。
ということで調べてみるとこちらで対処方法を見つけました。
これをお手本にして改造してみると…、ちゃんと文字化けせず表示されるようになりました。
これで一件落着なのですが、すぐ忘れてしまいそうなので、備忘録がわりに書いておきます。
|
ということになります。イマイチ分かりづらいですね…。
スマートキーワード - Mozilla Firefox まとめサイトの説明の方が分かりやすいかもしれません。
コレを使うと、ホント検索バーを使わなくてもよくなっちゃいます。ちょっとした設定が必要ですが、それさえ行っておけば、色々な検索エンジンを切り替えて使えます。とりあえず、Google/Yahoo/Wikipedia/Technoratiあたりを登録しておきました。
Firefoxを使っている方は、ぜひスマートキーワード機能を使ってみてください。
かなり便利になりますです…。
<META NAME="ROBOTS" CONTENT="NOARCHIVE">を入れれば良いのですが、試しにコレを入れて3週間ほど運用してみました。

<h3 class="Entry-Title" id="ID_000507"><a href="http://www.simazaki.com/~izumi/blog/archives/2007_10_1_507.html">UWSCその後 - Yahoo!ブログへ自動投稿</a></h3>みたいになっている訳ですが、h3要素の中でクラス指定がされているので、それが原因なんでしょうか…。
<script type="text/javascript" src="http://s.hatena.ne.jp/js/HatenaStar.js"></script>設定変更して、もう一度ブログを見てみると…、無事表示されるようになりました。
<script type="text/javascript">
Hatena.Star.EntryLoader.headerTagAndClassName = ['h3','Entry-Title']; ←追加部分
Hatena.Star.Token = '870f2da54c6ce139996401fd2a1b7d027ad058f2';
</script>
// -------------------------------------書き込みデータ用ファイルは、こんな書式です。
// 初期データ設定
// -------------------------------------
CONST YahooID = "YahooのID" // Yahoo ID
CONST YahooPASS = "Yahooのパスワード" // Yahoo PASSWORD
CONST DataFile = "C:\uwsc\data.txt" // データ用ファイル
CONST Blog_url = "http://blogs.yahoo.co.jp/hoge/" // ブログのURL
// -------------------------------------
// スクリプト部分
// -------------------------------------
// 書き込み用データファイルを開く
File_ID = FOPEN(DataFile, F_READ)
// 書き込みデータ用ファイルが無い場合は終了
if File_ID < 0 then EXITEXIT
// 書き込み用データファイルを読み込む
entry_len = FGET(File_ID, -1) // 書き込み用データファイルの行数を取得
entry_title = FGET(File_ID, 1) // 1行目の「タイトル」を読む
entry_syoko = FGET(File_ID, 2) // 2行目の「書庫名」を読む
entry_body = ""
// 本文を読む(3行目から最後まで)
for i = 3 to entry_len
entry_body = entry_body + FGET(File_ID, i) + "<#CR>"
next
// Internet Explorerの起動
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate(Blog_url)
BusyWait(IE)
// ログイン
IELink(IE, "ログイン")
BusyWait(IE)
IESetData(IE, YahooID, "login")
IESetData(IE, YahooPASS, "passwd")
// IELink(IE, "ログイン") // SUBMIT
// IESetData(IE, True, "null", "ログイン") // SUBMIT
KBD(VK_TAB)
KBD(VK_TAB)
KBD(VK_RETURN)
BusyWait(IE)
// 新規投稿へ
IE.Navigate(Blog_url + "MYBLOG/write.html")
BusyWait(IE)
// タイトル、書庫、本文をそれぞれ書き込む
IESetData(IE, entry_title, "title")
IESetData(IE, entry_syoko, "_fid")
IESetData(IE, entry_body, "content")
// 「決定」ボタンをクリック
for i = 0 to IE.document.body.all.tags("a").Length -1
ifb Pos("javascript:submitAll()", IE.document.body.all.tags("a").Item[i].href)>0
IE.document.body.all.tags("a").Item[i].Click
break
endif
next
BusyWait(IE)
// ログアウト
IELink(IE, "ログアウト")
BusyWait(IE)
// Internet Explorerを閉じる
IE.Quit
sleep(5)
//------
Procedure BusyWait(ie)
repeat
Sleep(0.2)
until (! ie.busy) and (ie.readyState=4)
Fend
1行目はタイトルログイン処理の所が上手くいかず、TABキー押下でごまかしています(KBD(VK_TAB)の所)。
2行目は「書庫名」
3行目以降は本文
…
気が付いたら、今月はまだ1回しか書いてませんでした。サボりすぎ。
トップページに晒しておくのは恥ずかしいエントリーもありますので、サクサク更新しないと。
さて本題ですが、UWSCというツールの使い方を最近学び始めました。
コレで何ができるかなのですが、UWSCのWebページにもあるように、
|
というのが主な機能です。
コレを使えば、一定の処理を全部パソコンにお任せできるようになりますので、使い方によってはかなり重宝しそうです。例えばブラウザを起動してBINGOサイトを自動巡回したり、ポイントメールにあるURLを自動クリックするようにしたり、Word/Excelの一定の処理を自動かしたりとか…。
まだ勉強中ですので、ネット上に公開されている色々なスクリプトを参考にしながらアレコレ試してているのですが…、もうちょい修行が必要そうです。本も出ていることなので、内容が良さそうだったら買ってみようかな、と。
SetEnvIf Referer "^http://www\.simazaki\.com" allow_refちなみに、これらのコメントの送信元IPアドレスをRBL.JPのBLOG/BBS RBL Checkでチェックすると、軒並み引っかかりますので、コメントspamの可能性が高いです。
<Files tt_user.cgi>
order deny,allow
deny from all
allow from env=allow_ref
</Files>
<a href="http://b.hatena.ne.jp/entry/エントリーのurl">を、被ブックマーク数を表示させたい場所に書けば良い、ということになります。
<img src="http://b.hatena.ne.jp/entry/image/エントリーのurl">
</a>
<a href="http://b.hatena.ne.jp/entry/<!--entry-->"><img src="http://b.hatena.ne.jp/entry/image/<!--entry-->" border="0" /></a>
<a href="http://b.hatena.ne.jp/append?<!--entry-->" target="_blank"><img src="はてブのアイコンのurl" alt="はてなBookmarkに登録" border="0" /></a>
INDEXページ http://www.simazaki.com/~izumi/blog/archives/2007_8_8_494.htmlのように置き換わっています。ENTRYページの方は相対パスになっているため、はてブ側に認識して貰えないようです。
ENTRYページ 2007_8_8_494.html
# -------------------------------------------------------------------------$maintmp =~ s/<!--entry-->/$entry_html/gi;は、このファイルの中で1カ所だけですので、探せばすぐに分かると思います。
# パブリッシュ (Entryページ)
# -------------------------------------------------------------------------
sub entry_archive {
$ep_no = $entry_no[$e_count];
$entry_html = "$entry_year[$e_count]\_$entry_mon[$e_count]\_$entry_mday[$e_count]\_$entry_no[$e_count].$set_data2[32]";
$entry_full_html = "$set_data1[5]$entry_html"; # 追加
if (-e "./skins/tt_skin$entry_skin[$e_count].html") {
open(SKIN, "./skins/tt_skin$entry_skin[$e_count].html");
} else {
中略
#$maintmp =~ s/<!--entry-->/$entry_html/gi; # 変更前
$maintmp =~ s/<!--entry-->/$entry_full_html/gi; # 変更後
Connection timed out (port 25)なんてエラーが残っています。どうやらGoogle側がOP25Bを導入したようで、それでウチのサーバから直接Googleにメールを投げると拒否されているようです。
# 転送先(ISP)のSMTPサーバ名を [ ] 内に指定と記述するだけです。
relayhost = [smtp.example.com]
package Plagger::Plugin::CustomFeed::LDTraffic;
use utf8;
use strict;
use base qw( Plagger::Plugin );
use Plagger::Date;
use Plagger::Util;
use Switch;
use URI;
sub register {
my ($self, $context) = @_;
$context->register_hook(
$self,
'subscription.load' => \&load,
);
}
sub load {
my($self, $context) = @_;
my $ym = $self->conf->{month} || Plagger::Date->now()->strftime("%y%m");
my $feed = Plagger::Feed->new;
$feed->aggregator( sub { $self->aggregate($context, $ym); });
$context->subscription->add($feed);
}
sub aggregate {
my ($self, $context, $ym) = @_;
my $urls = "http://transit.livedoor.com/traffic_info/kantou"; ←関東決め打ちなので適当に変えてください
my $feed = Plagger::Feed->new;
$feed->link($urls);
$feed->title("鉄道運行情報");
my $list = $self->parse(Plagger::Util::load_uri(URI->new($urls)));
for my $item (@$list) {
my $entry = Plagger::Entry->new;
$entry->title($item->{title}."[".$item->{hour}.":".$item->{min}."]"); ←titleに時刻を入れています
$entry->body($item->{body});
$entry->date(Plagger::Date->strptime("%y%m%d%H%M", $ym.$item->{day}.$item->{hour}.$item->{min}));
$feed->add_entry($entry);
}
$context->update->add($feed);
}
sub parse {
my ($self, $content) = @_;
my $list = [];
while ($content =~ m{
<tr>
.*?<th.*?>(\d{2})/(\d{2}).(\d{2})\:(\d{2})</th>
.*?<td.*?>(.*?)</td>
.*?<td.*?>(.*?)</td>
.*?</tr>
}gsx) {
push @$list, {
month => $1,
day => $2,
hour => $3,
min => $4,
title => $5,
body => $6,
};
}
$list;
}
1;
plugins:cronで5分間隔で動かしています。
- module: CustomFeed::LDTraffic
- module: Filter::Rule
rule:
expression: $args->{entry}->title =~ m/(京浜東北|東海道)/; ←自分に関係する路線に絞っています
module: Deduped
- module: Publish::Twitter
config:
username: Twitterのユーザ名
password: Twitterのパスワード
1618: # -------------------------------------------------------------------------
1619: # パブリッシュ (Entryページ)
1620: # -------------------------------------------------------------------------
1621:
1622: sub entry_archive {
-->8--中略-->8--
1679: open(IN,"$set_data1[6]") || &error("Open Error : $set_data1[6]");
1680: $top = <IN>;
1681: $flag=0;
追加: #####
追加: $n_year="";
追加: $n_mon="";
追加: $n_mday="";
追加: $n_no="";
追加: $n_title="";
追加: #####
1682: $past_entry ="";
1683: while (<IN>) {
-->8--中略-->8--
1740: $flag=1;
1741: print OUT $maintmp;
1742: $album_html = "album_$year\_$mon\_$mday\_$no.$set_data2[32]";
1743: if ($album == 1) {$album_set = 1;} else {$album_set ="";}
追加: #####
追加: if($n_title ne "") {
追加: $next_entry = "<a href=\"$set_data1[5]$n_year\_$n_mon\_$n_mday\_$n_no.$set_data2[32]\">< $n_title</a>";
追加: } else {
追加: $next_entry = "";
追加: }
追加: #####
1744: }
1745: if ($exno eq $ep_no && !$album_set) {
1746: &imgview;
-->8--中略-->8--
1785: $flag=2;
1786: }
追加: #####
追加: $n_year=$year;
追加: $n_mon=$mon;
追加: $n_mday=$mday;
追加: $n_no=$no;
追加: $n_title=$title;
追加: #####
1787: }
1788: close(IN);
-->8--中略-->8--
1888: $foot_html =~ s/<!--past_page-->/$past_entry/gi;
追加: #####
追加: $foot_html =~ s/<!--next_page-->/$next_entry/gi;
追加: #####
1889: if ($set_data2[34] != 0) {
改造前 <p class="Navi"><!--past_page--> | <a href="<!--site_url-->">Top</a></p>
改造後 <p class="Navi"><!--past_page--> | <a href="<!--site_url-->">Top</a> | <!--next_page--></p>
<h3><a href="http://uri.for/entry">Title of Entry</a></h3>という部分をチェックしているようなので、これに合わせてINDEX用/ENTRY用スキンを修正しました。
修正前:<h3 class="Entry-Title" id="ID_<!--no-->"><!--title--></h3>これで対応完了のはずなのですが…、インデックスページは対応できたのですが、カテゴリー/アーカイブ/エントリーページだと上手くいきません。タイトルの所にリンクさせたentryのurlが、どうも変なのです。
修正後:<h3 class="Entry-Title" id="ID_<!--no-->"><a href="<!--entry-->"><!--title--></a></h3>
修正前 1737: $maintmp =~ s/<!--entry-->/$entry/gi;これでサイトの再構築を行ってみると…、今度は正しくリンクされています。これで上手くいきました。
修正後 1737: $maintmp =~ s/<!--entry-->/$entry_html/gi;
sub load {
my($self, $context) = @_;
my $ym = $self->conf->{month} || Plagger::Date->now()->strftime("%y%m");
my $feed = Plagger::Feed->new;
$feed->aggregator( sub { $self->aggregate($context, $ym); });
$context->subscription->add($feed);
}
sub aggregate {
my ($self, $context, $ym) = @_;
my $urls = "http://www.taiyosha.co.jp/bunko/c_bunko${ym}_date.html";
my $feed = Plagger::Feed->new;
$feed->link($urls);
$feed->title("大洋社 コミック文庫発売一覧 $ym");
my $list = $self->parse(Plagger::Util::load_uri(URI->new($urls)));
for my $item (@$list) {
my $entry = Plagger::Entry->new;
$entry->title($item->{title});
$entry->author($item->{author});
$entry->tags([$item->{publisher}]);
$entry->body(join ', ', ($item->{author}, $item->{publisher}, $item->{price}));
if ($item->{day} !~ /^\d+$/) {
$entry->body($item->{day}.'旬, '.$entry->body);
$item->{day} = $self->part_to_day($item->{day});
}
$entry->date(Plagger::Date->strptime("%y%m%d", $ym.$item->{day}));
$feed->add_entry($entry);
}
$context->update->add($feed);
}
sub parse {
my ($self, $content) = @_;
my $list = [];
while ($content =~ m{
<TR><TD .*?>(.*?)/(.*?)<br></TD>
.*?<TD .*?>(.*?)</TD>
.*?<TD .*?>(.*?)<br></TD>
.*?<TD .*?>(.*?)<br></TD>
.*?<TD .*?><P>(.*?)<br></TD>
.*?</TR>
}gsx) {
push @$list, {
month => $1, day => $2, publisher => $3, title => $4,
author => $5, price => $6,
};
}
$list;
}のように変更しています。(オリジナルとの差分は、調べてくださいね)plugins:といったconfig.yamlで動かすようにします。本当はSmartFeedとかを使ってコミックとコミック文庫のデータを1回で取得してGoogleCalendarに登録したかったのですが、どうも上手くいかないのでコミック用とコミック文庫用を別々に動かしています。
- module: CustomFeed::Taiyoshacomic
- module: Filter::Rule
rule:
expression: $args->{entry}->title =~ m/(題名|などを|指定|します)/;
expression: $args->{entry}->body =~ m/(著者名など)/;
- module: Publish::GoogleCalendar
config:
url: GoogleCalendarの各自用url
user: ユーザid
password: パスワード
sub post_to_mt {
(省略)
my $id = $mt->newPost({
title => $self->conf->{title} || $args{title} || '',
description => $args{body} || '',
},1) or die $mt->errstr; ←ここの"1"を追加
(省略)もうちょっと「まとも」にMT.pmに手を入れれば、config.yamlの中で公開/下書きを指定できるようにすることも可能でしょう。<?xml version="1.0"?>「ブログのurl」には自分のブログのurlを記入します。またブログのXML-RPCエンドポイントは、各ブログサービス毎に異なりますので、サービスプロバイダに聞いてみるのが良いでしょう。ちなみにfc2は http://blog.fc2.com/xmlrpc.php です。
<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd">
<service>
<engineName>Movable Type 3.35</engineName>
<engineLink>http://www.sixapart.com/movabletype/</engineLink>
<homePageLink>ブログのurl</homePageLink>
<apis>
<api name="MetaWeblog" preferred="true" apiLink="ブログのXML-RPCエンドポイントurl" blogID="1" />
<api name="MovableType" preferred="false" apiLink="ブログのXML-RPCエンドポイントurl" blogID="1" />
<api name="Blogger" preferred="false" apiLink="ブログのXML-RPCエンドポイントurl" blogID="1" />
</apis>
</service>
</rsd>
plugins:で、動かしてみると…、バッチリです。文字化けもせず書き込めています。
- module: Subscription::Config
config:
feed:
- http://www.simazaki.com/~izumi/mmk/rss.xml
- module: Publish::MT
config:
rsd: http://hoge.fuga/rsd.xml ←rsd.xmlのurl
username: fc2のユーザ名(登録したメールアドレス?)
password: fc2のパスワード
blog_id: ブログID(http://xxx.blog???.fc2.com/ の"xxx"の部分)
title: "新着エントリー"
Encode::_utf8_off($args{title});
Encode::_utf8_off($args{body});
Encode::_utf8_off($self->conf->{title}); ←追加
my $id = $mt->newPost({
title => $self->conf->{title} || $args{title} || '',
description => $args{body} || '',としてみたら、titleを日本語で指定しても文字化けしなくなりました。とりあえず解決したので、まぁ良いか…。plugins:う〜ん、まだまだ修行が足りないようです。
- module: Subscription::Config
config:
feed:
- http://www.simazaki.com/~izumi/mmk/rss.xml
- module: Filter::Rule
rule:
module: Fresh
mtime:
path: /home/hoge/tmp/ishinomori.tmp
autoupdate: 1
- module: Publish::MT
config:
rsd: http://www.simazaki.com/ishinomori/rsd.xml
username: MT_username
password: MT_XMLRPC_password
blog_id: 2
title: "新着エントリー"
plugins:titleを日本語にすると、文字化け化けになってしまうのですが、対処方法がわからず英語のままになっています。
- module: Subscription::Config
config:
feed:
- http://www.simazaki.com/~izumi/mmk/rss.xml
- module: Publish::MT
config:
rsd: http://www.simazaki.com/ishinomori/rsd.xml
username: MT_username
password: MT_XMLRPC_password
blog_id: 2
title: "New Entry"
- module: Subscription::Configこれで今日(あるいは昨日)1日分だけを抜き出すことができますが、昨日の分の場合はともかく、今日の分を抜き出す場合だと、検索エンジン側の更新状況やタイミングによっては、取りこぼしが発生する可能性があります…。
config:
feed:
- http://www.simazaki.com/~izumi/mmk/rss.xml
- module: Filter::Rule
rule:
# expression: $args->{entry}->date->ymd eq Plagger::Date->now(timezone=>'Asia/Tokyo')->ymd ←今日の分だけを抜き出す場合
expression: $args->{entry}->date->ymd eq Plagger::Date->now(timezone=>'Asia/Tokyo')->subtract(days=>1)->ymd ←昨日の分だけを抜き出す場合
- module: Publish::MT
config:
plugins:mark_read:1 にしておくと、Plagger一度取り込んだ記事はlivedoor Reader側で既読扱いとなり、次回以降は取り込まれないため、重複対策になります。
- module: Subscription::LivedoorReader
config:
username: LDR_username
password: LDR_password
mark_read: 1
- module: Publish::MT
config:
global:で、結果を見ると、引っかかったのは僅かに11件。その内の2つはウチで、3つはmmkさん、この他にteeter totterに関係しそうなのは2件ということで…、やっぱり話題に上らなくなってきていますね…。
assets_path: /hoge/fuga/plagger/assets
timezone: Asia/Tokyo
log:
level: debug
plugins:
- module: Subscription::Planet
config:
keyword: teeter+totter
lang: ja
- module: Filter::TruePermalink
- module: Filter::StripRSSAd
- module: Widget::HatenaBookmarkUsersCount
- module: Bundle::Planet
config:
duration: 30 days
title: teeter totter関連情報
dir: /hoge/fuga/tt
url: http://www.simazaki.com/~izumi/tt/
theme: sixapart-std
stylesheet: http://bulknews.typepad.com/blog/styles.css
description: teeter totterに関するニュース、ブログ等
# wget http://ftp.kddilabs.jp/Linux/packages/fedora/releases/7/Fedora/i386/os/Fedora/fedora-release-7-3.noarch.rpm次に国内のミラーサイトからダウンロードするように変更
# wget http://ftp.kddilabs.jp/Linux/packages/fedora/releases/7/Fedora/i386/os/Fedora/fedora-release-notes-7.0.0-1.noarch.rpm
# rpm -Uvh fedora-release-7-3.noarch.rpm fedora-release-notes-7.0.0-1.noarch.rpm
# emacs /etc/yum.repos.d/fedora.repoで、アップグレード開始
[fedora]
name=Fedora $releasever - $basearch
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch ←コメントアウト
mirrorlist=file:///etc/yum.repos.d/local-repos-7 ←追加
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY
# emacs /etc/yum.repos.d/local-repos-7
http://ftp.kddilabs.jp/Linux/packages/fedora/releases/7/Everything/i386/os/
ftp://ftp.kddilabs.jp/Linux/packages/fedora/releases/7/Everything/i386/os/
http://ftp.riken.go.jp/Linux/fedora/releases/7/Everything/i386/os
ftp://ftp.riken.go.jp/Linux/fedora/releases/7/Everything/i386/os/
ftp://ftp.iij.ad.jp/pub/linux/fedora/releases/7/Everything/i386/os/
# yum clean all幾つか依存関係でエラーが出ましたが、とりあえず削除しても大丈夫そうなパッケージだったため、「yum remove ほげほげ」して、後でインストールすることにしました。
# yum upgrade
# chmod +x jdk-6u1-linux-i586-rpm.bin ←ダウンロードしたファイルに実行権限を付加
# ./jdk-6u1-linux-i586-rpm.bin ←rpmファイルの抽出、インストール
# vi /etc/profileこれでjavaの設定は完了。
export JAVA_HOME=/usr/java/jdk1.6.0_01
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
# vi HelloWorld.javaで動作チェックしたのですが、エラーが出てしまい動いてくれません…。
public class HelloWorld {
static public void main(String[] args) {
System.out.println("Hello World");
}
}
# javac HelloWorld.java念のため、javaのバージョンをチェックすると、
# java HelloWorld
Exception in thread "main" java.lang.ClassFormatError: HelloWorld (unrecognized class file version)
# java -version先ほどインストールしたSunのjavaではなく、GNUのgijが動いてます。ということでSunのjavaに切り替えます。
java version "1.4.2"
gij (GNU libgcj) version 4.1.1 20070105 (Red Hat 4.1.1-51)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# sudo /usr/sbin/alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_01/bin/java 2念のため先ほどのHelloWorldを動かしてみると、ちゃんと「HelloWorld」と表示されるようになりました。
# sudo /usr/sbin/alternatives --config java
2 プログラムがあり 'java' を提供します。
選択 コマンド
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/java
2 /usr/java/jdk1.6.0_01/bin/java
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
# java -version
java version "1.6.0_01"
Java(TM) SE Runtime Environment (build 1.6.0_01-b06)
Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing)
# perl -MCPAN -eshell
cpan> install Test::WWW::Selenium
$ java -jar selenium-server.jarと起動して、テスト用スクリプトが動けば完了です。
my $sel = Test::WWW::Selenium->new( host => "localhost",と直接してして動かしました。
port => 4444,
browser => "*firefox /usr/lib/firefox-x.x.x.x/firefox-bin",
browser_url => "http://foo.bar/" );
SoftwareDesignの2006年10月号にPlaggerの解説が書かれているため、バックナンバーを近所の書店で探していたのですが、どうにも見つかりません。通販で注文しようかどうしようか…、と迷っていたら、ウチの奥さんが八重洲ブックセンターに行ったついでに見つけて買ってきてくれました。SetEnvIf User-Agent "^(libghttp)|(TrackBack)|(Snoopy)" deny_uaなお、これらトラックバックspamは、書式が不適切なため(例えば必須となっているurlが空だったり)、Webサーバ側で弾かれていました。なので実害は今までも無かったのですが、学習されてteeter totterで受け付けるようなトラックバックを送るようになるとイヤなので、アクセスできなくしてしまいました。
order allow,deny
allow from all
deny from env=deny_ua
Insecure dependency in eval while running with -T switch at ../web-lib-funcs.pl line 2089.というエラーメッセージが残っています。
# rpm -Uvh --oldpackage webmin-1.330-1.noarch.rpmで元のバージョンに戻したのですが、それでもやっぱり動いてくれません。
# chown -R root:root /usr/libexec/webminです。さらにWebminを再起動するために
# chmod -R 6755 /usr/libexec/webmin
# find . -name "*.cgi" -o -name "*.pl" | perl perlpath.pl "/usr/bin/perl -U" -
# /etc/rc.d/init.d/webmin restartも行っています。
# yum groupinstall "Japanese Support"で日本語関連モジュールをインストールして対処しています。
xrdb $HOME/.Xresourcesを記載して対処しました。
LANG=ja_JP.utf8
export LANG
export LC_MESSAGE=ja_JP.utf-8
export LC_CTYPE=ja_JP.utf-8
export XMODIFIERS=@im=scim
export GTK_IM_MODULE=scim
export QT_IM_MODULE=scim
exec gnome-session
# wget http://pub.woremacx.com/worepo/worepo-release-6.rpmで無事インストールできました。
# rpm -ivh worepo-release-6.rpm
# yum install perl-Plagger
#!/usr/bin/perl後は、このプログラムを定期的に動かせば、勝手にポイントメール中のポイント付加urlにアクセスしに行ってくれます。
# dirコマンドを実行し、結果(ファイル名)を配列に取り込む
$command ='dir /B';
if(!open(CMD,"$command 2>&1 |")) {
print STDERR "コマンドを実行できません。\n";
}
@answer = <CMD>;
close(CMD);
foreach $data(@answer) {
@mail_data = ( );
$i = 0;
if(!open(IN, $data)){
print STDERR "can not open $data\n";
exit;
}
@mail_data = <IN>;
close(IN);
print $data;
foreach $mail_list(@mail_data) {
$i = $i + 1;
if($mail_list =~ /クリックでもれなく/) { # ポイントメールのクリック用の文書
print $mail_data[$i]; # 次の行を画面上に表示
$command = "d:\\PROGRA~1\\MOZILL\~1\\firefox.exe";
system("$command \"$mail_data[$i]\""); # ブラウザ起動(ここではFirefox)
sleep(10);
}
}
}
<blog>のように変更しました。
<blogname>自分のブログの名前</blogname>
<blogtype>movabletype_cust</blogtype>
<blogapi>mt</blogapi>
<appkey/>
<username>ブログのログインユーザ名</username>
<apiurl>http://ブログのcgiのパス/tt_xmlrpc.cgi</apiurl>
<GUID>ここはそのままで</GUID>
<url>http://ブログのurl/</url>
<blogid>ブログのID(ユーザ名と同じで大丈夫?)</blogid>
<useboolean>false</useboolean>
</blog>
これまでに百度(baidu)のクローラーはお断りと百度クローラー再びで百度クローラーについて書きましたが、ここ数日またクロールしに来ています。ざっとこんな感じですね。
|
今回来ているのは、百度クローラー再びで書いたのと同じ国内からです。中国からのアクセスは依然としてルーターでdropしていますので、こちらは来ていません。
ウチのrobots.txtは
|
といった具合にbaiduspiderを全て拒否するようにしています。しかし今回のBaiduspiderですが、最初にrobots.txtを見ているものの、まるで無視してその後も何回もクロールしてくれています。これが続くようならiptablesでdropですね。
teeter totterは、エントリーを「公開」「下書」として保存できますが、「公開」「下書き」「公開」といった具合に、「公開」の間に「下書」が入っていると、出力されるhtmlに下書きの分のメイン部分フッターが出力されてしまうようです。下書きのメイン部分が無いのにフッター部分が出力されてしまうことになりますので、表示がちょっとおかしくなってしまいます。
ちょっと気持ち悪いので調べてみたところ、(正しいかどうかはともかく)対応できたようなので、その方法を記しておきます。
プログラムを見てみると、lib/mt_archive.plでindex.htmlなどを生成しているようです。このモジュールの
|
以下の部分が、ちょうど該当する部分です。
このサブルーチンの頭の方で、INDEX用スキンを読んできて、<!--cut-->をセパレータとして幾つかの変数にINDEX用スキンを分割しています。メイン部フッターは変数$m_foot_htmlに入りますので、この変数をprint OUTしている所を探すと
|
という部分が見つかります。
一方、公開/下書のフラグは$copyとなっているようで、0=公開、1=下書となっているようです(こちらはmt01_main.plを調べました)。
上記の$m_foot_htmlを出力している部分、および周りの部分を調べると、どうも$copyを出力の条件としてチェックしていないようです。このため、公開でも下書でもメイン部フッターが出力されてしまうのかと思われます。
なので、上記の$m_foot_html出力条件部分に、
|
と$copyも条件として加え、下書の場合はメイン部フッターを出力しないるようにしたところ、問題が発生しなくなりました。
条件追加だけなので、特に問題無いと思いますが…。
ネットワーク設定
coLinuxのインストールを参考に、ネットワークの設定を行いました。PC利用環境上の制限があったため、TAP-Win32でのルータ接続にしています。ちなみにWindows側のTAPドライバのIPアドレスは192.168.1.1、Linux側は192.168.1.2にしてあります。
また、ルータ接続の場合は、Windows側にProxyサーバを立てておく必要が有りますので、Windows用のProxyソフトをインストールしておきます。
fedora5-start.batの修正
TAPを使うことにしましたので、それに合わせてcoLinux起動用バッチファイルを修正します。
修正前:
|
修正後
|
これでようやくネットワークに接続できるようになりました。
yumでアップデート
Linuxのアップデートを行っておきます。Fedora Coreなのでyumを使っています。
|
ディスク容量アップ
ダウンロード時の状態ではディスクイメージが2GBですが、これだとXwindowを入れたりすると一杯になりそうなので、容量をアップすることにします。
ハードディスクを増やすを参考に、4GBのディスクイメージを作成しました。
X windowのインストール
VNCでX windowを動かすために、まずはX windowをインストールします。GNOMEもついでにインストール。
|
vnc関係のセットアップ
VNCサーバをインストールします。
|
次にvncserverの設定を行います。
/etc/sysconfig/vncservers
|
さらに、GNOMEを使いたいので、このように変更します。
/home/hoge/.vnc/xstartup
|
vncserverを一度起動して、パスワードを入力しておきます。
vncクライアントの設定
Windows側で使うvncクライアントソフトをインストールします。こちらからダウンロードしてきました。
インストールし終わったら、VNC Viewerを起動します。
Serverの所に"192.168.1.2:1"と入れ「OK」を押すと、パスワード入力画面になりますので、先ほど設定したパスワードを入力します。
coLinuxをダウンロード
こちらからcoLinuxをダウンロードします。現状ではVersion 0.6.4が最新のようです。
coLinux上にLinuxをインストール
coLinux用のディストリビュータ別インストーラがこちらに有りますので、これを使ってFedora Coreをインストールしてみました…、が、上手くインストールできません。ディスクイメージファイル作成までは進むのですが、インストールが終わらないのです。「非常に時間がかかる場合があります」とありますが、インストール途中で止まってしまいます。夜にインストールを始めて、翌朝見てみるとcoLinuxがお亡くなりになること2回、ちょっと悲しかったです。orz
Linuxのディスクイメージを入手
仕方ないので、こちらからFedora Core5のディスクイメージをダウンロードしてきました。
このファイルをcoLinuxをインストールしたフォルダに解凍して、ディスクイメージと共に解凍されるバッチファイルを動かすと一応は動いてくれます。ただ、ネットワークが動かなかったり、まだまだ十分な状態ではありません。ネットワーク接続が上手くいかないため、アップデートやモジュール追加が出来ないのが痛いです。
|
|
|
|
クロール時のエラー情報
HTTPエラーが発生したとか、タイムアウトしたとか、robots.txtで規制されたコンテンツが何かとか、見つかりませんでしたとか、クロール時のエラー内容を表示してくれる。
robots.txtの解析
robots.txtの内容を表示してくれたり、変更した場合の動きをシミュレートしてくれる。
クエリの情報
Googleで検索された言葉を20位まで表示してくれる。
|
その日に投票されていないIPアドレスであること
refererが正しく付いていること
Javascriptが有効となっていること
ブログランキングに限り、IEであること(これはウチの環境だけかも)
|
|
|
トラックバックspam対策
トラックバックspam対策完了によって(ほぼ)完璧にブロックできるようになったのですが、その後ぱったりとトラックバックspamが来なくなりました。対策の効果を発揮できなくなったのは「う〜ん」なんですが、まぁ来なくなったのは良かったです。弊害も今のところ無いので、当分はこのまま動かしておくことにします。
OpenProxy対策
こちらの方は相変わらず逆アクセスランキングへOpenProxyからアクセスがありますが、今のところ100%ブロックできています。ブロックしていても相手側がステータスコードをチェックしていないようで、しつこくアクセスしてきます。こちらも弊害が無いので、このまま動かしておくことにします。
| sub entryregist { &get_time; &get_host; # /* トラックバックspam避け local($flag2)=0; foreach (@set_data10) { if (!$_) { next; } $_ =~ s/\*/\.\*/g; if ($in{'url'} =~ /$_/i) { $flag2=1; last; } } if ($flag2) { &xml_error("The ping is denied."); } if ($in{'url'} eq "") { &xml_error("url field is necessary."); } |
必要なモジュールの準備
上記のNamazu: インストールを見ると、Namazu設置には
・Namazu本体
・Perl(5.004以降)
・File::MMagic
・GNU gettext (0.13以降)
・KAKASI (2.3.0以降)もしくは ChaSen
などが必要なことが分かりますので、それぞれをダウンロードしてきます。
なお、NamazuにはFile::MMagic(1.25)が同梱されていますので、これを使いました。
gettextをインストール
(1)でダウンロードしたgettextをインストールします。私がダウンロードした時点では、gettext-0.15.tar.gzが最新でした。以下のようにしてインストールします。
# tar zxvf gettext-0.15.tar.gz ←適当なディレクトリでtarballを解凍 # cd gettext-0.15 # ./configure # make # make install |
KAKASIをインストール
(1)でダウンロードしたKAKASIをインストールします。私がダウンロードした時点では、kakasi-2.3.4.tar.gzが最新でした。こちらもgettext同様に以下のようにしてインストールします。
# tar zxvf kakasi-2.3.4.tar.gz # cd kakasi-2.3.4 # ./configure # make # make install |
namazuインストール
(1)でダウンロードしたNamazuをインストールします。私がダウンロードした時点では、namazu-2.0.16.tar.gzが最新でした。こちらも同様に以下のようにしてインストールします。
# tar zxvf namazu-2.0.16.tar.gz # cd namazu-2.0.16 # ./configure # make # make install |
なお、途中で以下のようにFile::MMagicが無いと怒られる場合が有りますが、画面上の指示に従ってFile::MMagicをインストールします。
configure: error: you need to install the included File-MMagic first The simplest way to install File-MMagic is: % cd File-MMagic % perl Makefile.PL % make % su # make install Then, simply run configure again. % cd .. % ./configure Or you can install File-MMagic to your home directory by the following way: % cd File-MMagic ExtUtils::MakeMaker older % perl Makefile.PL LIB=/home/izumi/lib INSTALLMAN3DIR=/home/izumi/man ExtUtils::MakeMaker newer % perl Makefile.PL LIB=/home/izumi/lib INSTALLSITEMAN3DIR=/home/izumi/man % make % make install Then, run configure again with --with-pmdir=DIR option. % cd .. % ./configure --with-pmdir=/home/izumi/lib |
namazu.cgiをコピー
/usr/local/libexec/namazu.cgiをcgi用のディレクトリにコピーします。
namazurcを設定
/usr/local/etc/namazu/namazurc-sample を namazurc としてコピーし、これを編集します。ウチの場合は、以下の2カ所を変更しました。
Lang ja_JP ←先頭の#を削除 Replace /home/(.*)/public_html/ http://www.simazaki.com/~\1/ ←追加 |
mknmzrc-sampleをmknmzrcにコピー
/usr/local/etc/namazu/mknmzrc-sample を mknmzrc としてコピーします。
インデックスファイル作成
インデックスファイルの作成を行います。
# mkdir /usr/local/var/namazu/index/blog # mknmz --output-dir=/usr/local/var/namazu/index/blog --media-type=text/html -k /home/izumi/public_html/blog/ |
templateの編集
自分の好みに合わせてtemplateファイルを編集します。
上記の例だと、/usr/local/var/namazu/index/blog の下にある、「 NMZ 」から始まり「 ja 」で終わっているファイルです。ウチでは[戻る]を追加しました。
検索フォームをblogに設置
blogのインデックス用スキンファイルとENTRY用スキンファイルの適当な所に、検索フォームを追加します。ウチはこんな感じにしています。
<form action="/cgi-bin/namazu.cgi" method="GET"> <input type="text" name="query" maxlength="50" style="width:150px;" /> <input type="submit" value="検索"> <input type="hidden" name="whence" value="0"> <input type="hidden" name="max" value="20"> <input type="hidden" name="result" value="normal"> <input type="hidden" name="sort" value="score"> <input type="hidden" name="idxname" value="blog"> </form> |
cronで自動更新するように設定
最後に、blogが更新されたらインデックスに自動反映させるために、cronでインデックスの自動更新を行うようにします。今回は、以下のようなシェルスクリプトを作り、これをcronで1日1回起動するようにしています。
#!/bin/sh # 環境変数の設定(既に設定されている場合は不要) LANG="ja" export LANG # indexを作成するディレクトリに移動する cd /usr/local/var/namazu/index/blog # インデックス更新 mknmz --output-dir=/usr/local/var/namazu/index/blog --media-type=text/html -k /home/izumi/public_html/blog/ |
if($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $access, $ENV{'CONTENT_LENGTH'}); $access=~ tr/+/ /; $access=~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $access=~ s/ALL=//; }elsif($ENV{'QUERY_STRING'}){$access=$ENV{'QUERY_STRING'};} if( $access=~/^http|^https/ ) { $access=""; } ←これを追加 if($access=~ /\+/){(@ARGV)=split(/\+/,$access);} else{$ARGV[0]=$access;} |
httpd-develをインストール
apxsを動かすために、httpd-develをインストールします。
| # yum install httpd-devel |
ウチの環境ではhttpd-develが既に入っていたため、この作業は発生しませんでした。
apacheのモジュールをダウンロード
自分のサーバで動いているapacheのモジュールを、http://archive.apache.org/dist/httpd/からダウンロードします。
mod_access.cにパッチを当てる
mod_access_rbl for Apache2を参考に、mod_access.cにパッチを当てます。パッチ用のdiffファイルですが、そのままではパッチを当てることができなかったため、mod_access.cとmod_access_trb.diffを見比べて手動でパッチを当てました…。
従来のmod_access.soを一応バックアップしておく
一応、念のため…。
mod_access.soを作る
apxsを使って、mod_access.soを作り、既存のmod_access.soと差し替えます。
| % apxs -c mod_access.c # apxs -i -n mod_access .libs/mod_access.so |
httpd.confの修正
後はhttpd.confを修正して、アクセス制御を有効にします。ご参考ということで…
| <Directory /var/www/cgi-bin> … Order allow,deny allow from all deny via list.dsbl.org deny via all.rbl.jp </Directory> |
apache再起動
apacheを再起動して変更した設定を有効にします。
RSSI++本体をダウンロード
こちらからRSSI++本体をダウンロードして、サーバ上に展開します。permissionの設定に注意します。
Jcode.pmのインストール
Jcode.pmのサイトを参考にしてサーバにインストールします。今回は「Tarballを直接入手」の方法でインストールしました。適当なフォルダにTarballを解凍して、あとは手順に沿ってインストールします。
RSSI.cgiの編集
サーバの設定に合わせ編集します。引数渡しによるオプションの設定は行わないことにしたため、次の4箇所を変更しました。
・$SSIcall = 'cgi'; に変更。
・@callfromに、自分のサイトのURLを記入。
・$def_urlに、読み込むRSSのURLを記入。
・$def_encを、トップページの文字コード設定に合わせる。
$SSIcall = 'cgi'に変更していますが、こうしておかないと"malformed header from script."が出て動きませんでした。
RSSI.tmpの編集
ここは自分の好みに合わせて、ということになるかと…。
index.shtmlの編集
更新履歴を表示させる部分に
<!--#include virtual="/cgi-bin/RSSI/RSSI.cgi" -->
を入れます。こちらでは#execを使うようになっていますが、セキュリティ面でイマイチ不安なので#includeにしています。
| 月日 | 届いた数 |
|---|---|
| 7月4日 | 21 |
| 7月5日 | 227 |
| 7月6日 | 401 |
| 7月7日 | 197 |
| 7月8日 | 66 |
| 7月9日 | 65 |
| 7月10日 | 40 |
| 7月11日 | 36 |
| 7月12日 | 19 |
| 7月13日 | 95 |
| 7月14日 | 19 |
| 7月15日 | 24 |
| 7月16日 | 0 |
Google sitemapに対象とするサイトを登録
トップページに「サイトを追加」が有りますので、ここに登録するWebサイトのURLを入れます。
サイト確認ステータスの「新しいメタタグを用いた確認方法をお試しください」をクリック
「確認方法を選択」の所で「METAタグを追加」を選びます。そうすると登録するMETAタグのサンプルが表示されますので、これをコピーしておきます。
登録したWebサイトのトップページ(index.html)に、先ほどのMETAタグを追加
<head>〜</head>の間に、先ほどコピーしたMETAタグのサンプルをペーストします。
Google sitemapの「サイトの確認ステータス」で登録確認
チェックマークが付けば登録完了です
sitemap.xmlを作る
sitemap.xmlを作るには、Google sitemap generatorを使うのが確実です。Google サイトマップ (Beta) ヘルプ: サイトマップ生成ツールを使用する場合を見ながら設定します。ただ、isweb上ではsitemap generatorは動かない(と思われる)ので、力業でローカルのWindowsマシン上でsitemap.xmlを作ることにします。
まず、ローカルマシンに、Webサイトのデータを全てパックアップします。このデータを元にしてsitemap.xmlを作成します。
sitemap generatorを動かすにはpythonが必要なので、Python Japan User's Groupからダウンロードしてきます。今回は日本語環境用インストーラを使いました。exe形式なので、これを実行すればインストールできます。
sitemap generatorを入手します。こちらからダウンロードできます。
http://sourceforge.net/project/showfiles.php?group_id=137793&package_id=153422
sitemap generatorを解凍して、config.xmlを自分の使う環境に合わせて設定します。だいたいこんな感じ。
| <site base_url="http://foo.bar/" ←登録するWebサイトのURL store_into="c:\hoge\sitemap.xml" ←sitemap.xmlを生成する先 verbose="1" > <url href="http://foo.bar/" /> ←登録するWebサイトのURL <directory path="c:/backup" ←Webサイトのデータ全パックアップしたフォルダ url="http://foo.bar/" ←登録するWebサイトのURL default_file="index.html" /> |
登録されては困るファイルやフォルダは、<filter>で指定しておくと良いでしょう。example_config.xmlを見れば例が書かれています。
そして、sitemap.xmlを作成します。コマンドプロンプトから以下のようにしてsitemap generatorを起動します。
| python c:\sitemap_gen-1.4\sitemap_gen.py --config=c:\sitemap_gen-1.4\config.xml --testing |
最後の--testingを付けておくと、googleのサイトに通信に行きませんので、今回はこちらの方が都合が良いでしょう。
sitemap.xmlをWebサイトにアップロード
上記で生成されたsitemap.xmlをftpソフトなどでWebサイトにアップロードします。
Google sitemapから、「サイトマップの追加」を行う
ALL: 129.33.0.0/255.255.0.0 # US#の後ろのアルファベット2文字は、国を表しています。
ALL: 24.232.0.0/255.255.0.0 # AR
ALL: 218.2.0.0/255.254.0.0 # CN
ALL: 82.162.0.0/255.255.0.0 # RU
ALL: 60.48.0.0/255.252.0.0 # MY
ALL: 69.44.0.0/255.254.0.0 # US
ALL: 201.48.0.0/255/240.0.0 # BR
ALL: 211.10.0.0/255.255.0.0 # CN
ALL: 84.4.0.0/255.252.0.0 # FR
ALL: 219.92.0.0/255.254.0.0 # MY
ALL: 209.71.192.0/255.255.192.0 # CA
ALL: 129.120.0.0/255.255.0.0 # US
ALL: 192.226.64.0/255.255.192.0 # RO
ALL: 69.192.0.0/255.248.0.0 # CA
ALL: 68.164.0.0/255.252.0.0 # US
ALL: 218.130.120.0/255.255.255.0 # JP
ALL: 216.136.0.0/255.255.128.0 # US
ALL: 219.128.0.0/255.240.0.0 # CN
ALL: 129.120.0.0/255.255.0.0 # US
ALL: 219.222.0.0/255.254.0.0 # CN
ALL: 202.188.64.0/255.255.192.0 # MY
ALL: 66.98.128.0/255.255.128.0 # US
ALL: 217.77.64.0/255.255.240.0 # GA
ALL: 213.163.96.0/255.255.224.0 # YU
ALL: 86.34.0.0/255.254.0.0 # RO
ALL: 217.10.176.0/255.255.240.0 # GB
ALL: 203.68.0.0/255.252.0.0 # TW
ALL: 221.216.0.0/255.248.0.0 # CN
ALL: 207.29.224.0/255.255.240.0 # US
ALL: 163.178.0.0/255.255.0.0 # CR
ALL: 195.136.0.0/255.255.0.0 # PL
ALL: 70.88.0.0/255.252.0.0 # US
ALL: 70.104.0.0/255.248.0.0 # US
ALL: 201.32.0.0/255.240.0.0 # BR
ALL: 217.144.0.0/255.255.240.0 # JO
ALL: 61.95.224.0/255.255.240.0 # IN
ALL: 80.48.0.0/255.248.0.0 # PL
ALL: 24.56.129.0/255.255.192.0 # US
ALL: 213.134.160.0/255.255.224.0 # PL
ALL: 221.224.0.0/255.248.0.0 # CN
ALL: 61.150.0.0/255.254.0.0 # CN
ALL: 212.35.96.0/255.255.224.0 # GB
ALL: 209.175.16.12/255.254.0.0 # US
ALL: 220.160.0.0/255.224.0.0 # CN
ALL: 12.0.0.0/255.0.0.0 # US
ALL: 194.210.0.0/255.255.0.0 # PT
ALL: 216.155.64.0/255.255.224.0 # CL
ALL: 222.64.0.0/255.248.0.0 # CN
ALL: 201.16.0.0/255.240.0.0 # BR
ALL: 217.10.176.0/255.255.240.0 # GB
ALL: 216.155.64.0/255.255.224.0 # CH
ALL: 83.0.0.0/255.224.0.0 # PL
ALL: 200.128.0.0/255.128.0.0 # BR
ALL: 201.64.0.0/255.224.0.0 # BR
ALL: 202.58.80.0/255.255.240.0 # JP
ALL: 150.161.0.0/255.255.0.0 # BR
ALL: 201.32.0.0/255.240.0.0 # BR
ALL: 202.146.64.0/255.255.240.0 # MY
ALL: 200.128.0.0/255.128.0.0 # BR
ALL: 213.171.32.0/255.255.224.0 # RU
ALL: 206.225.144.0/255.255.240.0 # US
ALL: 203.76.128.0/255.255.240.0 # IN
ALL: 87.206.0.0/255.254.0.0 # PL
ALL: 129.41.0.0/255.255.0.0 # US
ALL: 203.68.0.0/255.252.0.0 # TW
ALL: 207.29.224.0/255.255.240.0 # US
ALL: 194.85.0.0/255.255.0.0 # RU
ALL: 206.54.64.0/255.255.192.0 # US
ALL: 193.109.01.0/255.255.255.0 # PL
ALL: 66.98.128.0/255.255.128.0 # US
ALL: 80.32.0.0/255.248.0.0 # ES
ALL: 60.248.0.0/255.255.0.0 # TW
ALL: 82.140.64.0/255.255.192.0 # RU
ALL: 217.77.64.0/255.255.240.0 # GA
ALL: 130.227.0.0/255.255.0.0 # DK
ALL: 194.210.0.0/255.255.0.0 # PT
一網打尽を入手
一網打尽というソフトを入手します。私はVectorからダウンロードしました。
IPアドレスデータ入手
一網打尽で使うIPアドレスデータを入手します。今回はAPNICからdelegated-apnic-latestをダウンロードしました。
一網打尽で国別IPアドレス割り当てリストを作成
一網打尽を起動して、前記のdelegated-apnic-latestを読み込み、「名前を付けて保存」で国別のリストを作成します。
エディタ等を使ってiptablesが読めるデータに変更
国別リストをエディタ等で加工して、iptablesが読めるようなデータ形式に変更します。こんな感じですね。
iptables -A KRFILTER -s 58.65.64.0/18 -j KRFILTERED
iptablesにフィルタを登録
iptablesにフィルタ登録します。方法はkrfilter - deny accesses from .krを参考にさせて頂きました。
| <Files tt_user.cgi> SetEnvIf Referer "^http://www\.simazaki\.com" ref_ok order deny,allow deny from all allow from env=ref_ok </Files> |
| 83.97.111.111 [03:50:14] "GET /~izumi/blog/archives/2006_4_25_254.html" 83.97.111.111 [03:50:14] "GET /~izumi/blog/archives/2006_4_6_229.html" 194.144.95.163 [03:50:31] "POST /~izumi/cgi-bin/blog/blog_no_cgi/tt_user.cgi" 83.97.111.111 [03:50:42] "GET /~izumi/blog/archives/2006_4_6_229.html" 210.194.89.148 [03:50:46] "POST /~izumi/cgi-bin/blog/blog_no_cgi/tt_user.cgi" 83.97.111.111 [03:50:51] "GET /~izumi/blog/archives/2006_4_6_229.html" 200.118.2.219 [03:50:53] "POST /~izumi/cgi-bin/blog/blog_no_cgi/tt_user.cgi" 83.97.111.111 [03:51:00] "GET /~izumi/blog/archives/2006_4_6_229.html" 81.255.191.106 [03:52:41] "POST /%7Eizumi/cgi-bin/blog/blog_no_cgi/tt_user.cgi" 83.97.111.111 [03:52:46] "GET /~izumi/blog/archives/2006_4_25_254.html" 222.83.255.210 [03:55:33] "POST /%7Eizumi/cgi-bin/blog/blog_no_cgi/tt_user.cgi" 83.97.111.111 [03:55:37] "GET /~izumi/blog/archives/2006_4_25_254.html" 213.176.144.73 [03:55:40] "POST /~izumi/cgi-bin/blog/blog_no_cgi/tt_user.cgi" 83.97.111.111 [03:55:46] "GET /~izumi/blog/archives/2006_4_25_254.html" |
| Can't locate object method "new" via package "GD::Image" (perhaps you forgot to load "GD::Image"?) at lib/GD/Barcode/QRcode.pm line 285., |
モブログ用のメールアカウント作成
自宅サーバ側で用意するも良し、プロバイダのアカウントを使うも良し。
blog側の設定
「ユーザ管理」の「ユーザの編集」で、受信(POP)サーバ/受信アカウント/受信パスワードを入力。
モブログ用のメールアカウントに画像付きメールを送信
普通の操作なので特に説明は無くても大丈夫でしょう。
携帯電話のブラウザからサーバ上のtt_mt.cgiにアクセス
ここで本文入力などを行います。PCのブラウザからアクセスした場合と画面の見え方は違いますが、基本構成は一緒なので戸惑うことは無いと思います。
この時に先ほどメールで送った画像を取り込むかどうか、画面上で指定。
Authentication-Warning: hoge.simazaki.com: apache set sender to foo@simazaki.com using -f |
改行コードの誤認識
perl scriptをftpでサーバにアップロードする際にバイナリモードで送ってしまい、改行コードを誤認識してしまう、というものだそうです。1行目のperlのパスを指定している所を
#! /usr/bin/perl --
にすると上手く動いてくれるそうなのですが…、今まで正常動作していたので、これが原因とは考えにくいです。実際にこのように変更してみたのですが、効果無しでした。
perlのパス
perlのパス指定を誤っている場合も、このエラーが出るそうなのですが…。こちらも今まで正常動作していましたので原因とは考えにくいです。
suexecの影響
こんな所は特にいじっていないので、これも関係無いと思っていたのですが…、これが大有りでした。先日、パッケージのアップデートをかけたのですが、この中にapacheのアップデートも入っていて、suexecが有効になってしまっていたようです。suexecをリネームしてapacheを再起動したところ、無事tt_mt.cgiが動くようになりました。
202.32.46.12 - - [05/Apr/2006:16:48:08 +0900] "PROPFIND /My%20Documents HTTP/1.0" 405 310 "-" "Microsoft-WebDAV-MiniRedir/5.1.2600" 202.32.46.12 - - [05/Apr/2006:16:54:08 +0900] "PROPFIND /SharedDocs HTTP/1.0" 405 308 "-" "Microsoft-WebDAV-MiniRedir/5.1.2600" 202.32.46.12 - - [05/Apr/2006:17:06:07 +0900] "PROPFIND /c HTTP/1.0" 405 299 "-" "Microsoft-WebDAV-MiniRedir/5.1.2600" |
[base] gpgcheck=1 name=Fedora Core $releasever base baseurl=http://download.fedoralegacy.org/fedora/$releasever/os/$basearch [updates] gpgcheck=1 name=Fedora Core $releasever updates baseurl=http://download.fedoralegacy.org/fedora/$releasever/updates/$basearch [legacy-utils] gpgcheck=1 name=Fedora Legacy utilities for Fedora Core $releasever baseurl=http://download.fedoralegacy.org/fedora/$releasever/legacy-utils/$basearch |
# yum update |
# rpm --import http://www.fedoralegacy.org/FEDORA-LEGACY-GPG-KEY |
# chkconfig yum on ←yumの実行を有効にする # chkconfig --list yum ←yumの状態を確認 yum 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ |
# service yum status 夜間yum更新を無効にしました。 # service yum start 夜間 yum 更新の有効化中 [ OK ] # service yum status 夜間 yum 更新が有効 |
グループ1(218.81.xxx.xxx)
321webspace.com ([218.81.170.218])
k9gear.net ([218.81.172.128])
bensturges.com ([218.81.162.250])
グループ2(58.51.xxx.xxx)
1usamall.com ([58.51.7.59])
makorsha.biz ([58.51.7.103])
グループ1(60.179.xxx.xxxより発信)
sougou.com ([60.179.141.96])
spadespanker.com ([60.179.142.202])
qon.lao.net ([60.179.137.192])
bayareacricket.org ([60.179.140.84])
seckinmail.com ([60.179.143.242])
striper-guide.every1.net ([60.179.137.146])
id.ru ([60.179.141.31])
nusaindahku.every1.net ([60.179.141.8])
epatra.com ([60.179.138.192])
グループ2(220.174.xxx.xxxより発信)
softballperformance.com ([220.174.174.161])
lamur.ru ([220.174.173.137])
jdu.ru ([220.174.174.152])
sirmixalot.com ([220.174.175.9])
go2.pl ([220.174.174.35])
cards.yandex.ru ([220.174.174.248])
グループ3(219.129.xxx.xxxより発信)
grimgrinningghosts.com ([219.129.103.143])
goisles.net ([219.129.102.142])
グループ4(58.33.xxx.xxxより発信)
wtonetwork.com ([58.33.229.181])
freudich.ch ([58.33.223.235])
top.4love.ru ([58.33.234.207])
splanic.com ([58.33.227.94])
boujdour.org ([58.33.220.117])
beetown.com ([58.33.223.234])
| 60.179.0.0/255.255.0.0 220.174.0.0/255.255.0.0 219.129.0.0/255.255.0.0 58.33.0.0/255.255.0.0 |
| # メールヘッダー中に「X-Spam-***」の記述がなければspamassassinを起動 :0fw *!^X-Spam.* |spamassassin # メールヘッダー中に「X-Spam-Status: Yes」があれば、「 spam 」にメールを格納 :0 * ^X-Spam-Status: Yes $MAILDIR/spam/. |
| $ /usr/bin/sa-learn --spam --mbox /home/foo/mail/spam |
Procmailを導入して、迷惑メールを拒否するようにしてみました。
設定方法(レシピの書き方など)には、Procmail の紹介とレシピの書き方を参考にさせて頂きました。
まずは、Subjectに"未承諾広告"が入っているメールは、そのまま廃棄してしまうことにします。何も考えずに以下のようにレシピをコピペして、/etc/procmailrcを作ったら、これが上手く動きません。
| LOGFILE=$HOME/procmail.log LOCKFILE=$HOME/.lockfile MAILDIR=$HOME/ :0 * ^Subject:.*iso-2022-jp * ^Subject:\/.* * ? echo "$MATCH" | nkf -me | egrep '未承諾広告' /dev/null |
で、よく考えたら、文字コードの設定を間違えていました。/etc/procmailrcは、UTF-8で書き込んだのですが、上記の設定だとnkfでEUCを指定していますので、これではダメですね。以下のように修正したところ、Subjectに"未承諾広告"が入っているメールは、/dev/null送りになることを確認しました。
| :0 * ^Subject:.*iso-2022-jp * ^Subject:\/.* * ? echo "$MATCH" | nkf -mw | egrep '未承諾広告' /dev/null |
さて、Procmailには他にもレシピを設定することによって、色々な振り分けが出来そうです。もう少しレシピを強化して、SubjectのNGワード指定や、ブラックリスト指定などを入れようかと思っております。
Google botが毎日クロールするようになった
手動のショボいsitemapを置いていた時は、全然クロールしに来ませんでしたが、ツールで生成したsitemapを置くようになってから、毎日クロールしに来るようになりました。毎日10〜15位のコンテンツをクロールし続けています。
sitemapに書かれた、ほぼ全てのコンテンツが登録された
毎日クロールし続けてくれたおかげで、Google上にほぼ全てのコンテンツが登録されました。クロールされてから、だいたい1週間後にGoogle上に反映されるようです。
検索順位、PageRankなどは殆ど変わらず
検索順位は、たまに上がることもあるのですが、そのうちに定位置に落ち着くようです。上位には行きませんねぇ。
PageRankも1から変化無しですね。PageRankの更新周期は結構長いようなので、1ヶ月程度では更新されないのかもしれません。
キャッシュ未登録設定も有効に働いているようです
検索エンジンへのキャッシュ登録禁止方法で書いた方法で、検索エンジンのキャッシュに登録されないようにしていますが、こちらもちゃんと効いているようです。
ADSL環境
下りで400kbps程度の速度の出るADSL環境で試したところ、問題無く再生されました。レートですが、最初は「自動」にしていたところ、ちょっと再生にもたつく様子だったため、手動で「3」に設定したところ、画質は粗いものの絵も音もちゃんと再生されました。これなら合格といったところです。
(会社じゃない)イントラネット環境
イントラ内からのアクセスについてはポート番号等でフィルタしていない環境です。下りで500kbps程度は出ています。で、こちらの環境なんですが、どうも良く無く、絵/音ともに途切れ途切れでダメです。QoSでも働いているんだろうか。
会社のネットワーク経由
こちらは全然ダメでした。て言うか、そんな環境で試すな。
自宅ルータのロクにアクセスの形跡が何も残っていませんでしたので、Firewallで塞いでいるみたいですね。
AirH"経由(しかも32kbps)
こんな細い回線で試すほうがどうかしていますが、自宅のLF-PK1に接続できることだけは確認しました。なので設定上は大丈夫かと思われます。当然のように絵や音は出ません。
あっさりと送受信ともに動きました。「Mail & Newsgroups のアカウント設定」で、「サーバ」の所で「保護された接続(SSL)を使用する」と「保護された認証を使用する」にチェックを入れ、次に「送信メールサーバ(SMTP)」で「保護された接続を使用する」で「TLS」にチェックを入れただけです。
株式会社 ムービットさんが公開しているソフトです。
メールソフトでは有りませんが、POP3/SMTP over SSL非対応のメールソフトでも、このS-Helperを経由することによりSSLに対応させることができます。結果はOKです。非常に便利です。ただしOutlookだと同じ現象が出てしまいダメでした。
S-Helperの設定は非常に簡単で、「新規追加」ボタンを押し、POPS/IMAPS/SMTPのどれかを選択し、次の画面で接続するメールサーバのアドレスを入力するだけです。設定が終わったら「ファイル」→「保存&実行」するのをお忘れ無く。後は、メールソフト側でメールサーバのアドレス指定をS-Helperに変えれば設定完了です。
| Jan 26 22:53:51 sv01 sendmail[14278]: STARTTLS=server, relay=[xxx.xxx.xxx.xxx], version=TLSv1/SSLv3, verify=NO, cipher=RC4-MD5, bits=128/128 Jan 26 22:53:56 sv01 sendmail[14278]: k0QGro96014278: [xxx.xxx.xxx.xxx] did not issue MAIL/EXPN/VRFY/ETRN during connection to TLSMTA |
<!--LinkList--> <div class="SideModule-out"><div class="SideModule-in"> <div class="Side-Title"> リンクリスト </div> <div class="Side-Body"> <script language="javascript" type="text/javascript" src="http://www.blogpeople.net/display/usr/0f0d46595b511212.js" charset="Shift_JIS"></script> </div> </div></div> <!--/LinkList--> |
リーセントコメントリスト <!--comment_list-->
リーセントトラックバックリスト <!--trackback_list-->
| <!--CommentList--> <div class="SideModule-out"><div class="SideModule-in"> <div class="Side-Title"> Recent Comments </div> <div class="Side-Body"> <ul> <!--comment_list--> </ul> </div> </div></div> <!--/CommentList--> <!--TrackBackList--> <div class="SideModule-out"><div class="SideModule-in"> <div class="Side-Title"> Recent Trackback </div> <div class="Side-Body"> <ul> <!--trackback_list--> </ul> </div> </div></div> <!--/TrackBackList--> |
日本語パッチ
Fedora Core用の日本語対応パッケージ
| # wget http://ftp.sanguine.jp/pub/sahughes/rhx/squirrelmail/RPMS/fcx/squirrelmail-ja-1.4.5-1_fcx.noarch.rpm |
| # rpm -e squirrelmail |
| # rpm -ivh squirrelmail-ja-1.4.5-1.fcx.noarch.rpm |
サイトマップ生成ツールをダウンロード
http://sourceforge.net/project/showfiles.php?group_id=137793&package_id=153422からダウンロードします。
手元のPCで編集してからサーバにアップロードすることにしたため、今回はzip形式のファイルをダウンロードしました。
example_config.xmlファイルを元に、自分のサイトに合うように修正。
まずは以下の部分を探します。
<site
base_url="http://www.example.com/"
store_into="/var/www/docroot/sitemap.xml.gz"
verbose="1">
base_urlを自分のサイトのURL(ウチの場合はhttp://www.simazaki.com/)に変更。
store_infoをサイトマップファイルを置くサーバ上のパスに変更。
次にURLの指定ですが、さぼってこれだけにしています。
<url href="http://www.simazaki.com/" />
後は、ウチの場合はディレクトリパスとアクセスログの設定を行いました。
こちらがディレクトリパス。
<directory path="/var/www/html" url="http://www.simazaki.com/" />
この他にユーザ用のディレクトリにもパスを通しています。
こちらがアクセスログ。
<accesslog path="/etc/httpd/logs/access_log" encoding="UTF-8" />
最後に、サイトマップファイルに載っては困るコンテンツをfilterで弾くようにしました。
サーバの適当な所にアップロード。
サーバにアップロードしたのは、上記で変更したconfigファイルと、sitemap_gen.py(サイトマップを生成する Pythonスクリプト)です。
sitemap_gen.py を実行。
上記でconfigファイルとsitemap_gen.pyをアップロードしたディレクトリに移動し、
python sitemap_gen.py --config=example_config.xml
を実行します。
WARNINGが出たりしますが、気にしない…。
Browserで、サイトマップファイルがキチンと見えるか確認。
Google Sitemapで、サイトマップファイルを更新したことを通知。
暫くして、Google Sitemapでエラーが出ていないことを確認します。エラーが無ければ完了です。
設定変更後、なぜかぱったりとアクセスが無くなりました…。
これはこれで良しとしましょう。
この後もサーバへのアクセスが続いたため、3つほど「ドメイン名でDISCARD」設定を追加しました。
| Top
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |