如何使用 Nokogiri 从 Atom feed 中访问 URL?

发布于 2024-11-05 15:44:05 字数 1010 浏览 2 评论 0原文

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

我在提取 id 和 yay 命名空间方面运气不错,但在提取 URL 方面却遇到了困难。例如,YouTube 的 API 提供了三个不同的 标签和三个不同的 标签。您可以在下面看到,这些标签中的任何一个都没有显示 URL。我的目标是分别从第一个 中提取 URL。

这是我的代码的粘贴: http://pastie.org/1881669

这是终端中的输出条目:

{:group=>\"喜剧The OMG Cat or the WTF cat - 有趣的目瞪口呆的猫。猫的名字是 \\\"Choco\\\" 并且如果我告诉你她在看什么,我就必须杀了你!!!天啊猫,天哪,猫,wtf 猫,猫,猫,猫失败,wtf 猫,可爱的猫,可爱的动物,有趣的猫,有趣猫视频,天哪,wtf,目瞪口呆的猫,目瞪口呆,两个女孩一杯,反应天啊猫\",:类别=>\“喜剧\”, :content=>\"\", :description=>\"OMG 猫或 WTF 猫 - 有趣的目瞪口呆的猫。猫的名字是 \\\"Choco\\\" 如果我​​告诉你她是什么看着,我一定要杀了你!!!\", :keywords=>\"天啊猫,天啊猫,wtf 猫,猫,猫,猫失败,wtf 猫,可爱的猫,可爱的动物,有趣的猫,有趣的猫视频,天哪,wtf,目瞪口呆的猫,目瞪口呆,两个女孩一杯,反应\",:player=>\"\",:thumbnail=>\"\",:title=> \“天啊猫\”}]“

I am trying to extract the URLs from YouTube's XML Atom feed using Nokogiri.

I had some luck extracting the id's, yay namespaces, but have had a hard time extracting the URLs. For example, YouTube's API offers three different <media:thumbnail> tags and three different <media:content> tags. You can see below that the URLs are not showing up for either of those tags. My goal is to extract the URLs from the first <media:thumbnail> and <media:content> respectively.

Here's a pastie of my code: http://pastie.org/1881669

This is the output in terminal for one entry:

{: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\"}]"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜`诱少女 2024-11-12 15:44:05

从头开始,执行以下操作(此特殊情况是查看 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" 

Starting from the beginning, do (this particular case is looking at a youtube playlist xml feed, but I believe you can do the same for any video 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"))   

Now you have the nokogiri xml document contained in the doc variable. From there, you can get all the media:content and media:thumbnail nodesets. Once you get a nodeset, you can access the first just like the first element in an array.

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" 

and do the same for thumbnail:

doc.xpath('//media:thumbnail')[0]['url']
 => "http://i.ytimg.com/vi/eBefgm7hdpU/default.jpg" 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文