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; # 変更後