2013-07-01 43 views
32

我正在尋找一個API,它可以返回回此基礎上用戶的當前位置(市)的IP adress.i搜查,結果發現谷歌API的位置,根據用戶的IP地址

http://freegeoip.net/json

但是我的客戶是Google Fan的大好時機,並且只堅持任何可用的Google API,有人能幫我解決這個問題。

+0

afaik,谷歌沒有基於ip的ippi定位 – keune

+6

你可以試試https://geoipify.whoisxmlapi.com/ – 2017-12-16 04:03:29

回答

17

Google已經將位置數據附加到所有進入GAE的請求中(請參閱go,java,php和的請求標頭文檔)。您應該有興趣X-AppEngine-CountryX-AppEngine-Region,X-AppEngine-CityX-AppEngine-CityLatLong標題。

一個例子是這樣的:

X-AppEngine-Country:US 
X-AppEngine-Region:ca 
X-AppEngine-City:norwalk 
X-AppEngine-CityLatLong:33.902237,-118.081733 
+0

我經歷了你的鏈接並找到了它的PHP版本(https://開發者。 google.com/appengine/docs/php/#PHP_Request_headers),但我不確定如何使用此服務。我基本上是建立一個網站,它需要找出用戶的國家代碼,以及你提到的X-AppEngine-Country標題。什麼是AppEngine或它的目的是什麼?我只是想知道是否應該實施一些國家代碼。在此先感謝 –

+2

這僅適用於應用程序,並涵蓋應用程序提供的數據的服務器端處理。因此它不適用於網頁。 – Patanjali

+0

我同意@Patanjali到目前爲止,Google API不接受'IP地址'作爲其參數的一部分。它會給你來電者的地理位置。如果你把這個api調用放在你的服務器代碼中,它會給你服務器的地理位置。除非這是客戶端代碼,否則可能會給您用戶的地理位置。 (不管怎樣,我會針對不同瀏覽器測試它) –

10

它看起來像谷歌積極不贊成使用IP到位置映射:

https://developers.google.com/maps/articles/geolocation?hl=en

這篇文章鼓勵使用W3C地理定位API。我有點懷疑,但它看起來像幾乎所有的主流瀏覽器已經支持的地理位置API:

http://caniuse.com/geolocation

+0

不幸的是,支持並不意味着用戶已啓用該功能,許多caniuse.com支持的瀏覽器版本都支持,但默認情況下它是禁用的。 – Dan

+1

@Jeremy Wadhams這個API的精度非常好,但是我正在尋找一種方法來根據用戶的國家啓用某些折扣,並且讓用戶不得不允許它打破整個想法。你有沒有關於如何以簡單的方式獲得用戶國家的竅門的提示,這種方式不依賴於第三方服務或者僅僅是谷歌,因爲它是我的僱主信任的唯一服務。 –

+0

兩年後,但仍然相關。 OP的上下文似乎是服務器端的,但Google的東西是客戶端的(根據W3C使用* navigator.geolocation *屬性,需要javascript,這意味着你不能根據位置提供頁面。 freegeoip。net等解決方案可以完全服務器端,儘管它們依賴於IP地址是正確的(即沒有VPN)。 – Patanjali

2

Here's a script將使用谷歌API來獲取用戶的郵政編碼和填充輸入字段。

function postalCodeLookup(input) { 
    var head= document.getElementsByTagName('head')[0], 
     script= document.createElement('script'); 
    script.src= '//maps.googleapis.com/maps/api/js?sensor=false'; 
    head.appendChild(script); 
    script.onload = function() { 
     if (navigator.geolocation) { 
      var a = input, 
       fallback = setTimeout(function() { 
        fail('10 seconds expired'); 
       }, 10000); 

      navigator.geolocation.getCurrentPosition(function (pos) { 
       clearTimeout(fallback); 
       var point = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude); 
       new google.maps.Geocoder().geocode({'latLng': point}, function (res, status) { 
        if (status == google.maps.GeocoderStatus.OK && typeof res[0] !== 'undefined') { 
         var zip = res[0].formatted_address.match(/,\s\w{2}\s(\d{5})/); 
         if (zip) { 
          a.value = zip[1]; 
         } else fail('Unable to look-up postal code'); 
        } else { 
         fail('Unable to look-up geolocation'); 
        } 
       }); 
      }, function (err) { 
       fail(err.message); 
      }); 
     } else { 
      alert('Unable to find your location.'); 
     } 
     function fail(err) { 
      console.log('err', err); 
      a.value('Try Again.'); 
     } 
    }; 
} 

您可以相應地調整以獲取不同的信息。欲瞭解更多信息,請查看Google Maps API documentation

+0

嘿謝謝分享!我試圖調用你的函數,就像這樣:'(function(){var_showPostCode = document.getElementById(「showPS」); var ps = postalCodeLookup(showPostCode); showPostCode.value()= ps; }) ;'但沒有喜樂。我究竟做錯了什麼? –