2004年04月05日

Update Pingを受け付けるサーバの実装

Posted by nene2001 at 17:24 / Tag(Edit): / 0 Comments: Post / View / 4 TrackBack / Google Maps このエントリーを含むはてなブックマーク

最近、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」かどうかは知らないんだけど。

Related query words in Google & Yahoo
Related Books from Amazon
Trackback to this entry
TrackBack URL :
Trackbacks
アメリカに行くまでに作るぞ !! (その2)
Excerpt: 参考 ・ここギコ ・NDOWeblog ・NDOWeblog ・NDOWebl...
Weblog: araitatsuya.net
Tracked: 2005年03月05日 21:46
アメリカに行くまでに作るぞ !! (その2)
Excerpt: 私が作りたいものは、例えばgooBlogのトップページみたいなやつで、友人あたり...
Weblog: araitatsuya.net
Tracked: 2005年03月05日 22:07
utf8フラグを落とす
Excerpt: Perl5.8以上。...
Weblog: 勝手Perlリファレンス
Tracked: 2008年03月16日 19:58
更新Pingの一括送信サービスつくった
Excerpt: 以前、Ping○○!というサービスを見つけて嬉々として利用していたのだけれど、メルマガとか有料サービスへの煽りがうっとおしかったりしたので、自前で更新Pi...
Weblog: 技林ブログ
Tracked: 2008年06月26日 09:52
Comments
コメントはありません。
Post a comment












Remember personal info? 
2004年04月
Su Mo Tu We Th Fr Sa
        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  

About Me

Navigation

Search
Google
Web
kokogiko.net
Archives
Recent Entries
Recent Comments
Recent Trackbacks
『共通善は共有してはいけない』に一部解毒され、一部またもやもやした(ここギコ!)
右翼はアイヌや沖縄を包摂する論理を構築すべきではないのか
『共通善は共有してはいけない』に一部解毒され、一部またもやもやした(ここギコ!)
確信犯より無関心・無神経の方が根が深い大問題
"「次世代交通情報を考える」ブロガーミーティング"に参加(チミンモラスイ?)
AMNブロガーミーティング「ユビークリンク/全力案内!」に行ってきました。
Google未オルソ衛星画像にぶった切られた我が母校(ここギコ!)
未オルソ画像が生むジョジョの世界&MSNの航空写真はオルソされている?
AMNブロガーミーティング「ユビークリンク/全力案内!」に行ってきました。(ここギコ!)
あいまいな個人認証の技術ってないんだろうか
ジオメディア忘年会2008に行ってきた(近江商人JINBLOG)
ジオメディア忘年会行ってきました
ジオメディア忘年会 2008 を終えて(Cirius Lab. ブログ)
ジオメディア忘年会行ってきました
ジオメディア忘年会行ってきました(ここギコ!)
ジオメディア忘年会 新年会から始まり東京1、2、関西と続いたジオメディア2008の締めくくり
ジオメディア忘年会行ってきました(ここギコ!)
モーバイルインフォサーチ実験から続く想いの系譜
「Web 2008 Expo」行って来ました(ここギコ!)
コンテキストを検知できないモバイルWebなどあり得ない
Hatena bookmarked
My del.icio.us

Banners

Syndication
Powered by
Get it!!