在我的前一篇文章Ping Service--你的博客“Ping”了吗? 中,我介绍了Ping Service技术的一些情况,然后我提到我目前使用的虚拟主机不支持发送Ping命令的功能,这使我决定自己写一个发送Ping命令的桌面程序。
Ping Service的客户端请求目前有两个接口:weblogUpdates.ping 和 weblogUpdates.extendedPing,后者兼容前者。大部分的Ping Service服务器都同时支持这两个接口,但对这两个版本的ping命令通常都按相同方式处理,也就是说都按weblogUpdates.ping方式处理。考虑到今后的发展,我决定在程序中只使用weblogUpdates.extendedPing接口。
weblogUpdates.extendedPing接口的XML RPC请求定义如下:
RPC端点:
就是提供Ping Service的服务器地址,如:http://rpc.weblogs.com/RPC2
调用方法名:
weblogUpdates.extendedPing
参数: (按以下顺序发送)
博客名称
字符串,最大1024个字符。如:“Tiray软件博客”
博客网站地址
字符串,最大255个字符。 如:“http://www.tiray.net”
博客网站的订阅地址
字符串,最大255个字符。如:“http://www.tiray.net/syndication.axd”
需要检查更新的页面URL
字符串,最大255个字符。 如“http://www.tiray.net/default.aspx”
博客标签
可选,字符串,最大1024个字符。多个标签之间以“|" 分隔。如:“软件开发|.net|c#”
weblogUpdates.extendedPing接口的XML RPC响应包括三个参数:
flerror
布尔型,如果有错误则为1
message
字符串,如果发送请求成功,通常返回的是“Thanks for the ping.”,如果flerror为1,则返回错误信息。
legal
字符串,Ping Service服务提供者的申明,通常为空。weblog.com的legal值是:“You agree that use of the Weblogs.com ping service is governed by the Terms of Use found at www.weblogs.com.”
关于Ping Service客户端的详细说明,请浏览http://www.weblogs.com/api.html,或者可以去http://www.google.com/intl/zh-CN/help/blogsearch/pinging_API.html看一看Google的Ping Service API说明。
下面来看看在我的程序中是如何实现发送Ping命令的:
private void Ping(string url)
{
try
{
Thread.Sleep(500);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "text/xml";
request.Timeout = 3000;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
AddXmlToRequest(request);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
XmlDocument doc = new XmlDocument();
doc.Load(response.GetResponseStream());
......
}
}
catch (Exception e)
{
......
}
}
/// <summary>
/// 构造Ping Service的 RPC-XML 请求.
/// </summary>
private void AddXmlToRequest(HttpWebRequest request)
{
Stream stream = (Stream)request.GetRequestStream();
using (XmlTextWriter writer = new XmlTextWriter(stream, Encoding.ASCII))
{
writer.WriteStartDocument();
writer.WriteStartElement("methodCall");
writer.WriteElementString("methodName", "weblogUpdates.extendedPing");
writer.WriteStartElement("params");
writer.WriteStartElement("param");
writer.WriteElementString("value",tb_BlogName.Text.Trim());
writer.WriteEndElement();
writer.WriteStartElement("param");
writer.WriteElementString("value", tb_BlogUrl.Text.Trim());
writer.WriteEndElement();
writer.WriteStartElement("param");
writer.WriteElementString("value", tb_PageUrl.Text.Trim());
writer.WriteEndElement();
writer.WriteStartElement("param");
writer.WriteElementString("value", tb_FeedUrl.Text.Trim());
writer.WriteEndElement();
writer.WriteStartElement("param");
writer.WriteElementString("value", tb_Tags.Text.Trim());
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
}
}
好了,现在我有了一个可以在Windows桌面环境下运行的发送Ping命令的工具了,虽然麻烦一点,每次更新博客之后都要运行这个程序发送Ping命令,但好处是比较直观,想发就发。最终的程序界面如下所示,我在右边列出了Tiray软件博客的最新15条更新,算是帮自己宣传一下吧,呵呵!
如果你对这个程序感兴趣,可以到以下地址下载,注意我是用C#写的,如果你的电脑没装那个有10多M的讨厌的.NET Framework 2.0话......
下载地址:
http://www.tiray.net/page/Tiray-Blog-Ping.aspx
如果你想进一步了解XML RPC技术,可以去http://www.xml-rpc.net/看看,这是一个开源的C#项目,你甚至可以用它来实现一个Ping Service服务器。