当前位置:首页 > SEO > .NET/C# 自动 Ping 百度的方法示例

.NET/C# 自动 Ping 百度的方法示例

使用.NET开发的网站程序,当我们发布文章的时候,我们希望自动通知百度自己的网站有文章发布了,这样就会引起百度的注意,这样对于百度的收录会有很好的效果,下面就讲解怎样自动Ping 百度,通知百度收录。

百度SEO、ping百度服务、快速收录、示例讲解、c#、.NET

什么是Ping服务

ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快速通知给百度、google等搜索引擎,以便搜索引擎及时进行抓取和更新。

Ping服务使用方法

你可以采取手动通知和自动通知两种方式使用ping服务:

手动ping

访问http://ping.baidu.com/ping.html页面,在输入框中输入博客地址或者feed地址,点击“提交博客”按钮即可。

自动ping

如果您的博客程序支持自动ping功能,您只需把百度的Ping服务地址配置到你的Blog发布后台或者客户端程序中,就可以实现自动通知的功能。百度ping服务的地址为:http://ping.baidu.com/ping/RPC2,所以当我们使用Wordpress建立博客的时候,只要把百度的ping服务地址加到通告服务的URL列表中,在“设置”->“撰写”菜单可以找到,如下图所示:
Wordpress 自动ping 百度、google搜索引擎

自动Ping的XML_RPC

发送给百度Ping服务的XML-RPC客户请求需要包含如下元素:

  • RPC端点: http://ping.baidu.com/ping/RPC2
  • 调用方法名: weblogUpdates.extendedPing
  • 参数: (应按照如下所列的相同顺序传送)
    1. 博客名称
    2. 博客首页地址
    3. 新发文章地址
    4. 博客rss地址

以下是百度官方给出的Ping请求包的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
POST /ping/RPC2 HTTP/1.0
User-Agent: request
Host: ping.baidu.com
Content-Type: text/xml
Content-Length: 511
 
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
    <methodName>weblogUpdates.extendedPing</methodName>
    <params>
        <param>
            <value><string>百度的空间</string></value>
        </param>
        <param>
            <value><string>http://hi.baidu.com/baidu/</string></value>
        </param>
        <param>
            <value><string>http://baidu.com/blog/example.html</string></value>
        </param>
        <param>
            <value><string>http://hi.baidu.com/baidu/rss</string></value>
        </param>
    </params>
</methodCall>

ping-service响应举例

  1. ping-service对非POST方法请求返回HTTP_METHOD_NOT_ALLOWED(405)错误代码
  2. 对超大错误包返回HTTP_REQUEST_ENTITY_TOO_LARGE(413)错误代码
  3. 对非“text/xml”请求包返回HTTP_UNSUPPORTED_MEDIA_TYPE(415)错误代码
  4. 其他情况返回HTTP_OK(200)代码

xml-rpc响应http包体为一个xml文档,含有一个int值,0表示推送成功,其他值表示推送失败,目前只有0和1。推送成功时的服务器响应包为如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
HTTP/1.1 200 OK
Date: Mon, 11 May 2009 11:54:53 GMT
Content-Length: 156
Connection: close
Content-Type: text/xml
 
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
    <params>
        <param>
            <value>
                <int>0</int>
            </value>
        </param>
    </params>
</methodResponse>

如果推送失败如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
HTTP/1.1 200 OK
Date: Mon, 11 May 2009 11:54:53 GMT
Content-Length: 156
Connection: close
Content-Type: text/xml
 
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
    <params>
        <param>
            <value>
                <int>1</int>
            </value>
        </param>
    </params>
</methodResponse>

因此如果使用.NET的c#代码来进行自动Ping百度我们的思路就很明白了,就是推送一个和给出标准的XML格式。

