【问题标题】:How do I use Nokogiri to access URLs from within an Atom feed?如何使用 Nokogiri 从 Atom 提要中访问 URL?
【发布时间】:2017-05-07 22:53:18
【问题描述】:

我正在尝试使用 Nokogiri 从 YouTube 的 XML Atom 提要中提取 URL。

我很幸运地提取了 id 的命名空间,但在提取 URL 时遇到了困难。例如,YouTube 的 API 提供了三个不同的 <media:thumbnail> 标签和三个不同的 <media:content> 标签。您可以在下面看到这些标签中的任何一个都没有显示 URL。我的目标是分别从第一个 <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\"}]"

【问题讨论】:

  • 你能提供一段XML文件吗?
  • 如果您编辑您的问题并在此处提供代码的工作部分,而不是指望我们追查它,这将有所帮助。如果那个馅饼消失了,它也将留在你的问题中而不是死去。而且,我将支持@taro 的请求,即您提供 XML 的缩减示例。没有它,我们无法为您提供帮助。

标签: ruby nokogiri atom-feed


【解决方案1】:

从头开始,做(这个特殊情况是查看 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 文档。从那里,您可以获得所有 media:content 和 media:thumbnail 节点集。一旦你得到一个节点集,你就可以像访问数组中的第一个元素一样访问第一个。

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" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多