tp5.0 根据经纬度 获取附近信息_如何有效查到帖子和发帖人IP地址对应的信息

API中说,请求如下两个地址可以根据IP获取具体地址:

7d70ecea54b2ea1a7b157c5d5f662e72.png

请求参数如下:

dc0263ab0f314426870c27511bd74467.png

若我们请求ip为192.168.1.1的话,那么请求地址构造如下:

http://api.map.baidu.com/location/ip?ak=XXX(自己申请的API TOKEN)&ip=192.168.1.1

这里采取Python为实验语言,代码及注释如下:

e292a1eb5190169359528ed01049b678.png

  1. from urllib import request

  2. import json
  3. # ak is bound with ip

  4. baidu_api_ak = "ZX9QCmwzzItzRO5ssD7GNgEwD4OQduWR"

  5. ip_addr = "http://xxx.xxx.xxx.xxx"
  6. # Request url

  7. url = "http://api.map.baidu.com/location/ip?ak=" + baidu_api_ak + "&ip=" + ip_addr

  8. req = request.Request(url)

  9. res = request.urlopen(req)

  10. res = res.read()
  11. # Bytes to str

  12. n = res.decode(encoding='utf-8')
  13. # str to json

  14. s = json.loads(n)

  15. t = json.dumps(s, ensure_ascii=False)

  16. print(n)

  17. print(t)

上述代码大概意思是,请求url读取返回的流,并将其转化为json格式,结果如下图所示:

4bf04e12b50a4a55f6b23ccb79698f5a.png

注意到上图中,只能看到,四川省成都市这一很大范围的,而其中的"street"等字段查询出来是空的。也就是说,只能查询到一个大概的范围。

PS:返回来的值中也有经纬度,但是根据原文档来看,这些经纬度是IP所在城市中心点的经纬度。

2、先查经纬度,根据经纬度查地址。

根据IP查经纬度,百度地图没有给出API,但是墙外还是有资源。这里不贴,自己去找吧。。。

假如得到经纬度后,可以通过经纬度+百度地图API查询到详细地址。

百度地图的全球逆地址编码API如下:

http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad

如下图,假设我们已经获取到经纬度了,按照API上的规则来说,location参数后面的就是经纬度。根据经纬度,我们能查到详细地址。

a4eb9d2d79ab6e5e7acb8a65043e2d29.png

实验代码及注释如下:

  1. #! /usr/bin/env python
  2. # coding=utf-8

  3. from urllib import request

  4. import json

  5. # ak is bound with ip

  6. baidu_api_ak = "ZX9QCmwzzItzRO5ssD7GNgEwD4OQduWR"

  7. url = "http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location=30.6667,104.0670&output=json&pois=1&ak=" + baidu_api_ak

  8. req = request.Request(url)

  9. res = request.urlopen(req)

  10. res = res.read()

  11. n = res.decode(encoding='utf-8')
  12. # The result format is renderReverse&&renderReverse(json str). so....

  13. n = n[len("renderReverse&&renderReverse") + 1:-1]

  14. st = json.loads(n)
  15. # st's structure
  16. # result: XXXX
  17. # status: XXXX

  18. result = st["result"]

  19. for i in result:

  20. print(i, result[i])

结果如下:

178f1ddea3c10b662d1c070c5ee3bf5b.png

这里的地址已经很详细了,只不过没有详细的解析,看起来有点乱,要想获得指定的位置信息,可以参考API。

不过,通常这样查询的结果都不是对的,可能因为是运营商对用户保密,查出来的地址可能是运营商服务器的地址,具体是什么未做深究。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值