1、创建一个推送百度的MethodCall xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/// <summary>
/// 创建 MethodCall xml 来推送给百度的Ping服务。
/// </summary>
/// <param name="methodName"></param>
/// <returns></returns>
public string CreateMethodCallXML(string methodName)
{
	methodCall methodCall = new methodCall();
	IList<param> paramList = new List<param>();
 
	methodCall.methodName = methodName;
 
	//Blog name
	param param = new param();
	value value = new value();
	value.stringValue = "你的博客名称";
	param.value = value;
	paramList.Add(param);
 
	//博客首页地址
	param = new param();
	value = new value();
	value.stringValue = "博客的官网首页url地址";
	param.value = value;
	paramList.Add(param);
 
	//博客文章的地址
	param = new param();
	value = new value();
	value.stringValue = "博客文章的url地址";
	param.value = value;
	paramList.Add(param);
 
	//博客的RSS地址
	param = new param();
	value = new value();
	value.stringValue = "博客的RSS地址";
	param.value = value;
	paramList.Add(param);
 
	methodCall.paramSet = paramList.ToArray();
 
	return SerializeMethodCall(methodCall);
}

methodCall类的代码如下所示,这是一个序列化的对象,用于创建xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
namespace PingBaidu
{
    /// <summary>
    /// Ping baidu.
    /// </summary>
    public partial class methodCall
    {
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("methodName")]
        public string methodName  { get; set;}
 
         /// <remarks/>
        [XmlArrayAttribute("params")] 
        public  param[]  paramSet { get; set;}
    }
 
    [XmlRootAttribute("param")]
    public partial class param
    {
         /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("value")]
        public value value {get; set;}
    }
 
    public partial class value
    {
         /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("string")]
        public string stringValue {get; set;}
    }
}

2、将序列化对象转化为xml字符串推送给百度ping服务

SerializeMethodCall方法如下所示,这是为了将序列化对象转换为xml字符串。

1
2
3
4
5
6
7
8
9
10
11
private string SerializeMethodCall(methodCall methodCall)
{
	StringBuilder xmlBuilder = new StringBuilder();
	using (StringWriter stringWriter = new StringWriter(xmlBuilder, CultureInfo.InvariantCulture))
	{
		XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
		xmlWriter.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\"");
		urlSetSerializer.Serialize(xmlWriter, methodCall);
	}
	return xmlBuilder.ToString();
}

3、推送xml字符串给百度ping服务

通过http请求就xml字符串推送给百度ping服务器,通知百度文章的更新或新加。代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private string PingBaiduRequest(string requestURL, string pingBaiduXMLString)
{
	try
	{
		byte[] postDataBytes = Encoding.UTF8.GetBytes(pingBaiduXMLString);
		HttpWebRequest request = HttpWebRequest.Create(requestURL) as HttpWebRequest;
		request.Accept = "application/json, text/javascript, */*; q=0.01";
		request.ContentType = "application/x-www-form-urlencoded";
		request.Method = "POST";
		request.UserAgent = "request";
		request.ProtocolVersion = new Version("1.0");
		request.ContentLength = postDataBytes.Length;
		request.Timeout = 30000;
 
		using (Stream requestStream = request.GetRequestStream())
		{
			requestStream.Write(postDataBytes, 0, postDataBytes.Length);
		}
 
		using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
		using (Stream responseStream = response.GetResponseStream())
		using (StreamReader reader = new StreamReader(responseStream))
		{
			return reader.ReadToEnd();
		}
	}
	catch (Exception e)
	{
	}
	return null;
}

4、最后综合各个方法对百度进行ping服务通知收录

1
2
3
4
5
6
7
8
9
10
11
/// <summary>
/// Ping 百度
/// </summary>
public string PingBaidu()
{
	string pingBaiduXMLString = CreateMethodCallXML("Ping百度的方法(通常为weblogUpdates.extendedPing)");
	if (string.IsNullOrEmpty(pingBaiduXMLString))
		return null;
	string result=PingBaiduRequest("ping 百度的URL(通常为http://ping.baidu.com/ping/RPC2)", pingBaiduXMLString);
	return result;
}

根据返回的字符串可以判断是否ping百度成功与否。

