从Google获取当前位置,而无需向用户发送身份验证

时间:2012-07-05 20:15:44

标签: php javascript google-api

有没有办法使用Google的API检索用户当前的邮政编码而不明确要求他们获得许可?我了解Google现在使用OAuth 2.0,这是一种身份验证协议,用户必须允许特定服务的权限。但是,我想找一个用户的位置,而不必问他们!

这可能吗?我对翻译IP地址不感兴趣,因为它们通常会返回错误的结果。同样,HTML5的地理位置功能也不起作用,因为它也需要用户权限。

2 个答案:

答案 0 :(得分:2)

您必须使用Google(或Facebook ...或[在此处插入社交网络])oAuth用户才能访问有关该用户存储的任何信息(如家庭或工作“邮政编码”)第三方网站。但经过身份验证后,您将无法获得用户的当前邮政编码或位置。您想要他们当前的位置或他们的家庭住址或工作地址 - 您可能想澄清一下。无论如何,如果你想要用户的当前位置,我建议使用HTML5地理位置API。

地理定位API的最简单使用如下所示:

function get_location() {
  navigator.geolocation.getCurrentPosition(show_map);
}

没有检测,没有错误处理,也没有选项。您的Web应用程序应该至少包含前两个。要检测对地理位置API的支持,您可以使用Modernizr

function get_location() {
  if (Modernizr.geolocation) {
    navigator.geolocation.getCurrentPosition(show_map);
  } else {
    // no native support; maybe try Gears?
  }
}

HTML5地理定位的资源:

答案 1 :(得分:2)

我之前必须在类似的情况下做类似的事情。我得到的答案可能不是最漂亮的东西,但它确实有效,你可以得到一个邮政编码。

有一些类似的服务,但我发现MaxMind很擅长给我一个相当准确的lat,lon(至少对于城市/邮政编码读数)。这摆脱了你必须自己在php中处理这个问题。

maxmind link

警告:您必须提供一个返回maxmind的链接,或购买每月许可证。对不起,你可以去寻找其他服务 - 否则你必须自己制作一个。

因此,我们的想法是将您的脚本包含在您的页面上 - 现在您已在页面上显示这些功能。

function geoip_country_code() { return 'US'; }
function geoip_country_name() { return 'United States'; }
function geoip_city()         { return 'San Diego'; }
function geoip_region()       { return 'CA'; }
function geoip_region_name()  { return 'California'; }
function geoip_latitude()     { return '32.7153'; }
function geoip_longitude()    { return '-117.1573'; }
function geoip_postal_code()  { return ''; }
function geoip_area_code()    { return '619'; }
function geoip_metro_code()   { return '825'; }

从这里你需要做一些地理编码(通过google或选择另一个)。从地理编码中获取您的响应,您可以循环搜索结果并提取邮政编码。如果你需要更多的输入,我可以挖出更多的脚本。

可能不是最优雅的方法,但我也被限制为无法使用地理位置,并且只能在仅限javascript的环境中使用。这对我有用。欢呼声。