我正在使用openweathermap来获取天气数据,检测用户的位置并显示数据。。。当我在localhost中使用它时,我会得到正确的位置,但当我将它部署到heroku时,它会将位置显示为Ashburn。。。如何解决此问题?
我正在使用它来获取用户的位置:https://ip-geolocation.whoisxmlapi.com/api/v1?apiKey=myApiKey
url1='https://ip-geolocation.whoisxmlapi.com/api/v1?apiKey=MyApiKey'
res = requests.request('GET', url1)
Jdata = res.json()
city = Jdata['location']['city']
completed_url = "http://api.openweathermap.org/data/2.5/weather?
appid=myapiid&q="+city
r = requests.get(completed_url)
abcd = r.json()
abcdmain = abcd['main']
https://apiappanirudh.herokuapp.com/
访问应用程序的上述链接。。
我希望应用程序检测用户的位置,然后显示。。。位置发生变化的原因是什么?如何解决?
注意:我用的是烧瓶。
谢谢。
使用IP地理定位API时,应区分两种情况:是否从客户端和服务器端调用地理定位API。
在前一种情况下,这意味着您正在从客户端浏览器查询IP地理位置API,例如使用JavaScript。在这种情况下,大多数地理定位API都提供了一个原点端点,您可以在不指定任何IP地址的情况下调用该端点。您将获得与运行浏览器的客户端关联的IP地址的信息。下面是一个使用Ipregistry:的例子
https://api.ipregistry.co/?key=tryout&漂亮=真正的
在后一种情况下,您将收到一个到服务器的请求,并从服务器调用IP地理定位API。它可以使用PHP、NodeJS、Java,或者应用服务器或代理背后的任何编程语言。如果我们画一个流程图,它看起来如下:
A client --> Your server --> IP geolocation API
如果您在没有指定更多信息的情况下调用IP地理定位API,那么地理定位API可以做的最好的事情就是发现服务器后面的IP地址(即请求的来源(。这就是你所描述的问题和你所经历的。
希望大多数IP地理定位API都包含一个端点,您可以在其中指定查找数据的IP地址。因此,当您从服务器上的客户端收到请求时,您需要从请求中提取客户端IP地址,然后使用允许传递IP地址的专用IP地理位置API端点。
如何从服务器上收到的请求中提取客户端IP地址?这是针对您的应用程序的。这就是为什么没有一个适合所有人的解决方案。大多数情况下,会有一个请求标头,其中包含您要查找的值。例如,标头X-Forwarded-For非常常见,但不是标准的。在PHP中,您需要使用$_SERVER['REMOTE_ADDR']
。
假设您将您的客户端IP地址识别为2007.12.30,然后使用Ipregistry,您将通过向下一个端点发送HTTP get请求来获取位置和威胁数据:
https://api.ipregistry.co/200.77.121.230?key=tryout&漂亮=真正的