LINUX.ORG.RU

Парсинг RSS.

 , ,


0

1

Пишу программу, которая скачивает ленту и дальше орудует XML-парсером:

  1. Выпоняется функция с логическими операциями и XPath-запросами, которая определяет тип ленты. Этот шаг пока ещё не реализован.
  2. В зависимости от типа полученного на прошлом шагу выбирается функция (т.к. первый шаг ещё не реализован функция одна на все типы), которая создаёт объекты сообщений и ленты, для каждого слота объектов выполняя по очереди XPath-запросы и заполняя слоты первым результативным запросом из очереди.

Данный алгоритм позволяет адаптироваться к разным типам лент, которые я видел. Пока я ещё не очень вошёл в суть RSS-лент, может есть что-то объединяющее типы лент, с более простым подходом?

★★★★★

Но ведь это же элементарно!

Делаешь пандорический захват, лифтишь в монаду, потом строишь рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически вычисляешь результат. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут.

anonymous
()

Как раз вчера ночерком делал

есть что-то объединяющее типы лент

Конечно. RSS и Atom зовется. И после этого фид парсить и разбирать становится не просто, а очень просто.Например:

	public class XMLCollector
	{
		private XmlTextReader _reader;
		private FeedOptions _options;

		public XMLCollector ( FeedOptions options )
		{
			_options = options;
			_reader = new XmlTextReader(_options.FeedURL);
		}

		public List<Tuple<string, string, string>> Collect ()
		{
			var doc = new XmlDocument ();
			var result = new List<Tuple<string, string, string>> ();
			doc.Load (_reader);

			var nodes = doc.SelectNodes (_options.FeedItemPath);
			foreach (XmlNode node in nodes)
				result.Add(Tuple.Create(
					node.SelectSingleNode(_options.ItemA).InnerXml,
					node.SelectSingleNode(_options.ItemB).InnerXml,
					Regex.Match(node.SelectSingleNode(_options.ItemC).InnerText, _options.ExtractExpr ).Groups[2].Value
					));

			return result;
		}
	}

Всё.

PS Ввиду банальности и простоты вопроса неясна сентанция про «Этот шаг пока ещё не реализован.» от (***) пользователя. Это разве так сложно?

Upd: посмотрел твой профиль. Теперь понятно, почему пресловутый «шаг» еще не реализован. Ничего не поделаешь - это Лисп... Счастливой отладки.

d_Artagnan ★★
()
Последнее исправление: d_Artagnan (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.