Feedzirra с несколькими каналами - PullRequest
1 голос
/ 04 ноября 2010

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

NoMethodError in Feed entryController#index
undefined method `title' for #<Array:0x1042f9590>

Моя модель выглядит так:

def self.get_feeds
    feed_urls = ["feed_1", "feed_2"]
    update_from_feeds(feed_urls)
  end

  def self.update_from_feeds(feed_urls)
    feeds = Feedzirra::Feed.fetch_and_parse(feed_urls)
    add_entries(feeds.entries)
  end

  def self.update_from_feeds_continuously(feed_urls, delay_interval = 30.seconds)
    feeds = Feedzirra::Feed.fetch_and_parse(feed_urls)
    add_entries(feed.entries)
    loop do
      sleep delay_interval
      feeds = Feedzirra::Feed.update(feeds.entries)
      add_entries(feeds.new_entries) if feeds.updated?
    end
  end

  private

  def self.add_entries(entries)
    entries.each do |entry|
      unless exists? :guid => entry.id
        create!(
          :title        => entry.title
        )
      end
    end
  end

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

Заранее спасибо!

1 Ответ

1 голос
/ 04 ноября 2010

Когда feeds возвращается в update_from_feeds из fetch_and_parse, это массив, когда передается несколько каналов. Таким образом, each в методе add_entries разделяется на отдельные каналы, а не Фид записей. Чтобы исправить это, вы можете переопределить update_from_feeds следующим образом:

def self.update_from_feeds(feed_urls)
  feeds = Feedzirra::Feed.fetch_and_parse(feed_urls)
  feeds.each do |feed_url, feed|
    add_entries(feed.entries)
  end
end

Предполагается, что вы всегда будете передавать несколько URL фидов на update_from_feeds (или один URL в массиве)

...