Youtube gdata和搜索词有"&"

时间:2014-06-02 16:58:33

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

我有以下代码让这个程序搜索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&瑞恩刘易斯"。

"&安培;"可能不是失败的原因。但我只是怀疑它。如果你认为"&"不是原因,你认为失败的原因是什么?如果你认为"&"是原因,我该如何解决?

1 个答案:

答案 0 :(得分:1)

在将其作为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"