У меня есть небольшое Java-приложение, которое, учитывая список ссылок на места Google, должно возвращать идентификаторы для каждого из указанных мест Google (короче говоря, мы хранили ссылки на места вместо их идентификаторов, и только теперь поняли, что ссылки не уникальны для каждого места).
Мое приложение отлично работает примерно для 95% мест в списке, но для некоторых записей происходит сбой с кодом состояния «NOT_FOUND». Некоторые исследования показывают, что ссылка на место для этих конкретных мест (в сочетании с https://maps.googleapis.com/maps/api/place/details/json?sensor=false&key=myApiKey) примерно на 2 символа длиннее URL-адреса. Последние пару символов усекаются.
Моя первоначальная мысль заключалась в том, что я просто сделаю запрос POST к API мест Google, но я получаю код состояния «REQUEST_DENIED» с серверов Google при отправке того же, что и запрос POST.
В любом случае, это связано с этим, или это просто возникающая ошибка с API мест Google (теперь, когда количество мест слишком сильно увеличило ссылку?).
Я также должен отметить, что все неудачные места недавно добавлены нашим приложением.
Вот как выглядит мой текущий (работающий на 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
Заранее спасибо!