September 03, 2003

Myblog japan の Ping 受信エラー原因を予想してみるの巻

[ ウェブログに関すること ]

Myblog japan の Ping サーバが安定してきたみたいで、Ping 飛びましたエントリが結構見られるわけですが、

もうそこかしこで「ping飛んだよ!」の声が聞こえてくるよね。 ピングーブームの再来とでも言うべきか(言わない)。 で、やっぱりこの状況になっても原因は定かになっていないのか。 どこかの偉い人がしたり顔で説明してくれると思っていたのに残尿感。

といったエントリを見つけましたので、したり顔で説明してみます。と、いってもあくまで予想です。

# ちなみに僕は偉くはないです。

Myblog japan の Ping サーバは単にウェブログツールからの Ping (XML-RPCリクエスト)を受け付けるだけでなく、Ping を受信したと同時に送信元のサイトへ RSS を取得しに行って、最新のエントリからタイトルを引っ張ってくるという処理をしているようです。

このRSSを取得してタイトルを引っ張ってくる処理は、結構不確定要素が大きくてエラーになりやすいのではないかと思います。

一つは、Ping の XML-RPC リクエストのパラメータには(RSS ではなく) HTML の URL しか入ってこないので、RSS を取得する前にその URL を訪問して RSS の URL を探し出す必要があるのですが、そこで失敗する可能性。MovableType などは親切に HTML の link タグで RSS の URL を示していますが、こういったヒントとなるものが無かったり、或いはテンプレートをいじって link タグを削っていたりした場合に RSS の URL が取得できません。

二つめ、これが多分主な原因だと思うのですが、RSS のパースに失敗する可能性。Perl の XML::Parser なんかもそうですが、実際には well-formed な XML 文書であっても、国際化が念頭におかれていなかったり、機種依存文字に対する処理が弱かったりするパーサーでは、日本語を含んだ RSS は解析に失敗することが多々あります。日本語を含んでいなくても、ツール側の XML エンコーディング処理が不適切だとパースエラーを起こしますし、MovableType は RSS のテンプレートも自分でいじれてしまうので、いじり方によってはパーサーが読めなくなる可能性があります。

他にも細かいポイントが色々ありそうですが、多分この辺だと思います。RSS の取得や解析に失敗した際でも復帰するようエラーハンドリングを行って、見た目に成功したように見せかけることもできますが、それはやっていなかったということなんじゃないかなと。

あくまで勝手な予想なので、的中してるかどうかは分かりません。

Posted by naoya at September 3, 2003 10:09 PM | トラックバック (3)  b_entry.gif
トラックバック [3件]
TrackBack URL: http://mt.bloghackers.net/mt/suck-tbspams.cgi/402
Myblog japanの更新pingでエントリータイトルを
Excerpt: ここにもあるように,Myblog japanのサイトなどでは更新Pingを打つとブロッグ名とタイトルだけでなく最新のエントリー名も表示し...
Weblog: ppBlog ver1.2.2
Tracked: May 6, 2004 12:13 PM
MyBlog.japanへのPingについて
Excerpt: [NDO::Weblog] Myblog japan の Ping 受信エラー原因を予想してみるの巻 Myblog japan の Ping サーバは単にウェブ...
Weblog: moments@life
Tracked: January 29, 2005 01:59 AM
pingサーバでタイトル表示されてない
Excerpt: J.B.Antenna-川崎とかココログPingサーバとか見てると、ウチがなんか...
Weblog: ウハウハ
Tracked: March 15, 2005 11:30 AM
コメント [3件]

ログとか見てみました?
ログにPingタイムアウトエラーがあったら私のトラックバック時のエラーと現象が同じような気がします。

詳しくは
http://alfabeat.ciao.jp/archives/000378.html

[1] Posted by: alfabeat at September 4, 2003 07:22 PM [返信]

こんにちは。

僕のログは 500 read timeout ではないですね。エラーの具体的な内容が空で返ってきています。(あと 500 Can't connect to... (Bad hostname)) なんてのがあるかな。alfabeat さんのものとはちょっと原因が違うみたいですね。

ソースを見るに MT の Trackback や update ping には LWP::UserAgent が使われていますが、PingTimeout は LWP::UserAgent の timeout メソッドに渡す値のようです。ping が失敗した際に HTTP のステータスコードがきっちり返ってる場合は LWP::UserAgent が吐き出したエラーなので、リクエストの送受信そのものに失敗してるということになります。

僕の場合はエラー内容が空です。Update Ping では XML-RPC でエラーメッセージを返却することができるんですが、返却された XML 応答内容にメッセージが含まれていなかったからじゃないからと予想してます。

ま、もうきっちり Ping は通るわけですので、あまり掘り返してもしょうがないですね。w

[2] Posted by: naoya at September 5, 2003 02:31 AM [返信]

For every action there is an equal and opposite government program.

[3] Posted by: Garelik Jane at January 26, 2004 05:18 AM [返信]