Ruby RSS :: Parser.to_s молча не получается? - PullRequest
1 голос
/ 21 августа 2011

Я использую RSS :: Parser из Ruby 1.8.7, часть stdlib. Я новичок в Ruby.

Я хочу разобрать канал RSS, внести некоторые изменения в данные, а затем вывести их (как RSS).

документы говорят, что я могу использовать '#to_s', но, похоже, это работает с некоторыми каналами, но не с другими.

Это работает:

#!/usr/bin/ruby -w

require 'rss'
require 'net/http'

url = 'http://news.ycombinator.com/rss'
feed = Net::HTTP.get_response(URI.parse(url)).body

rss = RSS::Parser.parse(feed, false, true)

# Here I would make some changes to the RSS, but right now I'm not.

p rss.to_s

Возвращает ожидаемый результат: текст XML.

Это не удалось:

#!/usr/bin/ruby -w

require 'rss'
require 'net/http'

url = 'http://feeds.feedburner.com/devourfeed'
feed = Net::HTTP.get_response(URI.parse(url)).body

rss = RSS::Parser.parse(feed, false, true)

# Here I would make some changes to the RSS, but right now I'm not.

p rss.to_s

ничего не возвращает (пустые кавычки).

И все же, если я изменю последнюю строку на:

p rss

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

  1. Почему?
  2. Как я могу получить какой-нибудь вывод ошибок для отладки такой проблемы?

Ответы [ 2 ]

0 голосов
/ 22 октября 2011

У меня была такая же проблема, поэтому я начал отлаживать код.Я думаю, что в ruby ​​rss слишком много обязательных элементов.Канал должен иметь «заголовок, ссылку, описание», в случае пропуска to_s произойдет сбой.

Второй канал в приведенном выше примере пропускает описание, что приведет к сбою to_s ...

Я полагаю, что это ошибка, но я действительно не понимаю код и почти не знаю, поэтому кто знает.Мне кажется естественным, что to_s будет стараться изо всех сил, даже если некоторые элементы отсутствуют.

В любом случае

rss.channel.description = "кое-что"* будет "работать"

Проблема заключается в def have_required_elements?

Или в self.class :: MODELS

0 голосов
/ 21 августа 2011

Из того, что я могу сказать, проблема не в to_s, а в самом парсере. При входе в код parser.rb ничего не возвращалось, поэтому to_s верна пустая строка.

Я бы порекомендовал посмотреть что-то вроде Feedzirra .

Кроме того, в качестве FYI, обратите внимание на модуль Open::URI Руби для легкого поиска веб-ресурсов, таких как каналы. Открытый URI прост, но подходит для большинства задач. Net :: HTTP - более низкий уровень, который потребует от вас ввода гораздо большего количества кода для замены функциональности Open-URI.

...