8

現在、コードで問題が発生しており、過去 3 日間、Google Places API を使用して削除リクエストを正常に完了できませんでした。こちらに記載されています。

日曜日まで、リクエストされた場所が API の条件を満たしている限り、このコードは問題なく実行され、私が受け取った応答は OK または REQUEST_DENIED フォームのみでした。

しかし今では、リクエストを送信するたびに、受け取るレスポンスは INVALID_REQUEST の形式だけであり、控えめに言っても非常に不便です。私の理解と、事前にこのコードに対して行ったテストから、彼らが要求している形式に準拠しているため、なぜこれが機能しないのか理解できません。

他の誰かがこのコードを見て、リンクされた API と比較して問題があるかどうか教えてもらえますか?

public boolean delete(String reference)
{
    try
    {
        System.out.println(reference);
        String url = "https://maps.googleapis.com/maps/api/place/delete/xml?sensor=false&key=API_KEY_HERE";

        String data = "<PlaceDeleteRequest>\n<reference>" + reference + "</reference>\n</PlaceDeleteRequest>";
        System.out.println(data);

        URL xmlUrl = new URL(url);
        HttpPost request = new HttpPost(xmlUrl.toURI());
        request.setEntity(new StringEntity(data));

        HttpClient client = new DefaultHttpClient();
        HttpResponse response = client.execute(request);
        HttpEntity entity = response.getEntity();

        BufferedReader input = new BufferedReader(new InputStreamReader(entity.getContent()));

        String line = "";

        while ((line = input.readLine()) != null) 
        {
            System.out.println(line);
            if (line.contains("<status>"))
            {
                String[] s1 = line.split(">");
                String[] s2 = s1[1].split("<");
                if (s2[0].equalsIgnoreCase("ok"))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }

        input.close();

    }
    catch(Exception e)
    {
        return false;
    }
    return false;
}
4

6 に答える 6

18

個人的には、Google APIリクエストの間隔が十分でなかったため、GoogleAPIリクエストに対するINVALID_REQUESTレスポンスを受け取りました。彼らが働くために私は彼らの間に2秒間睡眠を挿入しなければなりませんでした。

于 2013-03-16T17:57:21.577 に答える
0

私に起こった別のシナリオは、Google 参照 ID を保存していた場所のデータ型がstring(255 文字に制限されている) であり、列のデータ型をtextすべて固定に変更したことです。通常、INVALID_REQUEST 応答は、不適切な参照呼び出しからのものです。Google は参照 ID の長さを拡張することもできたので、DB に正しく保存されていないことに気付かないでしょう。

于 2013-01-10T14:06:56.810 に答える
0

API_KEY_HERE を API キーに置き換えたとします。開発者コンソールで新しいキーを取得してみて、「許可された IP アドレス」の設定が正しいことを確認してください。

于 2012-03-20T19:42:38.200 に答える
0

ドキュメントで推奨されているように参照を更新してみてください: https://developers.google.com/maps/documentation/places/

場所の保存された参照を定期的に更新することをお勧めします。

于 2012-03-20T23:50:20.787 に答える
0

これは私のために働いた:

public String delete(String reference) {
  HttpClient httpclient = new DefaultHttpClient();
  HttpPost httppost = new HttpPost("https://maps.googleapis.com/maps/api/place/delete/xml?sensor=false&key=YOUR_KEY_HERE");
  try {
      StringEntity se = new StringEntity( "<PlaceDeleteRequest>\n<reference>" + reference + "</reference>\n</PlaceDeleteRequest>", HTTP.UTF_8);
      se.setContentType("text/xml");
      httppost.setEntity(se);
      HttpResponse httpresponse = httpclient.execute(httppost);
      HttpEntity resEntity = httpresponse.getEntity();
      return(EntityUtils.toString(resEntity));
  } catch (IOException e) {
      return e.toString();
  }
于 2012-03-22T04:43:07.377 に答える