1

https://developers.google.com/maps/documentation/geocoding/で定義されているように、Google ジオコーディング サービスを必要とする Java Web アプリケーションを構築しています。私のアプリケーションはすべてセットアップされ、すべてが機能します。追加のレート制限請求などの API からの追加機能を許可するために、リクエストに署名しようとしています...

私が抱えている問題は、ジオコーディング API で動作する適切なクライアント ID とキーを取得できないように見えることです。私は、Google の API コンソールの [API Access] タブから、ほぼすべての適切な ID とキーの組み合わせを使用しました。資格情報をテストするために、http: //gmaps-samples.googlecode.com/svn/trunk/urlsigning/index.htmlで Google から PHP コードを直接コピーして 、リクエストが正しく署名されていることを確認しました。このトピックに関する Google 開発者のビデオ ( https://www.youtube.com/watch?v=ODeXo7YIwVg ) を見たところ、これが Google のビジネス アカウントに対して行われていることが示されています。持ってるジオコーディング サービスを使用するためのビジネス アカウントを持っている必要がありますが、有効なクライアント ID とキーを取得できないようです。ビジネス以外のアカウントでこのサービスを使用するための正しい設定を知っている人はいますか? それとも可能ですか?(これはサーバー間接続であることに注意してください)

追加情報が必要な場合は、お知らせください。何か提案があればよろしくお願いします。

編集: https://developers.google.com/maps/documentation/geocoding/#Limitsにリストされている使用制限を見ると、ビジネス アカウントなしで Geocoding API を使用できることがわかります....しかし、どのように?

4

1 に答える 1

3

ドキュメントを確認しましたが、ご指摘のとおり、Geocoding API を使用するためにビジネス アカウントは必要ありません。非ビジネス アカウントをお持ちの場合は、API キーのみを渡す必要があります。クライアント ID は、ビジネス アカウントを持っている場合にのみ必要です。以下に示すように、キー自体は一意です。

https://developers.google.com/console/help/#WhatIsKey

API キーは、コンソールを使用して生成する一意のキーです。このプロジェクトで有効になっている API をアプリケーションで呼び出す必要がある場合、アプリケーションはこのキーを key=API_key パラメータとしてすべての API リクエストに渡します。このキーを使用する場合、ユーザーの操作や同意は必要なく、アカウント情報へのアクセスを許可することも、認証に使用することもありません。

以下のリンクによると、ビジネス アカウントの場合、キーの代わりにクライアント ID が使用されます。

https://developers.google.com/maps/articles/v2tov3#newkey

Maps for Business のお客様は、キーの代わりにクライアント ID を使用する必要があります。併用はできませんのでご注意ください。クライアント ID はキーに似ていますが、次の違いがあります。

  • クライアント ID を使用する Maps for Business アプリケーションは、Maps Analytics などの追加機能または制限にアクセスできる場合があります。クライアント ID は、Google Enterprise サポートから提供されます。API コンソールを使用する必要はありません。

  • Google Maps JavaScript API をロードするときは、key パラメータの代わりに client パラメータを使用します。

同じ原則が Geocoding API にも当てはまると思います。非ビジネス アカウントの一部ではない追加機能が必要な場合は、ビジネス アカウントを取得する必要があります。

キーのみを使用して Java でリクエストに署名する次のコードを実行したところ、完全に機能しました。

    public static String getAddress(String latitude, String longitude){
    String address = null;
    try {
        final String inputurl = "http://maps.googleapis.com/maps/api/geocode/xml?latlng="+ latitude + "," + longitude + "&sensor=true";
//          Sign the URL using key
        String url = getRequestURL(inputurl);
        url = "http://maps.googleapis.com" + url;

        final URL google = new URL(inputurl);
        final URLConnection geocode = google.openConnection();
        final BufferedReader in = new BufferedReader(new InputStreamReader(
                geocode.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            address += inputLine;
        }
        in.close();
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
    return null;
}

public static String getRequestURL(final String inputurl) throws IOException,
InvalidKeyException, NoSuchAlgorithmException, URISyntaxException {
    // Convert the string to a URL so we can parse it
    final URL url = new URL(inputurl);

    final URLSigner signer = new URLSigner("*INSERT YOUR KEY HERE*");
    final String request = signer.signRequest(url.getPath(), url.getQuery());

    return request;
}
于 2013-07-24T09:42:36.863 に答える