我有下面的代码让这个程序搜索youtube的gdata。
class Youtube
def search_url(term)
url = "https://gdata.youtube.com/feeds/api/videos"
url += "?q=#{term}&alt=json&restriction=US&max-results=50&orderby=viewCount"
url += "&fields=entry(id,title,yt:noembed,media:group(media:description),author(name),yt:statistics(@viewCount))"
url += "&key=#{DEV_KEY}"
然而,当我测试这个程序时,当搜索词包含"&"时,它似乎无法搜索,比如流行的二重奏艺术家"Macklemore &"瑞安刘易斯。"
"&"可能不是失败的原因。但我只是怀疑。如果你认为"& &;"不是原因,你认为失败的原因是什么?如果你认为"&"是原因,我该如何解决它?
在将术语作为URL参数发送之前需要对其进行转义:
require 'cgi'
def search_url(term)
term = CGI.escape(term)
url = "https://gdata.youtube.com/feeds/api/videos"
url += "?q=#{term}&alt=json&restriction=US&max-results=50&orderby=viewCount"
url += "&fields=entry(id,title,yt:noembed,media:group(media:description),author(name),yt:statistics(@viewCount))"
url += "&key=#{DEV_KEY}"
使用CGI.escape
转义会得到一个uri安全的参数:
CGI.escape('Macklemore & Ryan Lewis')
# => "Macklemore+%26+Ryan+Lewis"