如何在更新RSS提要时触发可执行文件

本文关键字:可执行文件 更新 RSS | 更新日期: 2023-09-27 17:52:59

我有一个RSS提要URL,我可以在任何提要阅读器中查看。
这个RSS源不是由我控制的,它只被我消费。
此RSS源(监察长办公室的排除提供商列表)链接到一个包含可下载文件的页面。

这些文件大约每月更新一次,RSS提要显示新的"未读"条目。

我想做的是写一些东西(用c#),每周检查一次这个RSS提要,当一个新的项目(即一个新的可下载文件)可用时,触发一个可执行文件。

这本质上就像一个非常缩小的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