我正在尝试使用Nokogiri从YouTube的XML Atom Feed中提取网址。
我有一些运气提取id,yay名称空间,但很难提取URL。例如,YouTube的API提供三种不同的<media:thumbnail>
代码和三种不同的<media:content>
代码。您可以在下面看到,这些标记中没有显示任何网址。我的目标是分别从第一个<media:thumbnail>
和<media:content>
中提取网址。
以下是我的代码的昵称:http://pastie.org/1881669
这是一个条目的终端输出:
{:group=>\"ComedyThe OMG Cat or the WTF cat - funny gobsmacked cat. The cats name is \\\"Choco\\\" and if i told you what she was looking at, I would have to kill you!!!The OMG Cat, omg cat, wtf cat, cat, cats, cat fail, the wtf cat, cute cats, cute animals, funny cats, funny cat video, omg, wtf, gobsmacked cat, gobsmacked, two girls one cup, reactionThe OMG Cat\", :category=>\"Comedy\", :content=>\"\", :description=>\"The OMG Cat or the WTF cat - funny gobsmacked cat. The cats name is \\\"Choco\\\" and if i told you what she was looking at, I would have to kill you!!!\", :keywords=>\"The OMG Cat, omg cat, wtf cat, cat, cats, cat fail, the wtf cat, cute cats, cute animals, funny cats, funny cat video, omg, wtf, gobsmacked cat, gobsmacked, two girls one cup, reaction\", :player=>\"\", :thumbnail=>\"\", :title=>\"The OMG Cat\"}]"
答案 0 :(得分:3)
从头开始,do(此特定情况是查看youtube播放列表xml Feed,但我相信您可以对任何视频Feed执行相同操作):
pid='5ABDCC8D096B0853' #requires a playlist id to lookup all its entries
=> "5ABDCC8D096B0853"
doc = Nokogiri::XML(open("http://gdata.youtube.com/feeds/api/playlists/#{pid}?v=2"))
现在你有doc变量中包含的nokogiri xml文档。从那里,您可以获得所有媒体:内容和媒体:缩略图节点集。获得节点集后,就可以像访问数组中的第一个元素一样访问第一个节点集。
doc.xpath('//media:content')[0]
=> #<Nokogiri::XML::Element:0x82dd58d8 name="content" namespace=#<Nokogiri::XML::Namespace:0x82dd5ea0 prefix="media" href="http://search.yahoo.com/mrss/"> attributes=[#<Nokogiri::XML::Attr:0x82dd5770 name="url" value="http://www.youtube.com/ep.swf?id=5ABDCC8D096B0853">, #<Nokogiri::XML::Attr:0x82dd575c name="type" value="application/x-shockwave-flash">, #<Nokogiri::XML::Attr:0x82dd5748 name="format" namespace=#<Nokogiri::XML::Namespace:0x82dd3d44 prefix="yt" href="http://gdata.youtube.com/schemas/2007"> value="5">]>
doc.xpath('//media:content')[0]['url']
=> "http://www.youtube.com/ep.swf?id=5ABDCC8D096B0853"
并对缩略图执行相同的操作:
doc.xpath('//media:thumbnail')[0]['url']
=> "http://i.ytimg.com/vi/eBefgm7hdpU/default.jpg"