Как вызвать исполняемый файл при обновлении канала RSS - PullRequest
2 голосов
/ 22 апреля 2011

У меня есть URL-адрес канала RSS, который я могу просматривать в любом приложении для чтения каналов.
Этот RSS-канал не контролируется мной, он используется только мной.
Этот канал RSS ( Список исключенных провайдеров Генерального инспектора ) ссылается на страницу с загружаемыми файлами.

Эти файлы обновляются примерно раз в месяц, и в ленте RSS отображаются новые элементы " непрочитанные ".

Что я хочу сделать, так это написать что-то (на C #), которое проверяет этот канал RSS один раз в неделю, и когда новый элемент (то есть новый загружаемый файл) доступен, запускает исполняемый файл.

По сути, это очень уменьшенный RSS Reader с единственной целью запуска исполняемого файла при появлении нового элемента.

Любое руководство, совет будет принята с благодарностью.

Edit:

  • Мне нужна помощь в определении, когда новый предмет становится доступным для скачать.
  • Бег исполняемый файл, который я могу сделать.
  • The исполняемый файл, который будет работать, будет обрабатывать загруженный файл.

Ответы [ 4 ]

2 голосов
/ 23 апреля 2011

Если вы используете .Net 3.5 или выше, вы можете использовать различные классы в пространстве имен System.ServiceModel.Syndication , в частности класс SyndicationFeed , который предоставляет свойство LastUpdatedTime, которое вы можно использовать для сравнения дат, чтобы узнать, когда вызывать ваш исполняемый файл, используя метод Process.Start в пространстве имен System.Diagnostics.

            using (XmlReader reader = XmlReader.Create(path))
            {
                SyndicationFeed feed = SyndicationFeed.Load(reader);

                if ((feed != null) && (feed.LastUpdateTime > feedLastUpdated))
                {
                    // Launch Process                            
                }
            }
2 голосов
/ 22 апреля 2011

Как уже заметил комментатор, этот вопрос довольно широкий, но вот попытка ответить:

  • Вы можете написать службу Windows (использовать шаблон, поставляемый с VS / MonoDevelop) или написать простое консольное приложение, которое будет вызываться планировщиком Windows или 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"); для его запуска.

Остерегайтесь вирусов в exes !!!

1 голос
/ 23 апреля 2011

Таким образом, вы должны прочитать RSS-канал с URL, а затем проанализировать данные, чтобы определить, доступен ли новый элемент.

Чтобы прочитать канал, вам нужно использовать WebClient . Самый простой способ:

var MyClient = new WebClient();
string rssData = MyClient.DownloadString("http://whatever");

Затем вы можете создать документ XML из возвращенной строки.

var feedXML = new XMlDocument();
feedXML.Load(rssData);

@ dawebber показывает, как анализировать XML с помощью LINQ. Вы хотите проверить дату каждого элемента, чтобы увидеть, является ли он более новым, чем последняя проверенная дата. Или, возможно, у вас есть база данных предметов, которые вы уже видели, и вы хотите проверить, есть ли полученные вами элементы в базе данных.

Всякий раз, когда вы найдете новый элемент, вы можете запустить свой исполняемый файл, используя Process.Start .

0 голосов
/ 22 апреля 2011

Вы можете написать приложение System Tray.Я сделал несколько таких скрининг / мониторинг сайтов по расписанию.Вот ОЧЕНЬ простое начало.Я думаю, что вы могли бы сделать то, что вы ищете в течение нескольких часов.

http://alperguc.blogspot.com/2008/11/c-system-tray-minimize-to-tray-with.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...