利用飞信api和rss对园友博客监控与提醒

好久没写过代码了,最近的工作和代码几乎没有接触,全是手工操作:安装系统,安装软件,看日志文件,周而复始。刚好发现一些有意思的api,拿来做一个小程序与大家分享,同时练练手。

主要功能:

程序很小,主要功能是监控博客园(rss的内容和博客园一致也适用)用户的博客,如果有最新的文章则及时发短信提醒。先贴一张图,让大家有一个大致的了解:

(因为我是英文系统,在windows paint里面打不了中文)

涉及技术:

1.xml解析,这里实现的比较简单,用.net内置的XmlDocument加上xpath就满足了要求。
2.发短信,免费发短信到手机目前我认为最好的方案是用飞信,但飞信官方没有公开api,采用的是sms.yicker.com网站上的api,用起来还是蛮方便的。
有一点需要注意:sms.yicker.com的发短信api是Get请求 https://sms.yicker.com/api/手机号/飞信密码/发送信息,发送的信息如果含有中文应该htmlencode.

实现:

先从监控的方法开始,这个方法主要是完成文章的获取和短信提醒,代码如下:
public static void Monitor()
{
//获取博客的rss文件,一般为xml格式的
string xml = HttpGet(blogRssUrl);
//解析获取所有的文章节点
XmlNodeList articles = GetArticles(xml);

foreach (XmlNode article in articles)
{
//获取文章的GUID节点
XmlNode guid = article.SelectSingleNode("//item/guid");
//已通知过的文章
if (IsNotified(guid.InnerText))
{
continue;
}
//未通知过的文章
XmlNode title = article.SelectSingleNode("//item/title");
Inform(title.InnerText);
}
}
监控文章的方法调用的获取文章和发短信的方法如下:
public static XmlNodeList GetArticles(string xml)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNodeList articles = doc.SelectNodes("//item");
return articles;
}

public static void Inform(string message)
{
//编码要发送的信息,因为会有中文
message=HttpUtility.HtmlEncode(message);
string url = string.Format("{0}/{1}/{2}/{3}",fetionApiUrl,mobileno,password,message);
HttpGet(url);
}
这里的http请求都只要求采用GET方法就可以了。具体的代码就不列出来了,我已将代码打包,如果大家需要可以随时下载。
程序扩展:

这个程序虽小,但是有很多值得改进的地方。
从功能上来说,短信提醒可以用在很多方面,据我所知的有:网站监控,email邮件提醒,微博客。。等等,只要你有一个飞信号,这些都能免费做到。
从技术上来说,程序短信的已经提醒短信的记录是采用一个字典类型来记录,完全可以保存到外部文件或数据库等。程序的当前只对一个博客监控,如果需要对多个博客,为了更好的体验可以采用多线程。当然还有其他的。。
鉴于精力有限,我也就实现这么多,如果大家感兴趣可以把代码下过去,扩展改进。如果能做出更有意思的东西来,希望也能一起分享。
相关资料:

w3cschool的xpath教程 :http://www.w3school.com.cn/xpath/