2013-07-01 16 views
32

मैं एक एपीआई जो वापस उपयोगकर्ता के वर्तमान स्थान (शहर) पर आधारित लौट सकते हैं रहा हूँ पर आधारित है आईपी adress.i इसके लिए खोज की है औरगूगल एपीआई, उपयोगकर्ता आईपी पते

http://freegeoip.net/json

पाया लेकिन मेरा ग्राहक Google फैन का एक बड़ा समय है और केवल किसी भी उपलब्ध Google एपीआई के लिए जोर दे रहा है, क्या कोई मेरी मदद कर सकता है।

+0

afaik, गूगल आईपी के लिए एक API नहीं है आधारित लगाने – keune

+6

आप https://geoipify.whoisxmlapi.com/ –

उत्तर

17

गूगल पहले से ही GAE में आने से सभी अनुरोधों का स्थान डेटा (देखें go, java, php और python के लिए अनुरोध हेडर प्रलेखन) जोड़ देता है। आपको X-AppEngine-Country, X-AppEngine-Region, X-AppEngine-City और X-AppEngine-CityLatLong हेडर रुचि रखना चाहिए।

एक उदाहरण इस प्रकार है:

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

कोशिश कर सकते हैं मैं अपने लिंक के माध्यम से चला गया और के लिए यह (https PHP संस्करण पाया: // डेवलपर्स। google.com/appengine/docs/php/#PHP_Request_headers) लेकिन मुझे यकीन नहीं है कि इस सेवा का उपयोग कैसे करें। मैं मूल रूप से ऐसी वेबसाइट बना रहा हूं जिसे उपयोगकर्ता के देश कोड को समझने की आवश्यकता होगी और जो आपके द्वारा उल्लिखित 'एक्स-एपइंजिन-कंट्री' हेडर के साथ आता है। AppEngine क्या है या इसका उद्देश्य क्या है? मैं बस यह जानने की कोशिश कर रहा हूं कि क्या ऐसा कुछ है जो मुझे देश कोड प्राप्त करने के लिए लागू करना चाहिए। अग्रिम धन्यवाद –

+2

यह केवल ऐप्स के लिए है, और ऐप-प्रदत्त डेटा के सर्वर-साइड प्रोसेसिंग को कवर करता है। इस प्रकार यह वेब पृष्ठों पर लागू नहीं है। – Patanjali

+0

मैं @ पतंजलि से सहमत हूं इस तिथि तक Google एपीआई अपने पैरामीटर के हिस्से के रूप में 'आईपी पता' स्वीकार नहीं करता है। यह आपको कॉलर का भौगोलिक स्थान देगा। यदि आप अपने एपीआई कॉल को अपने सर्वर कोड में रखते हैं, तो यह आपको अपने सर्वर का भौगोलिक स्थान देता है। जब तक कि यह क्लाइंट साइड कोड न हो, जो आपको उपयोगकर्ता का भू-स्थान दे सकता है। (मैं इसे किसी भी तरह के विभिन्न ब्राउज़रों के लिए परीक्षण करता हूं) –

10

ऐसा लगता है कि गूगल सक्रिय रूप से आईपी-लोकेशन मैपिंग का उपयोग कर पर frowns:

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

कि लेख W3C जियोलोकेशन एपीआई का उपयोग कर प्रोत्साहित करती है। मैं एक छोटे से उलझन में था, लेकिन लगभग हर प्रमुख ब्राउज़र पहले से ही जियोलोकेशन एपीआई का समर्थन करता है की तरह यह लग रहा है:

http://caniuse.com/geolocation

+0

अफसोस की बात है कि इसका समर्थन करने का मतलब यह नहीं होगा कि उपयोगकर्ता की सुविधा सक्षम है, caniuse.com द्वारा समर्थित ब्राउज़र संस्करणों में से कई का समर्थन है, लेकिन यह डिफ़ॉल्ट रूप से अक्षम है। – Dan

+1

@ जेरेमी वाधम इस एपीआई के साथ परिशुद्धता काफी अच्छी है, लेकिन मैं उपयोगकर्ता के देश के आधार पर कुछ छूट को सक्षम करने और उपयोगकर्ता को इसे अनुमति देने की अनुमति देने के लिए एक तरीका ढूंढ रहा हूं, यह केवल पूरे विचार को तोड़ देगा। क्या आपके पास कोई सुझाव है कि उपयोगकर्ता के देश को एक साधारण तरीके से कैसे लटकाया जाए जो कि तृतीय पक्ष सेवाओं या शायद केवल Google पर निर्भर न हो, क्योंकि यह मेरी नियोक्ता ट्रस्ट की एकमात्र सेवा है। –

+0

दो साल बाद, लेकिन अभी भी प्रासंगिक है। ओपी का संदर्भ सर्वर-साइड प्रतीत होता है, लेकिन Google सामान क्लाइंट-साइड है (W3C के अनुसार * navigator.geolocation * प्रॉपर्टी का उपयोग करता है, जावास्क्रिप्ट की आवश्यकता होती है, जिसका अर्थ है कि आप स्थान के आधार पर किसी पृष्ठ की सेवा नहीं कर सकते हैं। freegeoip।नेट एट अल समाधान पूरी तरह सर्वर-साइड हो सकते हैं, हालांकि वे आईपी पते पर भरोसा करते हैं (यानी, कोई वीपीएन नहीं)। – Patanjali

2

Here's a script है कि उपयोगकर्ताओं को डाक कोड प्राप्त करने और एक इनपुट फ़ील्ड पॉप्युलेट करने के लिए गूगल एपीआई का उपयोग करेगा।

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

अरे इसे साझा करने के लिए धन्यवाद! मैं इस तरह के फ़ंक्शन को कॉल करने की कोशिश कर रहा हूं (फ़ंक्शन() { var showPostCode = document.getElementById ("showPS"); var ps = postalCodeLookup (showPostCode); showPostCode.value() = ps; }) ; लेकिन कोई खुशी नहीं। मैं क्या गलत कर रहा हूं? –

संबंधित मुद्दे