2004年04月05日
Update Pingを受け付けるサーバの実装
最近、BlogのUpdate Pingを受け付けるサーバを作ろうとしてます(ここギコ以外のところで公開するつもりです。というか仕(ry )。
基礎が公開されてるのがあれば使っちゃえって感じで、NDO::WeblogさんところのWeblogs.Com changes.xml を吐いたりする Ping サーバの Perl 実装を参考にしているのですが、そのままでは動かないところがあったので、色々現在までさわって判っている範囲で調整するところを書きます。
1.XMLRPC::ParserへのEUC-JP/Shift_JISマッピングの追加
XMLRPC::Lite等XML系APIが中で使っているXML::Parserですが、デフォルトのインストールではEUC-JP、Shift_JIS等の日本語系キャラクターセットのマッピングファイルが入っていません。
そのため、Update PingがUTF-8で送られていれば対応できるのですが、EUC-JPやShift_JISでPingされるといきなり対応できません(Ping側のEncodingでちゃんとEUC-JP等と記述されていても駄目です。)
EUC-JP、Shift_JISで書かれたXMLを処理するには、Perlの小技のPerl XMLでencoding='Shift_JIS'や'euc-jp'を使うの記事に従って、マッピングファイルを入手する必要があります。
この記事の存在は知っていたんだけど、2000年の記事なので、まさか今にいたるまで同梱されてないって事はないだろう…と勝手に思ってて対応に遅れてしまいました。
2.Perl5.8.0以降の場合、XML::Parserの処理を通った文字列にUTF8フラグがつく
元記事で
>(Perl 5.8.0 を使っていると XML::RSS がパースした結果が文字化けしてしまい復元不可能と
>なってしまいはまりました。原因不明。しょうがないので 5.6.0 を使ってます)
と書かれている原因がこれです(だと思います)。
Perl5.8.0以降、UTF-8で処理された文字列にはUTF-8フラグと言うものが付き、明示的にこのフラグを落とさなければJcode等の既存の文字コード処理モジュールで処理できないので、その対応をする必要があります。
UTF-8フラグを落とす関数がutf8::encodeという関数なのですが、戻り値を返すんじゃなくて引数の中身のフラグを直接外すので私的にはイマイチ使いづらく、以下のような関数を作ってそれで対応しました。
sub _rmutf8
{
my $val = shift;
utf8::encode($val);
return $val;
}
これを追加後、Jcodeに引数を与えているような辺りで軒並み
例: Jcode->new(_rmutf8($args{name}))->euc
とでもしてやれば、文字化けしなくなります。
3.HTML::RSSAutodiscoveryはRSSへのリンク「だけ」を返すのではない
RSSを見つける便利なモジュールとしてHTML::RSSAutodiscoveryを使われていますが、このモジュール、名前と違ってRSSへのリンクだけを返すのではないようです。
HTMLヘッダ内でRSSがある「っぽい」META・LINKタグの内容を軒並み拾って配列リファレンスで返すので、必ずしも配列の最初がRSSへのリンクになるわけではなく、私のサイトの場合はCSSへのリンクが拾われてきました。
よって、RSSを拾うためには、
my $html = HTML::RSSAutodiscovery->new;
if ( my $result = $html->parse ( $url ) ) {
$rss_url = $result->[0]->{href};
}
となっているのを、
my $html = HTML::RSSAutodiscovery->new;
if ( my $result = $html->parse ( $url ) ) {
foreach (@$result)
{
if ($_->{'title'} eq "RSS")
{
$rss_url = $_->{href};
last;
}
}
}
と変えてやる必要があります。
もっとも、そんなにたくさんのBlogサイトを調査したわけじゃないので、RSSファイルへのリンクのTitleが全部「RSS」かどうかは知らないんだけど。
Excerpt: 参考 ・ここギコ ・NDOWeblog ・NDOWeblog ・NDOWebl...
Weblog: araitatsuya.net
Tracked: 2005年03月05日 21:46
Excerpt: 私が作りたいものは、例えばgooBlogのトップページみたいなやつで、友人あたり...
Weblog: araitatsuya.net
Tracked: 2005年03月05日 22:07
Excerpt: Perl5.8以上。...
Weblog: 勝手Perlリファレンス
Tracked: 2008年03月16日 19:58
Excerpt: 以前、Ping○○!というサービスを見つけて嬉々として利用していたのだけれど、メルマガとか有料サービスへの煽りがうっとおしかったりしたので、自前で更新Pi...
Weblog: 技林ブログ
Tracked: 2008年06月26日 09:52
![[ここギコ!]](http://kokogiko.net/logo.png)



・滝川クリステル?(DatingGenious)
・コンピュータは2進法が効率的でとかいう話(XAGary)
・コンピュータは2進法が効率的でとかいう話(とおりすがり)
・ジオメディア忘年会行ってきました(宋さんへ:kokogiko)
・コンピュータは2進法が効率的でとかいう話(kokogiko)
・コンピュータは2進法が効率的でとかいう話(まぐろ)
・コンピュータは2進法が効率的でとかいう話(名無し)
・コンピュータは2進法が効率的でとかいう話(dokasen)
・コンピュータは2進法が効率的でとかいう話(dokasen)