2017-02-17 12 views
1

Ruby RSSパーサーを使用してスタックオーバーフロージョブ検索(URL)からRSSフィードを解析しようとしています。何らかの理由で私はフィードからLocation要素にアクセスできません。場所要素がスタックオーバーフロージョブから解析されないRSSフィード

それは私が

コード

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 

がどのように他の要素(タイトル、説明、リンクなど)ではなく、場所を取得することができています

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

でクラッシュ私はこの場所の価値を得る?位置要素は、名前空間(xmlns属性)を有するいくつかの理由

screenshot of formatted xml

+0

Google ChromeでURLをコピーして貼り付けると、 'location'属性が表示されません。そのようなURLが正しいと確信していますか?その場合は、URLから探している 'location'属性を追加してスクリーンショットしてください。 –

+1

@MauricioAriasOlave私はスクリーンショットを追加しました。少し読んだことがありました。私は属性の代わりに要素を意味していました。どちらの方法でも同じエラーが発生します。 – chaptuck

答えて

0

。私はRuby RSSモデルで名前空間を使用する方法について何も見つけることができませんでしたが、Nokogiriを使用すると、カスタム名前空間を定義し、XPath(nokogiri docs)で場所属性を解析できます。

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/') 
関連する問題