2017-02-17 2 views
1

Ich versuche, den RSS-Feed von einer Stack Overflow Jobs Suche (URL) mit dem eingebauten Ruby RSS-Parser zu analysieren. Aus irgendeinem Grund kann ich nicht auf das Element "Location" aus dem Feed zugreifen.Location Element nicht von Stack Overflow Jobs analysiert RSS-Feed

Es stürzt mit

undefined method `location' for #<RSS::Rss::Channel::Item:0x000000020db720> (NoMethodError) 

Ich bin in der Lage, die anderen Elemente (Titel, Beschreibung, Link, etc.), aber nicht den Ort zu bekommen

-Code

require 'rss' 
require 'open-uri' 

url = "https://stackoverflow.com/jobs/feed?q=%5bruby%5d&l=New+York%2c+NY%2c+United+States&d=20&u=Miles" 
open(url) do |rss| 
    feed = RSS::Parser.parse(rss) 
    puts "Title: #{feed.channel.title}" 
    feed.items.each do |item| 
     puts item.title 
     puts item.location 
    end 
end 

Wie Ich bekomme diesen Standortwert?

screenshot of formatted xml

+0

Ich kopiere die URL in Google Chrome und ich kann das 'location' Attribut nicht sehen. Bist du sicher, dass eine solche URL die richtige ist? Wenn ja, fügen Sie bitte einen Screenshot des von der URL gesuchten Attributs "location" hinzu. –

+1

@MauricioAriasOlave Ich habe einen Screenshot hinzugefügt und ich habe ein wenig gelesen und ich ding ich meinte Element statt Attribut. So oder so bekomme ich den gleichen Fehler. – chaptuck

Antwort

0

Aus irgendeinem Grund die Lage Element hat einen Namensraum (xmlns Attribut). Ich konnte nichts über die Verwendung von Namespaces im Ruby RSS-Modell finden, aber mit Nokogiri können Sie benutzerdefinierte Namespaces definieren und das Standortattribut mit dem XPath (nokogiri docs) analysieren.

require 'nokogiri' 
require 'open-uri' 

# Open the URL with Nokogiri XML parser 
xml = Nokogiri::XML(open("http://stackoverflow.com/jobs/feed?q=%5Bruby%5D&l=New%20York%2C%20NY%2C%20United%20States&d=20&u=Miles")) 

# xml.xpath('XPath', 'custom_namespace' => "http://namespace/url") 
puts xml.xpath('//rss/channel/item/so:location', 'so' => 'http://stackoverflow.com/jobs/') 
Verwandte Themen