2009-06-25 10 views
0

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

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

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

+0

Почему это нормально, чтобы конвертировать RSS и другие каналы в записи базы данных. Программный доступ - это цель XML-фида! Вам нужно создать соответствующие модели и обновить их и сохранить их при анализе через канал! Это то, что вы просите? – Swanand

+0

А, да, это то, о чем я прошу. Однако я не могу найти камень, который это делает. Я нашел rfeedpaser, который в некотором смысле лучше, чем нормализатор корма, но он по-прежнему не сохраняет записи в базе данных. Но, просматривая код, я не думаю, что найду такой камень, потому что в фид можно добавить столько информации. – Jaryl

ответ

0

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

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

0

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

Daemons - хороший камень для запуска его в фоновом режиме.

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

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

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

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

0

Лучшим подходом является использование Rails Engine, подключенного к Feed API like Superfeedr's. Опрос RSS-каналов подразумевает, что вам нужно будет запустить своих асинхронных рабочих и/или систему очередей, что может быть довольно сложным для создания и поддержания сверхурочных. Вам также придется обрабатывать сотни форматов и несоответствий. Вот сообщение в блоге, которое показывает how to consume RSS feeds in a Rails application.

 Смежные вопросы

  • Нет связанных вопросов^_^