从 Google 获取当前位置,而无需将用户送去进行身份验证


Get current location from Google without sending users away for authentication

有没有办法使用谷歌的API来检索用户的当前邮政编码,而无需明确征求他们的许可?我知道谷歌现在使用OAuth 2.0,这是一种身份验证协议,用户必须允许对特定服务的权限。但是,我想找到用户的位置,而不必询问他们!

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

你肯定必须使用谷歌(或Facebook...或[在此处插入社交网络]),以便访问存储在第三方网站上的有关该用户的任何信息(例如家庭或工作"邮政编码")。但是,一旦通过身份验证,您将无法获得用户的当前邮政编码或位置。 您想要他们当前的位置或家庭住址还是工作地址 - 您可能需要澄清。 无论如何,如果你想要用户的当前位置,我建议使用HTML5地理位置API。

地理位置 API 的最简单用法如下所示:

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

这没有检测,没有错误处理,也没有选项。您的 Web 应用程序可能至少应该包含其中的前两个。若要检测对地理位置 API 的支持,可以使用现代化:

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

HTML5 地理定位资源:

  • http://diveintohtml5.info/geolocation.html
  • http://html5doctor.com/finding-your-position-with-geolocation/
  • HTML5 地理位置 API 的 W3 规范:http://dev.w3.org/geo/api/spec-source.html

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

有一些

类似的服务,但我发现MaxMind非常适合为我提供一个非常准确的纬度(至少对于城市/邮政编码读数)。这摆脱了你必须在 php 中自己处理这个问题。

麦克思通链接

警告:您必须将链接返回给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'; }

从这里你需要做一些地理编码(通过谷歌或选择另一个)。从地理编码中获取响应,您可以循环浏览结果并提取邮政编码。如果您需要有关该步骤的更多输入,我可能会挖掘更多脚本。

可能不是最优雅的方法,但我也受限于无法使用地理位置,并且处于仅JavaScript的环境中。这对我有用。干杯。