通过RSS服务实现手机消息推送


搭建了RSS服务!

虽说RSS现在已经没人用了2333,不过其实还是挺有用的
IFTTT是一个网络自动化神器,它可以把网络服务组织起来,相互打通,并按照我们自己的想法去工作,具体介绍我就不复制粘贴了

总之,IFTTT支持RSS,于是我就可以利用IFTTT和RSS来实现手机上的消息推送功能

关于C#生成RSS的方法,参照这个篇博客http://www.cnblogs.com/tuyile006/p/3710305.html

昨晚折腾了好久,IFTTT总是提示RSS的格式不对,缺少什么Feed Title啥的,但是我生成的RSS的XML中是存在这个字段的
后来Postman请求了一下发现,我的xml declaration中的Encoding居然是UTF-16,代码大致如下
var items = new List();
feed.Items = items;
foreach (var item in resultList)
{
items.Add(dbEntity2RssEntity(item)); }
StringBuilder sb = new StringBuilder(); XmlWriter xmlWriter = XmlWriter.Create(sb); feed.SaveAsAtom10(xmlWriter); xmlWriter.Close();

XmlWriter有个Encoding属性的,不过设置了并没有什么卵用,其实是这样的,XmlWriter会根据输出对象的类型来自动设置Encoding,如果输出到文件的话指定编码当然是有用的
但是如果输出到StringBuilder的话,StringBuilder内部当然是统一的Unicode内码即UTF-16

知道原因后可以开始解决了,简要代码如下
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(sb.ToString());
XmlDeclaration xmldcl = xmlDoc.FirstChild as XmlDeclaration;
if (xmldcl != null)
{
	xmldcl.Encoding = "UTF-8";
}

return new XmlResult.XmlResult(xmlDoc.InnerXml, typeof(string));
搞完编码问题后,终于可以开始设置IFTTT了,但是IFTTT提示“Feed has items without valid URLs”_(:з」∠)_
看来IFTTT还要求每个entry都必须有一个url,在这里把生成entry的代码贴上
private SyndicationItem dbEntity2RssEntity(DbResultEntity dbResult)
{
	SyndicationItem rssEntity = new SyndicationItem();
	rssEntity.Id = dbResult.id.ToString();
	rssEntity.Title = new TextSyndicationContent(dbResult.title);
	rssEntity.Content = SyndicationContent.CreatePlaintextContent(dbResult.message);
	rssEntity.PublishDate = Convert.ToDateTime(dbResult.create_on);
	rssEntity.Links.Add(new SyndicationLink(new Uri("http://www.xingkongbeta.com")));
	return rssEntity;
}

最后,万事俱备只欠IFTTT
打开IFTTT,进入My Applets,新建一个Applets
if this then that
this选择rss服务,地址填入www.xingkongbeta.com/rss
if this then that
that选择Notifications,按自己喜好填一个消息标题,如:来自XingKongBeta的新消息 EntryTitle : EntryContent
不要忘记点保存

收工!

发表评论

邮箱地址不会被公开。 必填项已用*标注