NucleusでのPingエラー関連の情報を探していたら、更新pingその後 – ぷちパワ/w.ZeRoというサイトで、対処方法を見つけました。
なんでも原因は、Nucleusからのping時のxmlに、<![CDATAが含まれることらしい。これは、Nucleusの3.22に含まれるxmlrpc.inc.phpの問題で、オリジナルのxmlrpc.incには含まれていないそうな。Nucleusで何か問題があったのかね。
上記サイトでは、最新版のxmlrpc.incファイルを入手して修正する方法を紹介していますが、それはちょっと怖いので、Nucleus 3.22に含まれるxmlrpc.inc.phpファイルを修正することにします。
xmlrpc.inc.phpとNP_Sendpingの修正方法
/nucleus/libs/xmlrpc.inc.php
の1665行目付近
class xmlrpcval
{
var $me=array();
var $mytype=0;
function xmlrpcval($val=-1, $type='')
{
global $xmlrpcTypes;
$this->me=array();
$this->mytype=0;
if ($val!=-1 || !is_int($val) || $type!='')
{
を
class xmlrpcval
{
var $me=array();
var $mytype=0;
var $mode=0; //add by SakuraCandle
// function xmlrpcval($val=-1, $type='')
function xmlrpcval($val=-1, $type='',$mode=0) // change by SakuraCandle
{
global $xmlrpcTypes;
$this->me=array();
$this->mytype=0;
$this->mode = $mode; // add by SakuraCandle
if ($val!=-1 || !is_int($val) || $type!='')
{
に変更。
1834行目
case $xmlrpcString:
// G. Giunta 2005/2/13: do NOT use htmlentities, since
// it will produce named html entities, which are invalid xml
// $rs.="<${typ}>" . xmlrpc_encode_entitites($val). "${typ}>";
// $rs.="<${typ}>" . htmlentities($val). "${typ}>";
// N. Leenheer 2005/6/30: Use CDATA instead...
$rs.="<${typ}><![CDATA[" . mb_convert_encoding($val, $xmlrpc_defencoding, _CHARSET). "]]>${typ}>";
break;
を
case $xmlrpcString:
// G. Giunta 2005/2/13: do NOT use htmlentities, since
// it will produce named html entities, which are invalid xml
// $rs.="<${typ}>" . xmlrpc_encode_entitites($val). "${typ}>";
// $rs.="<${typ}>" . htmlentities($val). "${typ}>";
// N. Leenheer 2005/6/30: Use CDATA instead...
// $rs.="<${typ}><![CDATA[" . mb_convert_encoding($val, $xmlrpc_defencoding, _CHARSET). "]]>${typ}>";
// break;
if (!$this->mode){ //change by SakuraCandle
$rs.="<${typ}><![CDATA[" . mb_convert_encoding($val, $xmlrpc_defencoding, _CHARSET). "]]>${typ}>";
} else {
$rs.="<${typ}>".mb_convert_encoding($val, $xmlrpc_defencoding, _CHARSET). "${typ}>";
}
break; // change end
へ。
NP_SendPing 0.7もこれにあわせて修正します。
83行目
$ping_info = new xmlrpcmsg(
'weblogUpdates.ping',
array(
new xmlrpcval($name, 'string'),
new xmlrpcval($updateurl, 'string')
)
);
を
$ping_info = new xmlrpcmsg(
'weblogUpdates.ping',
array(
// new xmlrpcval($name, 'string'),
// new xmlrpcval($updateurl, 'string')
new xmlrpcval($name, 'string',1),
new xmlrpcval($updateurl, 'string',1)
)
);
に変更。
早速pingしてみると、
[juntwo] Ping Message:http://www.blogpeople.net/servlet/weblogUpdates - Results:Thanks for the ping.
[juntwo] Ping Message:http://ping.myblog.jp/ - Results:Thanks for the ping.
おぉ、成功したよ。これで様子を見よう。
gooブログ検索へのping
どうも、gooブログの場合、linkタグでのrssファイルへのアドレス指定は、サイトアドレスから指定しないとだめなようです。
もし、
<link rel=”alternate” type=”application/rss+xml” title=”RSS” href=”xml-rss2.php” />
となっていたら、
<link rel=”alternate” type=”application/rss+xml” title=”RSS” href=”<%sitevar(url)%>xml-rss2.php” />
のように変更してください。
これでうちは、gooブログ検索にタイトルが出てくるようになりました。
コメント
Nucleusで更新pingを送る
blogに新しい記事を投稿したときに、記事を収集している場所に「更新したから見てね」という合図を送るのが、更新ping
国内でもこんなサイトはたくさんあって、さまざまなblogが更新されたかチェックしてます…
NP_Sendping で正常にPINGが送れない場合の対処方法
NP_SendpingはNucleusに付属しているxmlrpcライブラリを使用してPingを送信していますが、それをそのまま利用するとPingを受け付けてくれない場合が多くあります。
解決策としては二つ方法があります。それを…
googleにPing送信。
このブログでは福ろぐ様のNP_Sendpingを利用させて頂いているんですが、
googleにPing送信できることを知ったので、設定してみたところ…
Ping Message:http://blogsearch.google.co.jp/ping/RPC2 – Results:The si…