2013-07-01 30 views
32

szukam API, który może wrócić z powrotem bieżącą lokalizację użytkownika (Miasto) opartą na jego adress.i IP poszukiwanej przez niego i okazałoGoogle API dla lokalizacji, na podstawie użytkownika adresu IP

http://freegeoip.net/json

Ale mój klient jest wielkim fanem Google i nalega tylko na dostępne API Google. Czy ktoś może mi w tym pomóc?

+0

afaik, google nie ma api do IP na podstawie lokalizacji – keune

+6

możesz spróbować https://geoipify.whoisxmlapi.com/ –

Odpowiedz

17

Google już dołącza dane o lokalizacji do wszystkich żądań przybywających do GAE (patrz wymagać dokumentacji Stół do go, java, php i python). Powinieneś być zainteresowany nagłówkami X-AppEngine-Country, X-AppEngine-Region, X-AppEngine-City i X-AppEngine-CityLatLong.

Przykładem wygląda następująco:

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

Przeszedłem przez twój link i znalazłem wersję PHP dla niego (https: // developerów. google.com/appengine/docs/php/#PHP_Request_headers), ale nie jestem pewien, jak korzystać z tej usługi. Zasadniczo tworzę stronę internetową, która będzie musiała wymyślić kod kraju użytkownika i która pochodzi od nagłówka 'X-AppEngine-Country', o którym wspomniałeś. Czym jest AppEngine lub jaki jest jego cel? Po prostu próbuję się dowiedzieć, czy to coś, co powinienem wdrożyć, żeby uzyskać kod kraju. Z góry dziękuję –

+2

Jest to tylko dla aplikacji i obejmuje przetwarzanie danych aplikacyjnych po stronie serwera. W związku z tym nie ma zastosowania do stron internetowych. – Patanjali

+0

Zgadzam się z @Patanjali Do tej pory Google API nie akceptuje "adresu IP" jako części swoich parametrów. Da ci to geolokalizację dzwoniącego. Jeśli umieścisz to wywołanie api w swoim kodzie serwera, da ci to geolokalizację twojego serwera. O ile nie jest to kod po stronie klienta, który może zapewnić lokalizację geograficzną użytkownika. (I tak przetestowałbym to dla różnych przeglądarek). –

10

Wygląda Google aktywnie marszczy brwi na użyciu mapowania IP-to-lokalizacji:

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

Ten artykuł zachęca do korzystania z W3C geolokalizacji API. Byłem trochę sceptyczny, ale wygląda na to, prawie każdy większy Przeglądarka już obsługuje API geolokalizacji:

http://caniuse.com/geolocation

+0

Niestety posiadanie wsparcia nie oznacza, że ​​użytkownik ma włączoną funkcję, wiele wersji przeglądarki wymienionych jako obsługiwane przez caniuse.com ma wsparcie, ale jest domyślnie wyłączone. – Dan

+1

@Jeremy Wadhams Precyzja jest całkiem dobra w przypadku tego interfejsu API, ale szukam sposobu na umożliwienie pewnych rabatów w zależności od kraju użytkownika i na to, że użytkownik musi pozwolić na to, by po prostu złamał cały pomysł. Czy masz jakieś wskazówki, jak zdobyć kraj użytkownika w prosty sposób, który nie byłby zależny od usług zewnętrznych lub może tylko google, ponieważ jest to jedyna usługa, której ufa mój pracodawca. –

+0

Dwa lata później, ale nadal istotne. Kontekst PO wydaje się być po stronie serwera, ale rzeczy Google są po stronie klienta (używa właściwości * navigator.geolocation * zgodnie z W3C, wymagając javascript, co oznacza, że ​​nie można wyświetlać strony w oparciu o lokalizację. freegeoip.net i al rozwiązania mogą być całkowicie po stronie serwera, ale polegają na tym, że adres IP jest poprawny (to znaczy nie ma VPN). – Patanjali

2

Here's a script że będzie korzystał z API Google nabyć użytkownikom kod pocztowy i wypełnić pole wejściowe.

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.'); 
     } 
    }; 
} 

Można dostosować odpowiednio, aby uzyskać różne informacje. Aby uzyskać więcej informacji, sprawdź numer Google Maps API documentation.

+0

Hej dziękuję za podzielenie się tym! Próbuję wywołać funkcję w ten sposób '(function() { var showPostCode = document.getElementById (" showPS "); var ps = postalCodeLookup (showPostCode); showPostCode.value() = ps; }) ; 'ale nie ma radości. Co ja robię źle? –

Powiązane problemy