Агрегирование каналов в приложении Rails
-
22-07-2019 - |
Вопрос
Я подумываю о том, чтобы написать демон для циклического просмотра каналов, а затем добавить их в базу данных как объекты ActiveRecord.
Во-первых, одна проблема, с которой я сталкиваюсь, заключается в том, что я не могу надежно найти автора / пользователя истории, используя гем feed-normalizer. Кажется, что иногда он не распознает тег (я не знаю, сталкивался ли кто-нибудь еще с этой проблемой).
Во-вторых, я не видел, чтобы кто-нибудь конвертировал RSS-каналы обратно в записи базы данных. Мне нужно сделать это, так как каждая запись будет иметь ассоциации с другими объектами ActiveRecord. Я не могу найти никаких драгоценных камней, чтобы сделать это специально, но могу ли я каким-то образом взломать что-то вроде acts_as_feed, чтобы сделать это?
Решение
Не используйте SimpleRSS. Он не будет декодировать HTML-объекты для вас, а иногда игнорирует структуру канала.
Мне было проще всего проанализировать канал как XML с помощью XMLSimple , но вы можете использовать любой XML-парсер.
Другие советы
SimpleRSS предоставляет очень простой API и прекрасно работает с большинством каналов. Я рекомендую не рассматривать реализацию как ее "синтаксический анализатор" это набор регулярных выражений (что так неправильно на многих уровнях), но это работает хорошо.
Демоны - это хорошая жемчужина для запуска в фоновом режиме.
Если вы используете активную запись, вы должны следовать инструкциям по использованию AR за пределами рельсов, а затем встроенным образом определить классы модели. Это немного уменьшит раздувание.
RSS-каналы довольно противоречивы, это провал, который мы используем
date = i[:pubDate] || i[:published] || i[:updated]
body = i[:description] || i[:content] || i[:summary] || ""
url = i[:guid] || i[:link]
Кроме того, исходя из опыта, убедитесь, что вы пытаетесь спасти все (и помните, что при обычном спасении тайм-ауты не улавливаются). Отстойно, что приходится постоянно подпрыгивать демонам RSS, которые получают плохие данные.
Лучшим подходом является использование Rails Engine , подключенного к API фидов, например, Superfeedr . , Опрос RSS-каналов подразумевает, что вам нужно будет запускать свои собственные асинхронные рабочие и / или систему очередей, которые могут быть довольно сложными для построения и обслуживания сверхурочно. Вам также придется обрабатывать сотни форматов и несоответствий. Вот сообщение в блоге, в котором показано порядок использования RSS-каналов в приложении Rails . Р>