如何检查Youtube ID是否对Nokogori和Rails有效

时间:2017-04-02 13:46:25

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

我想隔离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"
  }
 ]
}

有你的想法吗?

1 个答案:

答案 0 :(得分:0)

这不是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"
  }
]
}