Je dispose d'une clé API Google Places et j'ai pu interroger avec succès l'API Google Places depuis mon hôte local.
Je suis sur Rails 3.1, et quand j'ai poussé mon site vers Heroku, j'obtiens une mauvaise requête. Je fais référence à l'API http de google places et NON à celle en javascript - bien que je pense que le problème serait le même dans les deux cas (voir le message que je reçois de Google ci-dessous).
Voici comment mon compte est configuré dans la Google Console :
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 –
Il n'y avait aucun problème lorsque j'étais sur l'hôte local.
Cependant, lorsque je pousse l'application et que j'effectue une requête sur Google Places, voici ce que j'obtiens :
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
EDIT : J'ai trouvé que l'erreur était due à l'utilisation des barres '|' pour séparer les types de google à la fin. Cependant, cela fonctionne à la fois lorsque je copie/colle la requête dans l'en-tête de mon navigateur, et lorsque je le fais en développement sur localhost. Avez-vous des idées ?
1) Pourquoi cela se produit-il ? 2) Comment le réparer ?
Voici comment j'accède à l'API avec du code Ruby :
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)
Une remarque sur GOOGLE_TYPES : il s'agit d'une constante globale qui est en fait un tableau ; je la joins avec "|" puis la passe à l'URL.
Le problème est que lorsque j'encode la chaîne en URI, la requête ne renvoie aucun résultat pour des demandes simples comme "steak house san francisco", alors qu'avant l'encodage URI, elle le faisait. Il est évident que la requête devient inutile si elle ne peut pas renvoyer des résultats corrects comme elle le faisait sur localhost.