這篇文章繼續說說這個ping服務的問題,首先歸納和總結以下資料:
【1】手動Ping服務地址:
Baidu(百度)地址: http://ping.baidu.com/ping.html
Google(谷歌)地址:http://blogsearch.google.com/ping
Feedsky(飛遞)地址:http://ping.feedsky.com/ping.html
Qihoo(奇虎)地址:http://so.blog.qihoo.com/pingblog.html
IASK(愛問)地址:http://blog.iask.com/ping.php
【2】自動Ping 服務應用編程接口(API):
Google(谷歌):http://blogsearch.google.com/ping/RPC2
Feedburner:http://ping.feedburner.com
Feedsky(飛遞):http://www.feedsky.com/api/RPC2
Feedster:http://api.feedster.com/ping.php
IASK(愛問):http://blog.iask.com/RPC2
Qihoo(奇虎):http://ping.blog.qikoo.com/rpc2.php
鮮果:http://www.xianguo.com/xmlrpc/ping.php
抓蝦:http://www.zhuaxia.com/rpc/server.php
Blogdigger:http://www.blogdigger.com/RPC2
blo.gs:http://ping.blo.gs/
ICEROCKEThttp://rpc.icerocket.com:10080/
Moreover:http://api.moreover.com/RPC2
Newsgator:http://rpc.newsgator.com/
Syndic8:http://www.syndic8.com/xmlrpc.php
Weblogs:http://rpc.weblogs.com/RPC2
Weblogalot:http://ping.weblogalot.com/rpc.php
上面提供的,包括前文說的ping服務,有些我試了好用 有些不好用,要用那些那個看情況而定。這個自己根據網絡環境等自行測試下,適合的就是最好的,沒有推薦。
好吧,說了那麼多上面的,下面的是重點,也就是如何實現ping服務,wordpress是可以通過後台實現的,其他的那?比如沒有ping服務功能的博客程序什麼的怎麼辦?據紛纭所知道的,博客系統中好用的WORDPRESS自帶PING功能,毋庸置疑,ASP類的Z-BLOG貌似可以通過插件實現這個功能。其他的博客系統?其他的?沒有其他,我的選擇唯有wordpress,沒有其他,只要唯一。呵呵,不開玩笑了。下面說下php來實現ping的服務的問題,這個針對其他不支持ping功能的網站或者系統之類的,大家可以自行開發個接口實現。比如DEDECMS的二次開發就可以,紛纭最近在研究這個項目。
需要說的是百度的ping和谷歌的提交格式是不同的,下面簡單的說說,分別給百度和谷歌做個介紹,首先介紹的是谷歌(為啥不是百度,OK?別那麼糾結,會有的……):
【*1】谷歌的ping服務的php的實現
關於RPC的詳細介紹可以移步維基百科,谷歌ping服務的標准:
RPC端點: http://blogsearch.google.com/ping/RPC2
調用方法名: weblogUpdates.extendedPing
參數: (應按照如下所列的相同順序傳送)
站點名
站點URL
需要檢查更新的頁面URL
相應的RSS、RDF或Atom種子的URL
可選:頁面內容的分類名稱(或標簽)。您可以指定多個值,之間用'|'字符進行分隔。
首先要寫一個CURL的函數,來POST谷歌的RPC端點:
復制代碼 代碼如下:
function postUrl($url, $postvar) {
$ch = curl_init();
$headers = array(
"POST ".$url." HTTP/1.0″,
"Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Content-length: ".strlen($postvar)
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvar);
$res = curl_exec ($ch);
curl_close ($ch);
return $res;
}
主要的curl寫好了之後,剩下就是要根據谷歌的XML-RPC標准組裝發送的數據了,詳細的請求例子可以參考官方案例,點這裡。
例如我的代碼是這樣寫的:
復制代碼 代碼如下:
$googleXML = <<<END
<?xml version="1.0″?>
<methodCall>
<methodName>weblogUpdates.extendedPing</methodName>
<params>
<param>
<value>Ping服務的php實現方法,讓網站快速被收錄</value>
</param>
<param>
<value>http://s.jb51.net</value>
</param>
<param>
<value>http://s.jb51.net/archives/47.html</value>
</param>
<param>
<value>http://s.jb51.net/feed</value>
</param>
</params>
</methodCall>
END;
$res = postUrl(‘http://blogsearch.google.com/ping/RPC2′, $googleXML);
//下面是返回成功與否的判斷(根據谷歌ping的接口說明)
if (strpos($res, "<boolean>0</boolean>"))
echo "PING成功";
else
echo "PING失敗";
OK,這個就可以簡單的實現谷歌的PING服務了。可以根據代碼自行修改實現這個功能。
【*2】百度的ping服務的php的實現(這個標題真DT)
百度的ping服務xml代碼是跟谷歌不同的,百度總是會有自己的特點:
介紹下百度博客ping服務,百度博客Ping服務的詳細介紹,請移步:http://www.baidu.com/search/blogsearch_help.html#n7。
百度的ping服務也是基於XML-RPC標准協議,但是與谷歌ping服務不同的是百度的ping發送的xml格式不同,我們需要使用string節點包裹內容。
例如:
復制代碼 代碼如下:
<?xml version="1.0″ encoding="UTF-8″?>
<methodCall>
<methodName>weblogUpdates.extendedPing</methodName>
<params>
<param>
<value><string>Ping服務的php實現方法,讓網站快速被收錄</string></value>
</param>
<param>
<value><string>http://s.jb51.net/</string></value>
</param>
<param>
<value><string>http://s.jb51.net/archives/47.html</string></value>
</param>
<param>
<value><string>http://s.jb51.net/feed</string></value>
</param>
</params>
</methodCall>
根據上面提到的谷歌接口,我們只要改變一下提交的xml內容即可,當然百度ping服務返回的判斷也是跟谷歌的不同,也可以做相應的修改,
下面是php的代碼:
復制代碼 代碼如下:
$baiduXML = <<<EOT
<?xml version="1.0″ encoding="UTF-8″?>
<methodCall>
<methodName>weblogUpdates.extendedPing</methodName>
<params>
<param><value><string>Ping服務的php實現方法,讓網站快速被收錄</string></value></param>
<param><value><string>http://s.jb51.net</string></value></param>
<param><value><string>http://s.jb51.net/archives/47.html</string></value></param>
<param><value><string>http://s.jb51.net/feed</string></value></param>
</params>
</methodCall>
EOT;
$res = postUrl(‘http://ping.baidu.com/ping/RPC2′, $baiduXML);
//下面是返回成功與否的判斷(根據百度ping的接口說明)
if (strpos($res, "<int>0</int>"))
echo "PING成功";
else
echo "PING失敗";
上面的代碼就可以實現php的ping服務了。好吧,下面再給各位看管提供一個百度的ping服務代碼,沒辦法誰讓他那麼獨特那?
復制代碼 代碼如下:
<?php
function postUrl($url, $postvar)
{
$ch = curl_init();
$headers = array(
"POST ".$url." HTTP/1.0″,
"Content-type: text/xml; charset=\"gb2312\"",
"Accept: text/xml",
"Content-length: ".strlen($postvar)
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvar);
$res = curl_exec ($ch);
curl_close ($ch);
return $res;
}
$baiduXML = "<?xml version=\"1.0\" encoding=\"gb2312\"?>
<methodCall>
<methodName>weblogUpdates.extendedPing</methodName>
<params>
<param><value><string></string></value></param>
<param><value><string>http://www.jb51.net</string></value></param>
<param><value><string>http://www.jb51.net/a/15222.html</string></value></param>
<param><value><string>http://www.jb51.net</string></value></param>
</params>
</methodCall>";
$res = postUrl(‘http://ping.baidu.com/ping/RPC2′, $baiduXML);
if ( strpos($res, "<int>0</int>") )
{
echo "PING成功";
}
else
{
echo "PING失敗";
}
?>
此文很DT的讓我浪費了N個草稿才寫完,然後紛纭就發現需要搞個CODE的插件給WP裝備上了。代碼的問題真的很糾結,還有就是國人的WP主題沒有支持分頁的,這個讓我很DT,說了半天,DT是啥?不知道……