私は小さな Java アプリを持っており、Google プレイスの参照のリストが与えられた場合、各 Google プレイスの ID を取得する必要があります (簡単に言えば、ID の代わりに場所の参照を保存していたのですが、その参照に気付いたのは今だけです)。場所ごとに一意ではありません)。
私のアプリは、リスト内の場所の約 95% で完全に機能しますが、一部のレコードでは "NOT_FOUND" ステータス コードで失敗します。いくつかの調査により、これらの特定の場所の場所参照が ( https://maps.googleapis.com/maps/api/place/details/json?sensor=false&key=myApiKeyプレフィックスと組み合わせると) 約 2 文字長すぎることが明らかになりました。 URL。最後の数文字が切り捨てられています。
私の最初の考えは、Google Places API に POST リクエストを送信するだけだと思っていましたが、POST リクエストとして同じものを送信すると、Google サーバーから「REQUEST_DENIED」ステータス コードが返されます。
とにかくこれに関連するものはありますか、それともこれは google プレイス API の単なる緊急のバグですか (現在、場所の数が参照をプッシュしすぎていますか?)。
また、失敗した場所はすべて、アプリケーションによって最近追加されたものであることにも注意してください。
これは私の現在の(95%で動作している)コードがどのように見えるかです:
public static JSONObject getPlaceInfo(String reference) throws Exception
{
URL places = new URL("https://maps.googleapis.com/maps/api/place/details/json?sensor=false&key="+apiKey+"&reference="+reference);
URLConnection con = places.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuffer input = new StringBuffer();
String inputLine;
while ((inputLine = in.readLine()) != null)
input.append(inputLine);
in.close();
JSONObject response = (JSONObject) JSONSerializer.toJSON(input.toString());
return response;
}
そして、これは私の「ACCESS_DENIED」ポストコードがどのように見えるかです:
public static JSONObject getPlaceInfo(String reference) throws Exception
{
String data = URLEncoder.encode("sensor", "UTF-8") + "=" + URLEncoder.encode("true", "UTF-8");
data += "&" + URLEncoder.encode("key", "UTF-8") + "=" + URLEncoder.encode(apiKey, "UTF-8");
data += "&" + URLEncoder.encode("reference", "UTF-8") + "=" + URLEncoder.encode(reference, "UTF-8");
URL places = new URL("https://maps.googleapis.com/maps/api/place/details/json");
URLConnection con = places.openConnection();
con.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(data);
wr.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuffer input = new StringBuffer();
String inputLine;
while ((inputLine = in.readLine()) != null)
input.append(inputLine);
in.close();
JSONObject response = (JSONObject) JSONSerializer.toJSON(input.toString());
return response;
}
失敗する参照の例は次のとおりです。
CnRtAAAAxm0DftH1c5c6-krpWWZTT51uf0rDqCK4jikWV6eGfXlmKxrlsdrhFBOCgWOqChc1Au37inhf8HzjEbRdpMGghYy3dxGt17FEb8ys2CZCLHyC--7Vf1jn-Yn1kfZfzxznTJAbIEg6422q1kRbh0nl1hIQ71tmdOVvhdTfY_LOdbEoahoUnP0SAoOFNkk_KBIvTW30btEwkZs
前もって感謝します!