如何在更新RSS提要时触发可执行文件
本文关键字:可执行文件 更新 RSS | 更新日期: 2023-09-27 17:52:59
我有一个RSS提要URL,我可以在任何提要阅读器中查看。
这个RSS源不是由我控制的,它只被我消费。
此RSS源(监察长办公室的排除提供商列表)链接到一个包含可下载文件的页面。
这些文件大约每月更新一次,RSS提要显示新的"未读"条目。
我想做的是写一些东西(用c#),每周检查一次这个RSS提要,当一个新的项目(即一个新的可下载文件)可用时,触发一个可执行文件。
这本质上就像一个非常缩小的RSS阅读器,唯一的目的是在出现新项目时触发可执行文件。
任何指导,建议将不胜感激。
编辑:- 我需要帮助来确定何时新的项目可用于下载。
- 文件的运行
- 的可执行文件,将运行,将处理
正如一位评论者已经指出的那样,这个问题相当广泛,但这里试图回答:
-
你可以写一个Windows Service(使用VS/MonoDevelop自带的模板),或者你可以写一个简单的控制台应用程序,由Windows Scheduler或Cron调用。
-
主代码将使用可用的RSS提要解析器之一:
这里有很多关于SO的例子。在我看来,最简单的基于linq的是这里
我个人喜欢这种方法,也使用LINQ。
- 解析提要之后,您需要查找
Link
元素的值,通过从上面的SO示例中查找:…
var feeds = from feed in feedXML.Descendants("item")
select new
{
Title = feed.Element("title").Value,
**Link** = feed.Element("link").Value,
Description = feed.Element("description").Value
};
…
- 所以,现在你有了可执行文件,你需要把它下载到你的机器上。我建议你看看这个来自MSDN的例子:
- 现在,你已经下载了文件,简单地使用
Process.Start("Path to EXE");
执行它。
小心前男友的病毒!!
如果你使用的是。net 3.5或更高版本,你可以在System.ServiceModel.Syndication命名空间中使用各种各样的类,特别是SyndicationFeed类,它暴露了一个LastUpdatedTime属性,你可以用它来比较日期,以知道何时使用Process调用可执行文件。系统中的启动方法。诊断名称空间。
using (XmlReader reader = XmlReader.Create(path))
{
SyndicationFeed feed = SyndicationFeed.Load(reader);
if ((feed != null) && (feed.LastUpdateTime > feedLastUpdated))
{
// Launch Process
}
}
所以您必须从URL读取RSS提要,然后解析数据以确定是否有新项目可用。
要读取提要,您将需要使用WebClient。最简单的方法:
var MyClient = new WebClient();
string rssData = MyClient.DownloadString("http://whatever");
然后可以根据返回的字符串创建XML文档。
var feedXML = new XMlDocument();
feedXML.Load(rssData);
@dawebber展示了如何用LINQ解析XML。您需要检查每个项目上的日期,看看它是否比上次检查的日期更新。或者你有一个数据库,里面有你已经看过的项目,你想检查你收到的项目是否在数据库中。
当你发现一个新项目时,你可以使用Process.Start来启动你的可执行文件
您可以编写一个系统托盘应用程序。我曾经做过几个有计划的屏幕抓取/监控站点。这是一个非常简单的开始。我想你可以在几个小时内完成你想要的工作。
http://alperguc.blogspot.com/2008/11/c-system-tray-minimize-to-tray-with.html