我正在尝试使用Nokogiri从YouTube的XML Atom提要中提取URL。
我很幸运地提取了id,yay命名空间,但是很难提取URL。例如,YouTube的API提供了三种不同的<media:thumbnail>
标签和三种不同的<media:content>
标签。您可以在下面看到,这些标签中的任何一个都没有显示网址。我的目标是分别从第一个<media:thumbnail>
和<media:content>
中提取 URL。
这是我的代码的粘贴: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"}]"
从头开始,做(这个特殊情况是查看 youtube 播放列表 xml 提要,但我相信你可以对任何视频提要做同样的事情):
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"