Trying to parse an array of rss feeds without success

hey folks,

I'm trying to make a basic feeds parser... It works fine when I have one
feed only but as soon as I try to parse an array of feeds, it's gonna
parse it correctly but I won't be able to fetch any data out of it...
Here is my code...

class Site
  attr_accessor :domain, :name

  def initialize
    @domain = domain
    @name = name
  end
end

a = Site.new
a.domain = "http://www.mininova.org/rss.xml"
a.name = "mininova"

b = Site.new
b.domain = "http://static.demonoid.com/rss/0.xml"
b.name = "demonoid"

c = Site.new
c.domain = "http://rss.thepiratebay.org/0"
c.name = "thepiratebay"

allfeeds = [ a, b, c ]

require 'rss/1.0'
require 'rss/2.0'
require 'open-uri'

def parse_torrents(source)
  # source = self.domain # url or local file
   content = "" # raw content of rss feed will be loaded here
   open(source) do |s| content = s.read end
   RSS::Parser.parse(content, false)
end

torrents = allfeeds.each { |feed| parse_torrents(feed.domain) }

torrents.each { |t| puts t.channel.title }

The error message I get is only on the last line of code... removing the
last line doesn't show any error message.

Here is the message i get from RubyMate:

NoMethodError: undefined method ‘channel’ for #<Site:0x8a520>

at top level in global.rb at line 38
method each in global.rb at line 38
at top level in global.rb at line 38
Program exited.

I need help even though it's a pretty basic question...

Thank you guys...

···

--
Posted via http://www.ruby-forum.com/.

Louis-pierre Lp.dahito schrieb:

hey folks,

I'm trying to make a basic feeds parser... It works fine when I have one
feed only but as soon as I try to parse an array of feeds, it's gonna
parse it correctly but I won't be able to fetch any data out of it...
Here is my code...

class Site
  attr_accessor :domain, :name

  def initialize
    @domain = domain
    @name = name
  end
end

a = Site.new
a.domain = "http://www.mininova.org/rss.xml&quot;
a.name = "mininova"

b = Site.new
b.domain = "http://static.demonoid.com/rss/0.xml&quot;
b.name = "demonoid"

c = Site.new
c.domain = "http://rss.thepiratebay.org/0&quot;
c.name = "thepiratebay"

allfeeds = [ a, b, c ]

require 'rss/1.0'
require 'rss/2.0'
require 'open-uri'

def parse_torrents(source)
  # source = self.domain # url or local file
   content = "" # raw content of rss feed will be loaded here
   open(source) do |s| content = s.read end
   RSS::Parser.parse(content, false)
end

torrents = allfeeds.each { |feed| parse_torrents(feed.domain) }

torrents.each { |t| puts t.channel.title }

The error message I get is only on the last line of code... removing the
last line doesn't show any error message.

Here is the message i get from RubyMate:

NoMethodError: undefined method ‘channel’ for #<Site:0x8a520>

at top level in global.rb at line 38
method each in global.rb at line 38
at top level in global.rb at line 38
Program exited.

I need help even though it's a pretty basic question...

Thank you guys...

the error message has all you need to get rid of this mistake.
   "...for #<Site...>"

Now start irb and type something like:
   > myarray = [1,2,3]
   > newarray = myarray.each { |i| i * 10 }
   > p newarray
do you see it?
now try Array#map:
   > myarray = [1,2,3]
   > newarray = myarray.map { |i| i * 10 }
   > p newarray

see the difference?

badboy wrote:

Louis-pierre Lp.dahito schrieb:

  def initialize
b = Site.new
require 'rss/2.0'

method each in global.rb at line 38
at top level in global.rb at line 38
Program exited.

I need help even though it's a pretty basic question...

Thank you guys...

the error message has all you need to get rid of this mistake.
   "...for #<Site...>"

Now start irb and type something like:
   > myarray = [1,2,3]
   > newarray = myarray.each { |i| i * 10 }
   > p newarray
do you see it?
now try Array#map:
   > myarray = [1,2,3]
   > newarray = myarray.map { |i| i * 10 }
   > p newarray

see the difference?

I do see the difference... Thank a lot you fixed my problem... I thought
that the each iterator would do the exact same thing the map method
did...
Anyway thank you very much for your time :slight_smile:

···

--
Posted via http://www.ruby-forum.com/\.