【问题标题】:Youtube gdata and search term having "&"Youtube gdata 和带有“&”的搜索词
【发布时间】:2014-07-22 20:59:31
【问题描述】:

我有以下代码让这个程序搜索 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 & Ryan Lewis”一样。

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

【问题讨论】:

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


    【解决方案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"
    

    【讨论】:

    • @Uri_Agassi 谢谢。但是您的代码现在不包括“类 Youtube”。但也许这并不意味着“类 Youtube”真的应该被删除,对吧?
    • 当然 Youtube 课程应该在那里...我只是懒得抄你的cos
    • @Uri_Agassi 呃……我测试了这个程序,但它没有用。事实上,现在程序不能搜索它以前可以搜索的东西。知道发生了什么吗?
    • 查询结果是什么?它与有效的查询有何不同?
    • @Uri_Agassi 查询是“Macklemore & Ryan Lewis”。如果你用 Firefox 打开这个gdata.youtube.com/feeds/api/videos?q=Macklemore & Ryan Lewis&restriction=US&max-results=50&orderby=viewCount,那么你可以看到“Macklemore - Thrift Shop Ft. Wanz Lyrics On Screen”出现在列表中,这是不应该出现的,因为它不包含“Ryan Lewis”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2014-04-22
    • 1970-01-01
    • 2011-03-31
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多