WORDPRESS百度PING服务不兼容及解决方法
ping是基于XML_RPC标准协议的更新通告服务,是一种用于博客在内容更新后通知百度博客搜索及时进行抓取、更新的方式。百度博客搜索在成功接受到ping以后,会立刻进行抓取并更新。使用ping服务,可以让百度博客搜索在第一时间抓取到您博客上的新内容。 以上是百度官方的介绍。从意思上理解,这个ping服务应该不错的呀,可以及时通知百度我的网站更新了,告诉它赶紧过来爬网吧。而且,这个ping 服务貌似和Google等的API接口貌似也是兼容的,都是调用weblogUpdates.extendedPing方法,而且采用的参数貌似也是一样 的,从而给了人们一种错觉。 所以有的网友就发博文了,使用wordpress程序的博客只要在通告服务处填上”http://ping.baidu.com/ping/RPC2″就可以通知百度了,貌似很方便的样子。 但是实际上并非如此。我今天发现,百度的ping服务和Google等的ping是不兼容的。虽然都是调用的 weblogUpdates.extendedPing方 法,但是在参数方面有一些细微的差别:
WordPress默认的ping服务是3个参数,即网站 名称,首页地址,feed地址;
而百度ping呢,则是4个参数,即网站名称,首页地址,新网页的地址,feed地址。 正是这一个参数的差别,我们就不能 使用wordpress自带的ping服务了。
实现方法,在functions.php中加入如下代码:
function ping_baidu_on_newpost($post_id) { $baiduXML = ' weblogUpdates.extendedPing' . get_option('blogname') . '' . home_url() . '' . get_permalink($post_id) . ' ' . get_feed_link() . ' '; $wp_http_obj = new WP_Http(); noff_log($baiduXML); $return = $wp_http_obj->post('http://ping.baidu.com/ping/RPC2', array('body' => $baiduXML, 'headers' => array('Content-Type' => 'text/xml'))); if(isset($return['body'])){ if(strstr($return['body'], '0')){ noff_log('ping baidu succeeded!'); } else{ noff_log('ping baidu failed!'); } }else{ noff_log('ping baidu failed!'); } } function noff_on_newpost($post_id) { noff_log('start to ping baidu'); ping_baidu_on_newpost($post_id); } add_action('publish_post', 'noff_on_newpost');
近期评论