2017-04-02 27 views
-2

欲隔离pageInfo - 为了>使用totalResults检查,如果链路是有效的(= 1)如何检查是否一个YouTube ID是与Nokogori和Rails有效

这是video_controller.rb:

submitted_link = "https://www.googleapis.com/youtube/v3/videos?part=id&id="[email protected][: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

你尝试过这么远吗? – Iceman

+1

尝试使用'HTTParty'或'RestClient'而不是'nokogiri'。你可以得到json,你会得到结果为json并解析它。像'link_result [“pageInfo”] [“totalResults”] == 1' –

+0

非常感谢你:) 通过做:youtube_link = JSON.parse(response)['pageInfo'] ['totalResults']它工作得很好。 – Matt

回答

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" 
    } 
] 
}