Как создать базу данных элементов из RSS-каналов для анализа (не для приложения), обновляемую по мере публикации RSS-элементов? - PullRequest
1 голос
/ 07 марта 2012

Мне нужно создать базу данных предметов из RSS-каналов, и я бы хотел, чтобы она обновлялась асинхронно (с помощью push ala AJAX), а не с помощью pull (аля чистка RSS через python / magpie в php). База данных будет использоваться для анализа, а не для приложения, поэтому ее необходимо масштабировать. Если кто-нибудь знает о приложении для чтения RSS-каналов, для которого вы можете просто экспортировать элементы из своего канала через XML, это было бы здорово.

Я бы предпочел не создавать кучу серверной инфраструктуры, чтобы заставить анализатор php rss играть с mysql на заданиях chron, но я сделаю это при необходимости. Также заинтересованы в потенциальных решениях Python.

Я посмотрел на Superfeedr / PubSubHubbub, но не уверен, что это правильное решение для меня.

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

Пожалуйста, добавьте соль в мой комментарий, потому что я создал Superfeedr .Я все равно буду стараться оставаться объективным.

Если вы хотите увеличить масштаб и хотите, чтобы ваш набор данных продолжал расти со временем, вполне вероятно, что (как вы уже догадались) опрос будет чрезвычайножесткий .Вероятно, вы потратите много времени на обработку проблем HTTP и проблем с синтаксическим анализом XML.В Superfeedr мы уже собираем и анализируем миллионы кормов, и нет недели, когда мы не сталкиваемся с новым «видом» ошибок. Иногда я чувствую себя первым поселенцем в амазонском дождевом лесу .

Среди проблем HTTP вы, очевидно, увидите, что некоторые сервисы блокируют вас, поскольку они считают, что ваши запросы слишком агрессивны, но вам также придется иметь дело с простоями некоторых из этих сервисов, которые затем могут замедлить работу вашего сервера.Система не работает.Конечно, я не говорю о двусмысленности в работе с заголовками HTTP (мы знаем, что некоторые серверы имеют значение между Etag и etag, и некоторые, которые будут принимать только etags с кавычками ... в то время как другие откажутсяих ...)

Что касается XML, это еще хуже.Сначала вам нужно будет разобрать столько супа, что вы, вероятно, сможете накормить мир (каламбур!).XML кажется очень сложной наукой для многих веб-разработчиков, которые забыли, что экранирование является необходимостью, что пространства имен имеют префиксы , но также и most <open> tag must eventually be </closed>.Теперь вам также придется разбираться с разновидностями RSS, ATOM или RDF и разбираться со всеми ними.

После того, как вы определили правильный формат, вам также придется разобраться в данных,Я всегда цитирую временные метки в каналах, потому что люди часто путают их.Некоторые каналы, которые мы нашли, даже показывают " вчера " как дату <published>.Как мило это?Теперь для тех, кто делает машинно-читаемые метки времени, некоторые из них будут иметь только числовые значения, другие - с 06.03.2012.Даже если они используют правильный формат (не указывается в спецификации RSS!), Нередко люди не понимают, как работают часовые пояса (ага, для материалов, опубликованных в будущем!) Или даже для перехода на летнее время.Наконец, и это действительно законное утверждение: некоторые каналы используют не наш григорианский календарь, а, например, арабский календарь.

Различение (определение нового и старого материала) также невероятно сложно, потому что временные метки f **** вверх, но также и потому, что RSS 1.0, например, не имеет понятия.Создать его сложно, потому что многие люди помещают код отслеживания (меняется!) В ссылки или даже в текст своих записей: (* ​​1025 *

В двух словах, опрос равен aбеспорядок и чрезвычайно сложный в масштабе. Теперь, если вы идете по этому пути, пожалуйста, используйте открытый протокол PubSubHubbub . Это небольшой шаг для вас, но огромный шаг для веб-сообщества, потому что он будет растипринятие и, если все пойдет хорошо, мы можем в конечном итоге завершить опрос. Хорошая новость заключается в том, что множество платформ приняли его, что должно значительно снизить ваши потребности в опросах.

Что вы пытаетесь построитьДля меня это не очевидно, но я считаю, что использование такого решения, как Superfeedr , является хорошим подходом. Мы справимся со всеми проблемами HTTP и максимально нормализуем XML, чтобы вам было легчепотреблять (мы можем даже превратить его в JSON). Да, мы берем плату за наш сервис, но он также экономит много раз с вашей стороны, чтобы вы могли сосредоточиться на том, что делает вашervice / datastore действительно отличается от всех остальных.

0 голосов
/ 09 марта 2012

Ленты обычно доступны через HTTP GET, поэтому, если вы не хотите использовать стороннее приложение (такое как Superfeedr), на самом деле не существует опции push.

Сказав это, опция тяги не так уж и плоха. Это зависит от того, сколько данных вы хотите объединить. Для «чтения и экспорта» большинство настольных программ чтения могут иметь проблемы с количеством, но что-то без всех издержек графического интерфейса, например Venus , вероятно, поможет вам проделать длинный путь.

Разница в форматах и ​​качестве каналов - большая проблема, но есть библиотеки, которые могут позаботиться об этом - Python feedparser особенно хорош.

Не требуется много кода для настройки опроса каналов и отправки результатов через анализатор в БД. (Если вы настраиваете опрос самостоятельно, обязательно проверьте ETags и Last Modified заголовки - или позвольте feedparser сделать это за вас ).

...