【问题标题】:How to check if a Youtube ID is valid with Nokogori and Rails如何使用 Nokogori 和 Rails 检查 Youtube ID 是否有效
【发布时间】:2017-08-27 09:37:09
【问题描述】:

我想隔离 pageInfo -> TotalResults 以检查链接是否有效 (= 1)

这是 video_controller.rb:

 submitted_link = "https://www.googleapis.com/youtube/v3/videos?part=id&id="+@results[:id]+"&key="+ENV["KEY_YOUTUBE"]
 link_result = Nokogiri::HTML(open(submitted_link))

我得到这个结果:

{
 "kind": "youtube#videoListResponse",
 "etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/GWU-
KIYwNWh_dAkOcA5xDaFhS48\"",
 "pageInfo": {
   "totalResults": 1,
   "resultsPerPage": 1
 },
 "items": [
 {
   "kind": "youtube#video",
   "etag": "\"uQc-
  MPTsstrHkQcRXL3IWLmeNsM/wp71OkMYYohvwOjzLL_4NN8r7w0\"",
   "id": "m9h7qCdgPN4"
  }
 ]
}

你有什么想法吗?

【问题讨论】:

  • 尝试使用HTTPartyRestClient 而不是nokogiri。你可以得到json,你会得到json的结果并解析它。喜欢link_result["pageInfo"]["totalResults"] == 1
  • 非常感谢 :) 通过这样做:youtube_link = JSON.parse(response)['pageInfo']['totalResults'] 效果很好。
  • 您使用了错误的工具。 Nokogiri 是一个 HTML/XML 解析器。输出不是 XML 或 HTML,而是 JSON。
  • 请阅读“How to Ask”,包括链接页面,“minimal reproducible example”和“How much research effort is expected of Stack Overflow users?”。了解基于 HTTP 的服务可以返回的数据的基本格式非常重要。

标签: ruby-on-rails ruby youtube-api nokogiri


【解决方案1】:

这不是 Nokogiri 的任务,因为 Nokogiri 用于解析 HTML 或 XML。文档开头是:

Nokogiri 非常快速地解析和搜索 XML/HTML,并且还具有正确的 实现了 CSS3 选择器支持以及 XPath 1.0 支持。

相反,您的输出是 JSON,需要由 JSON 类解析。 这是未经测试的代码,但在大致范围内:

require 'open-uri'
require 'json'

foo = JSON[open("https://www.googleapis.com/youtube/v3/videos?part=id&id=#{@results[:id]}&key=#{ENV['KEY_YOUTUBE']}").read]

解析后,您将返回一个 Ruby 对象,在本例中为哈希。思考这个:

require 'json'

str = DATA.read
foo = JSON[str]
# => {"kind"=>"youtube#videoListResponse",
#     "etag"=>"\"uQc-MPTsstrHkQcRXL3IWLmeNsM/GWU-KIYwNWh_dAkOcA5xDaFhS48\"",
#     "pageInfo"=>{"totalResults"=>1, "resultsPerPage"=>1},
#     "items"=>
#      [{"kind"=>"youtube#video",
#        "etag"=>"\"uQc-MPTsstrHkQcRXL3IWLmeNsM/wp71OkMYYohvwOjzLL_4NN8r7w0\"",
#        "id"=>"m9h7qCdgPN4"}]}

foo['pageInfo']['totalResults'] # => 1

__END__
{
"kind": "youtube#videoListResponse",
"etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/GWU-KIYwNWh_dAkOcA5xDaFhS48\"",
"pageInfo": {
  "totalResults": 1,
  "resultsPerPage": 1
},
"items": [
{
  "kind": "youtube#video",
  "etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/wp71OkMYYohvwOjzLL_4NN8r7w0\"",
  "id": "m9h7qCdgPN4"
  }
]
}

【讨论】:

    猜你喜欢
    • 2010-11-24
    • 2013-09-26
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2020-11-29
    • 2015-12-27
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多