我正在使用谷歌自定义搜索API,我试图通过一些红宝石代码访问它:
以下是代码片段
req = Typhoeus::Request.new("https://www.googleapis.com/customsearch/v1?key={my_key}&cx=017576662512468239146:omuauf_lfve&q=" + keyword, followlocation: true)
res = req.run
答案的主体似乎就是这个:
<p>Your client has issued a malformed or illegal request. <ins>That’s all we know.</ins>
'
from /usr/local/lib/ruby/2.1.0/json/common.rb:155:in `parse'
from main.rb:20:in `initialize'
from main.rb:41:in `new'
from main.rb:41:in `<main>'
当我尝试从浏览器中做同样的事情时,它就像一个魅力。更令人困惑的是,这个相同的代码在12小时前工作。我只更改了它应该查找的关键字,但它开始返回错误。
有什么建议吗?我确信我有更多的积分可用于更多请求
答案 0 :(得分:1)
您可能在get参数keyword
中遇到特殊字符问题。如果您在浏览器中输入URL,浏览器会调整这些URL。但是,对于ruby,您需要转义这些字符,使"sky line"
之类的字符串变为"sky+line"
等等。有一个实用函数CGI::escape,使用如下:
require 'cgi'
CGI::escape("sky line")
=> "sky+line"
您的固定代码如下所示:
req = Typhoeus::Request.new("https://www.googleapis.com/customsearch/v1?key={my_key}&cx=017576662512468239146:omuauf_lfve&q=" + CGI::escape(keyword), followlocation: true)
res = req.run
但是,既然您已经使用了Typhoeus,那么您应该可以使用其params
参数并让Typhoeus处理转义:
req = Typhoeus::Request.new(
"https://www.googleapis.com/customsearch/v1?&cx=017576662512468239146:omuauf_lfve",
followlocation: true,
params: {q: keyword, key: my_key}
)
res = req.run
Typhoeus' GitHub page还有更多例子。