我有一个 Google Places API 密钥,并且能够从我的本地主机成功查询 Google Places API。
我在 Rails 3.1 上,当我将我的网站推送到 Heroku 时,我收到了一个错误的请求。我指的是 http google places API 而不是 javascript API——尽管我怀疑无论哪种方式问题都是一样的(请参阅下面我从 Google 获得的消息)
以下是我的帐户在 Google 控制台中的配置方式:
Key for browser apps (with referers)
API key:
XXXXXX
Referers:
Any referer allowed
Activated on: Mar 5, 2013 9:41 PM
Activated by: xx@stanford.edu –
当我在本地主机上时没有问题。
但是,当我推送应用程序然后向 Google Places 进行查询时,我得到的是:
bad URI(is not URI?): https://maps.googleapis.com/maps/api/place/textsearch/json?query=blamp&key=XXXXX&sensor=false&types=restaurant|food|bar|cafe
编辑:我已经指出错误是因为我使用了条形“|” 最后将谷歌类型分开。但是,当我将查询复制/粘贴到浏览器标头时,以及在本地主机上进行开发时,这都有效。有任何想法吗:
1)为什么会这样。2)如何解决?
以下是我使用 Ruby 代码访问 API 的方法:
query = URI.escape(params[:search])
url_params = "json?query="+ query + "&key="+ GOOGLE_API_KEY + "&sensor="+ false.to_s + "&types="+GOOGLE_TYPES.join("|")
url_params << "&pagetoken="+params[:next_token] if params[:next_token]
url = URI.parse("https://maps.googleapis.com/maps/api/place/textsearch/"+url_params)
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(url.request_uri)
result = http.request(request)
JSON.parse(result.body)
关于 GOOGLE_TYPES 的说明:这是一个全局常量,实际上是一个数组;我用“|”加入它 然后将其传递给 URL。
问题是,当我对字符串进行 URI.encode 时,查询不会为“steak house san francisco”之类的简单请求返回任何结果,而在 URI.encode 之前它会返回。如果不能像在 localhost 上那样返回正确的结果,则查询将变得毫无用处。