Рубин, Фидзирра, Тайфус - PullRequest
2 голосов
/ 11 июня 2011

Я действительно новичок в Ruby (первый день!), И я борюсь с этим здесь.Я пытаюсь создать rss-парсер в сочетании с Typhoeus, так как я анализирую более 100 каналов, а также потому, что хочу, чтобы он работал.

Вот мой код:

require 'typhoeus'
require 'feedzirra'

feed_urls = ["feed1", "feed2"]

hydra = Typhoeus::Hydra.new
feeds = {}
entry = {}
feed_urls.each do |feed|
  r = Typhoeus::Request.new(feed)
  r.on_complete do |response|
    feeds[r.url] = response.body
    feeds[r.url] = Feedzirra::Feed.parse(response.body)
    entry = feeds.entries.each do |entry|
      puts entry.title
    end
    hydra.queue r
  end
end

hydra.run

Я уверен, что это какая-то проблема синтаксиса.У меня все еще есть трудные времена.Например, я всегда продолжаю закрывать строки с ;, хотя я забываю это все время при написании PHP.Так может кто-нибудь может помочь?Получить результаты кормления без тифа не было слишком сложно.

edit:

>> puts feeds.entries.inspect
[["http://feedurl", #<Feedzirra::Parser::AtomFeedBurner:0x1023b53f0 @title="Paul Dix Explains Nothing", @entries=[#<Feedzirra::Parser::AtomFeedBurnerEntry:0x1023b05d0 @published=Thu Jan 13 16:59:00 UTC 2011, @author="Paul Dix", @summary="Earlier this week I had the opportunity to sit with six other people from the NYC technology scene and talk to NYC Council Speaker Christine Quinn and a few members of her staff. Charlie O'Donnell organized the event to help...", @updated=Thu Jan 13 17:55:31 UTC 2011, @title="Water water everywhere and not a drop to drink: The Myth and Truth of the NYC engineer shortage", @entry_id="tag:typepad.com,2003:post-6a00d8341f4a0d53ef0148c793f692970c", @content="....

Итак, я, по крайней мере, кое-что получил.

Ответы [ 2 ]

2 голосов
/ 11 июня 2011

Похоже, вы в очереди внутри блока on_complete. Разве вы не должны стоять в очереди в блоке feed_urls.each? Или, может быть, вы должны просмотреть все записи после того, как все запросы были выполнены? Как это:

hydra = Typhoeus::Hydra.new
feeds = {}
entry = {}
feed_urls = ["feed1", "feed2"]

feed_urls.each do |feed|
  r = Typhoeus::Request.new(feed)
  r.on_complete do |response|
      feeds[r.url] = response.body
      feeds[r.url] = Feedzirra::Feed.parse(response.body)
  end

  hydra.queue r
end

hydra.run

feeds.entries.each do |feed|
  puts "-- " + feed[1].title

  feed[1].entries.each do |entry|
    puts entry.title
  end
end
0 голосов
/ 11 июня 2011

Вам не хватает end в конце вашего блока. Если вы сделаете отступ в своем коде последовательно, вы увидите дыру:

require 'typhoeus'
require 'feedzirra'
feed_urls = ["feed1", "feed2"]    
hydra = Typhoeus::Hydra.new
feeds = {}
entry = {}
feed_urls.each do |feed|
  r = Typhoeus::Request.new(feed)
  r.on_complete do |response|
    feeds[r.url] = response.body
    feeds[r.url] = Feedzirra::Feed.parse(response.body)
    entry = feeds.entries.each do |entry|
      puts entry.title
    end
    hydra.queue r
  end

### You need an 'end' on this line to close the `each` ###

hydra.run

Добро пожаловать в Ruby and Stack Overflow! :)

...