Feedjira не добавляет контент и автора

Я только что снова начал использовать Rails и недавно следил за Руководство Sitepoint по созданию приложения RSS Feed. Я следовал инструкциям дословно, но получаю сообщение об ошибке undefined method 'html_safe' for nil:NilClass. Я просмотрел базу данных, и кажется, что Feedjira не анализирует атрибуты content или author в базе данных.

После быстрого поиска в Google я обнаружил следующие проблемы на странице Github #178 и #176, датированный 13 августа, но, учитывая существенную проблему, которую это вызывает, я удивлен на нем нет. Это может быть ошибка в моем коде, которую можно найти здесь, но я проверил и не думаю, что это.

Кто-нибудь знает, что я делаю неправильно? Я изменил self.feed_classes в документации feedjira, как это было предложено в проблеме № 176, но все равно ничего не снимает.


person Dave C    schedule 14.01.2017    source источник
comment
Если вы считаете, что ваша новостная лента обрабатывается неправильно, откройте вопрос на странице feedjiras github.   -  person PascalTurbo    schedule 14.01.2017


Ответы (2)


RSS и Atom Feeds не предлагают атрибут контента. «Контент» предоставляется как «сводный» атрибут. Так изменить

local_entry.update_attributes(content: entry.content, author: entry.author, url: entry.url, published: entry.published)

to

local_entry.update_attributes(content: entry.summary, author: entry.author, url: entry.url, published: entry.published)

Тем не менее, NewsFeeds очень непостоянны. Поэтому не следует полагаться на существование отдельных атрибутов.

Взгляните на свой show.html.erb

<%= @entry.content.html_safe %>

Например, вы можете использовать оператор безопасной навигации

<%= @entry&.content&.html_safe %>

Или сообщить пользователю, что контент отсутствует

<% unless @entry.content.nil? %>
    <%= @entry.content.html_safe %>
<% end %>
person PascalTurbo    schedule 14.01.2017
comment
Но, по-видимому, это все равно оставит основной контент вне синтаксического анализа? - person Dave C; 14.01.2017
comment
Извините, что вы хотите этим сказать? - person PascalTurbo; 14.01.2017
comment
Ну, я хочу основной контент из новостной статьи, но сейчас я не рядом с моим компьютером. Я предполагаю, что ответ не анализирует содержание новостной статьи, а просто отображает ошибку, если это не так? Я пытался использовать несколько различных распространенных коммерческих газет, и ни один из них не предлагает атрибут содержания или автора. - person Dave C; 14.01.2017
comment
Я улучшил свой ответ - это должно решить вашу проблему. Автору: посмотрите ленту - может ее нет. - person PascalTurbo; 14.01.2017
comment
Это сработало до некоторой степени, но дает только однострочное резюме, а не фактическое содержание новостного сообщения. Это просто изменение доступа к новостным статьям? Будет ли это просто случай использования Feedjira для данных канала, а затем использования Nokogiri для очистки предоставленного URL-адреса? - person Dave C; 15.01.2017
comment
Feedjira предоставляет вам только содержимое самой новостной ленты. Если вам нужна вся статья, вам придется скачать содержимое, а затем очистить его. - person PascalTurbo; 16.01.2017
comment
Я так и думал, похоже, все изменилось со времени урока. Спасибо! - person Dave C; 16.01.2017

ХОРОШО. Я нашел, где была проблема. Я клонировал ваш проект и загорелся. Судя по всему, ваша show.html.erb страница из фидов отличается от страницы из статьи, поэтому вы не могли получить доступ к записям:

Ваш => Из статьи

Если вы хотите просмотреть записи, сначала создайте новый канал с именем и описанием и, например, добавьте эти ссылки для каждого канала:

http://epijobs.com/rss.xml

http://feedjira.com/blog/feed.xml

Когда вы закончите добавлять каналы, из своего терминала в корневом приложении запустите cd lib/task и, наконец, запустите: bundle exec rake sync:feeds, как упоминалось в статье:

Задача rake перебирает все фиды, хранящиеся в базе данных, и извлекает самый последний контент для каждого из них. После этого прокручивайте новые записи, создавая или обновляя их в базе данных. Мы обновляем каждый раз, чтобы не отставать от любых изменений в исходном контенте.

Теперь, если вы перейдете по этой ссылке ниже, например, или по ссылке покажете первую ленту:

http://localhost:3000/feeds/1/entries

Вы должны увидеть все записи для фида с идентификатором 1.

Я надеюсь, что это помогает.

person Blackcoat77    schedule 14.01.2017
comment
Пока ничего, к сожалению. - person Dave C; 14.01.2017
comment
Я всегда мог получить доступ к этому представлению. Он просматривал отдельную запись (http://localhost:3000/feeds/1/entries/1), которая является проблемой. - person Dave C; 15.01.2017
comment
А, хорошо, теперь я вижу. Вы можете просто проверить, присутствует ли значение в БД, добавив ‹%= @entry.content.html_safe, если @entry.content.present? %› это решит вашу проблему. - person Blackcoat77; 15.01.2017
comment
К сожалению нет. Новости — это то, что я хочу от RSS-канала, поэтому, если его там нет, нет смысла иметь канал. Я не уверен, все ли RSS-каналы изменились сейчас или это просто что-то не так с моим кодом. - person Dave C; 15.01.2017
comment
Я попытаюсь объяснить вам мой сценарий. Я использую точно такой же код из вашего репо. Если я получу этот URL-адрес ссылка и запущу задачу после этого, а затем пойду посмотреть содержимое, я получить ошибку, как вы ее получили. 'html_safe' for nil:NilClass. Если вы зайдете на этот веб-сайт, вы увидите, что xml содержит только заголовки и ссылки. Вот почему он показывает ошибку. (Нет контента с исходного сайта). Если я добавлю `if @entry.content.present?`, ошибка исчезнет, ​​но контента по-прежнему нет. Если я получу ссылку на Feedjira, которую я отправил, она покажет содержимое. Я пытаюсь понять тебя, чего ты хочешь.. - person Blackcoat77; 16.01.2017
comment
Я клонировал ваш репозиторий, поэтому мы работаем над одним и тем же, если вы не внесли некоторые локальные изменения и не перешли на удаленный репо. С некоторых веб-сайтов вы не получите контент, потому что они не отображали xml должным образом на своей стороне, как я показал вам по обеим ссылкам из моего ответа. - person Blackcoat77; 16.01.2017
comment
Это будет окончательный код из вашего app/views/entries/show.html.erb <div class="container"> <h3><%= link_to @entry.title, @entry.url %></h3> <i>published on <%= @entry.published %> by <%= @entry.author %></i> <p> <% if @entry.content.present? %> <%= @entry.content.html_safe %> <% else %> <br><b>No content from the main source</b> <% end %> </p> </div> - person Blackcoat77; 16.01.2017
comment
Хорошо, я это понимаю. Но что мне нужно, так это содержание новостных статей из RSS-каналов. Является ли лучшим вариантом просто использовать URL-адрес и использовать nokogiri для извлечения содержимого из статьи? - person Dave C; 16.01.2017
comment
Да. Вы можете сделать это с Нокогири. - person Blackcoat77; 16.01.2017