NP_OpenID対応「ナイショコメント」機能付きNP_EzComment2 コアのentity.phpがなんかおかしい件
Jul 13
Nucleus3.31sp1同梱のNP_Ping
これが中途半端で改造中という話は、以前に書いたことがあると思います
で、NP_PingにNP_SendPingの機能(「ping送信先を複数追加」「更新したブログのURL通知」)を追加して、さらにAsyncHTTPで、複数(ほぼ)同時送信に対応したNP_PingJPの完成形が出来たので、テストを兼ねて書き込み
AsyncHTTPは、一つずつの返事を待たずにずんずん送っちゃうから、あっという間に送信完了します
昨日の記事の時は送信データが文字化けしてて、あちこちのサーバでエラーになってましたが、自鯖にpingサーバ立ててテストした結果、おそらくOKというものが出来たのでテストを兼ねて投稿
「event_JustPosted」のタイミングでの動作実験はまだですが、バックグラウンドでの送信実験もクリアしました
ただし、これはバグなのか仕様なのかわかりませんが、コアのコードのせいで、過去の日付の投稿だとping送信しません
というか、「今すぐ追加」以外のラジオボタンをチェックしたときにはping送信しない(event_SendPingを呼び出さない)つくりになっています(それなのに「新しいカテゴリ」で投稿すると、未来の記事だろうがドラフトだろうが送信するのでバグだとは思いますが)
それから、アイテムの編集をした時も送信しません
ドラフト状態のアイテムを通常記事に変更した時のみ、送信されます
こっちもコアの仕様です
ということで、実はもうしばらくNP_SendPingを使っておいた方がいいんじゃないかと思ってる今日この頃
コアの方改造(というかバグフィックス)するなら、いっそevent_SendPingにアイテムIDも渡すようにした方が、weblogUpdates.extendedPingの時に個別のアイテムのURIも送れて便利だなぁと思ったけど、URIにカテゴリも含めたい人もいるからこれは微妙か…
なにやらよく解らない結果に…
続けて何度か送信した結果(「送信中」のページをリロードすれば何度でも送信できます。これもバグっぽい)
最初の送信
----------------------------------------------
Ping 送信中 Ping-o-matic (要登録):
Ping 送信中 weblogs.com:
Ping 送信中 Technorati:
Ping 送信中 Blogrolling.com:
Ping 送信中 Google Japan:
Ping 送信中 Yahoo! Japan:
Ping 送信中 Goo:
Ping 送信中 ask:
Ping 送信中 Pingoo! (要登録):
Ping-o-matic (要登録) : Unknown Error: HTTP Error: [408] (http://rpc.pingomatic.com/) Request Time-out: -1,
weblogs.com : 成功 : Thanks for the ping.
Technorati : 成功 : Thanks for the ping
Blogrolling.com : 成功 : We have checked http://shizuki.kinezumi.net/ and found it has updated and has been added to the change list. [0.0879 Seconds]
Google Japan : 成功 : Thanks for the ping.
Yahoo! Japan : Unknown Error: HTTP Error: [] (http://api.my.yahoo.co.jp/RPC2) : -1,
Goo : 成功 : Thanks for the ping.
ask : エラー : Invalid return payload: enable debugging to examine incoming payload (XML error at line 1, check URL)
Pingoo! (要登録) : 成功 : Thanks for the ping.
------------------------------------------------
ということで、「Ping-o-matic」「Yahoo! Japan」「ask」以外はOK
Ping-o-maticは2回目で成功
Yahoo!は5回目で成功
askも5回目で成功してるんだけれども、戻ってきたXMLの頭に余分なものが付いてて、これがパースエラーを引き起こしてて「XML error at line 1」らしい(戻ってきたXML捕まえて表示してみたらxml宣言の前になぞの数字が付いてました)
ということで、これはこちらで対応するべき事ではないのでaskに連絡しときます
この実験結果から思ったこと
サーバからの戻り値を調べてflerrorが0になるまで送り続けろって事?

5 Responses to “ NP_PingJPのテストを兼ねて ”

  1. 藤咲 [OpenID] Says:
    >実はもうしばらくNP_SendPingを使っておいた方がいいんじゃないか
    ところがNP_SendPingは3.3SP1になってからPing送信ができなくなっていて(テストしたところブログ名が日本語だとダメ)、どっちにしてもコアに手を入れないといけないのです…。
  2. 藤咲 [OpenID] Says:
    大分成功してるんですが、現在はこんな感じです。
    Warning: stream_socket_client() [function.stream-socket-client]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /nucleus/plugins/sharedlibs/cles/AsyncHTTP.php on line 156

    Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to :80 (Unknown error) in /nucleus/plugins/sharedlibs/cles/AsyncHTTP.php on line 156
    Technorati : 成功 : Thanks for the ping
    Google Japan : 成功 : Thanks for the ping.
    Yahoo! Japan : 成功 : OK
    Goo : Unknown Error: HTTP Error: [403] (http://blog.goo.ne.jp/XMLRPC) Forbidden: -1,
    ask : エラー : Invalid return payload: enable debugging to examine incoming payload (XML error at line 1, check URL)
    Pingoo! (要登録) : 成功 : Thanks for the ping.
    http://www.accelanavi.com : エラー : Invalid return payload: enable debugging to examine incoming payload (XML error: Invalid document end at line 2, column 1)
    : Unknown Error: Connection Failed 165: -1,
  3. shizuki Says:
    >NP_SendPingは3.3SP1になってからPing送信ができなくなっていて(テストしたところブログ名が日本語だとダメ)
    この件、NP_PingJPでも同様の現象を確認しました
    で解決策は、
    if (!class_exists(xmlrpcmsg)) include($DIR_LIBS . "xmlrpc.inc.php");
    の次の行に
    if ($GLOBALS['xmlrpc_internalencoding'] != 'UTF-8') {
    $this->xmlrpc_internalencoding_org = $GLOBALS['xmlrpc_internalencoding'];
    $GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';
    }
    と追加して、sendPing($pingurls)メソッドの最後に
    if ($GLOBALS['xmlrpc_internalencoding'] != $this->xmlrpc_internalencoding_org) {
    $GLOBALS['xmlrpc_internalencoding'] = $this->xmlrpc_internalencoding_org;
    }
    を追加すると、多分大丈夫だと思います
    以前のNucleusだと、xmlrpc.inc.phpに手を入れてあって、
    $GLOBALS['xmlrpc_internalencoding'] = _CHARSET;
    とか書いてあったんですが、今回はこれだとEUCの場合にエラーが出るので対処療法的に回避してます

    で、エラーメッセージの件ですが、最初のエラーはアドレスの名前解決に失敗してるっぽいので、何回か送信すると大丈夫かもしれません
    askは記事に書いたとおり
    accelanaviもエラーメッセージ読む限り、「レスポンスが2行目の1文字目で途切れちゃっててパース出来ねぇよ!」ってことなので、おそらく同様かと思われます
    CVSの最新版の440行目あたりのコメントアウトを外すと、レスポンスが画面に表示されるので、なんと表示されるか確認してみてください
    予想では、向こうのスクリプトのエラーメッセージが表示されると思います
    この場合、こちらでは対応のしようが無いので、直接サーバ側に問い合わせてもらう事になると思います(毎回このエラーだとすると、ここにping送ってる人はみんな困ってるんじゃないかなぁ…)
  4. 藤咲 [OpenID] Says:
    NP_SendPingの修正、その方法でPingが打てるようになりました!
    ただ、一カ所に設定するだけでかなりレスポンスが落ちるので、複数送信時にはPingJPの方がいいですねぇ。
    ちなみに2回目の送信テストもGoo,.accelanaviともに同じエラーでした。
  5. shizuki Says:
    accelanaviはPEARがWarning吐いてるんで、運営にメール投げました
    Gooの方は…
    ごめんなさい、タイミングとしか…
    403なんで、サーバの負荷が上がった瞬間だったとか、そんな感じじゃないかと思います

Leave a Reply

OpenID を使ってログインすることができます。
Identity URL:



このエントリにトラックバックはありません

この記事のトラックバックURL
http://shizuki.kinezumi.net/item_652.trackback(右クリックで'ショートカットの保存')
トラックバックするにはこの記事へのリンクhttp://shizuki.kinezumi.net/item_652.htmlが必要です