Агрегирование каналов в приложении Rails - PullRequest
0 голосов
/ 25 июня 2009

Я подумываю о создании демона для циклического прохождения каналов, а затем добавления их в базу данных в качестве объектов ActiveRecord.

Во-первых, одна проблема, с которой я сталкиваюсь, заключается в том, что я не могу надежно найти автора / пользователя истории, используя гем feed-normalizer. Кажется, что иногда он не распознает тег (я не знаю, сталкивался ли кто-нибудь еще с этой проблемой).

Во-вторых, я не видел, чтобы кто-нибудь конвертировал RSS-каналы обратно в записи базы данных. Мне нужно сделать это, так как каждая запись будет иметь ассоциации с другими объектами ActiveRecord. Я не могу найти никаких драгоценных камней, чтобы сделать это специально, но могу ли я каким-то образом взломать что-то вроде acts_as_feed, чтобы сделать это?

Ответы [ 3 ]

0 голосов
/ 25 июня 2009

Не используйте SimpleRSS. Он не будет декодировать HTML-объекты для вас, а иногда игнорирует структуру канала.

Мне было проще всего проанализировать канал как XML с XMLSimple , но вы можете использовать любой анализатор XML.

0 голосов
/ 27 апреля 2015

Лучше всего использовать Rails Engine , подключенный к Feed API, как Superfeedr . Опрос RSS-каналов подразумевает, что вам нужно будет запускать свои собственные асинхронные рабочие и / или систему очередей, которые могут быть довольно сложными для построения и обслуживания сверхурочно. Вам также придется обрабатывать сотни форматов и несоответствий. Вот запись в блоге, в которой показано, как использовать RSS-каналы в приложении Rails .

0 голосов
/ 25 июня 2009

SimpleRSS предоставляет очень простой API и работает довольно хорошо на большинстве каналов. Я рекомендую не смотреть на реализацию, поскольку ее «парсер» - это набор регулярных выражений (что так неправильно на многих уровнях), но он работает хорошо.

Демоны - это хорошая жемчужина для запуска в фоновом режиме.

Если вы используете активную запись, вы должны следовать инструкциям по использованию AR за пределами рельсов, а затем встроенным образом определить классы модели. Это немного сократит раздувание.

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

  date = i[:pubDate] || i[:published] || i[:updated]
  body = i[:description] || i[:content] || i[:summary] || ""
  url = i[:guid] || i[:link]

Кроме того, исходя из опыта, убедитесь, что вы пытаетесь спасти все (и помните, что при обычном спасении тайм-ауты не улавливаются). Отстойно, что приходится постоянно подпрыгивать демонам RSS, которые получают плохие данные.

...