意思就是.NET/C# 自动 Ping 百度的方法示例,希望可以帮助到需要的朋友,代码都是经过亲自测试可以通过的,只是需要把汉字描述的内容改成自己的地址即可。如有疑问,请给我留言,谢谢阅读。

  • << c#/.NET 验证字符串是否为汉字
  • ASP .NET MVC 4.0 权限管理示例教程 >>
  • 作者:
    除非注明,本文原创:知道91,欢迎转载!转载请以链接形式注明本文地址,谢谢。
    原文链接:http://www.zhidao91.com/donet-ping-baidu-xml-rpc/

    相关文章 近期热评 最新文章

    • 怎样正确选择关键词-做好SEO的第一步
      知道91 - 做SEO的第一步就是正确选择关键词,这要是网站SEO最核心的一步。你可以通过网站统计工具查看哪些关键词给你带来了流量,如果你还没有关键词带来流量,就要继续...
    • 百度如何判断原创文章?教你伪原创
      百度如何判断原创文章?教你伪原创 - 教你如果骗过百度的判断,进行伪原创文章。我们知道,百度判断文章是否原创,关系到一个算法就是文章的事实程度,它会将文章划分为...
    • 你想知道如何把关键字做到百度首页第一吗?
      你想知道如何把关键字做到百度首页第一吗?SEO 最重要的是策略,细节决定成败。但很多排名不好的网站大多没有注意到下面的这些要点,反而老是问为什么我的站在百度为什...
    • 怎样让百度秒收你的网站?
      很多站长肯定会会问,怎样才能通知百度收录我的文章呢?其实百度早已有了ping功能,只要我们适当的方法通知百度,你要相信只要文章质量不是很差,就一定会被百度收录。
    • 原创一定就能获得百度青睐,转载就一定会被降低权重?
      原创一定就能获得百度青睐,转载就一定会被降低权重?本文分析了关于原创和转载之间的关系,讲述了怎样做网站才是搜索引擎青睐的网站。
    • 怎样通过热点事件来普及SEO新思维讲解
      SEO是每一个草根站长必须学会的一门科学,本文讲解了怎样使用热点事件来进行SEO营销推广,开拓你的SEO思维,提高你的SEO水平,能在短时间内提升网站的IP访问量。
    • 使用微信JDK实现微信接口签名验证
      要使用微信的接口必须在绑定的域名下测试;签名必须先向微信请求到access_token,然后用access_token再去请求jsapi_ticket,最后用jsapi_ticket和相关的参数按照ASCII码...
    • oracle数据库相关操作注意事项
      修改Oracle SGA(共享内存) 很多网站说修改Oracle的内存通过命令 如果你这么做了,那么恭喜你,你的Oracle数据库无法启动了。如果你已经这么做了,恢复Oracle启动的方...
    • oracle数据库相关操作注意事项
      修改Oracle SGA(共享内存) 很多网站说修改Oracle的内存通过命令 如果你这么做了,那么恭喜你,你的Oracle数据库无法启动了。如果你已经这么做了,恢复Oracle启动的方...
    • 使用微信JDK实现微信接口签名验证
      要使用微信的接口必须在绑定的域名下测试;签名必须先向微信请求到access_token,然后用access_token再去请求jsapi_ticket,最后用jsapi_ticket和相关的参数按照ASCII码...
    • ABP开发指南系列教程(2) – 多层架构...
      为了减少复杂性和提高代码的可重用性,采用分层架构是一种被广泛接受的技术。为了实现分层的体系结构,ABP遵循DDD(领域驱动设计)的原则,将工程分为四个层: 展现层(...
    • ABP开发指南系列教程(1) – 入...
      ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。 ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WE...
    • Windows下 JIRA + Agile + Mysql 破解...
      本文讲述了Windows下 JIRA + Agile + Mysql 破解安装示例教程
    • c#类的构造函数继承关系示例剖析
      本文通过示例代码讲解了c#子类的构造函数与父类的关系,子类怎样集成父类的构造函数的。