Updated on 5月 14, 2019
通过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
不要忘记点保存
收工!