我正在构建一个java Web应用程序,它需要https://developers.google.com/maps/documentation/geocoding/上定义的googles地理编码服务。我的应用程序是全部设置,一切正常,我现在正尝试签署我的请求以允许API的其他功能,例如额外的费率限制计费等...
我遇到的问题是我似乎无法获得适用于地理编码API的客户端ID和密钥。我在Google API控制台的API Access选项卡中使用了id和key的所有合理组合。要测试我的凭据,我已直接从谷歌http://gmaps-samples.googlecode.com/svn/trunk/urlsigning/index.html复制PHP代码,以确保我的请求被正确签名。我看了一个谷歌开发者关于这个主题的视频(https://www.youtube.com/watch?v=ODeXo7YIwVg)并且它显示了这是为Google商业帐户完成的,在阅读了谷歌的API文档后,你似乎没有拥有一个企业帐户使用地理编码服务,但我似乎无法获得有效的客户端ID和密钥为我工作。有谁知道在非商业帐户上使用此服务的正确设置?或甚至可能吗? (请记住这是服务器到服务器的连接)
如果有人需要其他信息,请告诉我们。我会很感激任何建议。
编辑:查看https://developers.google.com/maps/documentation/geocoding/#Limits上列出的使用限制,您会发现这意味着您可以在没有商业帐户的情况下使用地理编码API ......但是如何使用?
答案 0 :(得分:3)
我浏览了文档,正如您正确指出的那样,您不需要使用商家帐户来使用地理编码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 Analytics。您的客户ID将由Google Enterprise支持人员提供给您。您无需使用API控制台。
加载Google Maps JavaScript API时,您将使用client参数而不是key参数。
我猜这个原理同样适用于地理编码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;
}