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
考えるべきは沖縄米軍基地問題の本質!(ようこそイサオプロダクトワールドへisao-pw)
普天間基地移設が軍事的に見て県外移設はあり得ないとかの議論について
馬鹿信者の言動は確かにJSF氏に責任はないのだけれど、良識に訴えたい(ここギコ!)
京都外国人排斥カウンターデモの「反日上等」「日の丸ウンコ」とかについて
馬鹿信者の言動は確かにJSF氏に責任はないのだけれど、良識に訴えたい(ここギコ!)
三度、在特会カウンターデモについて
馬鹿信者の言動は確かにJSF氏に責任はないのだけれど、良識に訴えたい(ここギコ!)
普天間基地移設が軍事的に見て県外移設はあり得ないとかの議論について
馬鹿信者の言動は確かにJSF氏に責任はないのだけれど、良識に訴えたい(ここギコ!)
今回のデモで「反日」「日の丸XXX」が拙いことは判りました が、であってもまだいくつか
ここは酷い誰得教育ですね(障害報告@webry)
普天間基地移設が軍事的に見て県外移設はあり得ないとかの議論について
ここは酷いポトシ銀山ですね(障害報告@webry)
GPS高度、ジオイド高、標高の関係
ここは酷いUFO調査部門ですね(障害報告@webry)
地図サービスによって行政界の描画が違う、という話
GeoHexの本当にすごいところ(ここギコ!)
日本国内の位置情報ゲーム用へクス仕様を考えました
位置ゲー、『三方よし』の理想のマネタイズパターンが実現 - コロプラとJR九州がタイアップ(ここギコ!)
ケータイ位置情報ゲームにおいて、あるべき理想のマネタイズパターン
Hatena bookmarked
My Hatebu

Banners

Syndication
Powered by
Get it!!