由于用户输入是千奇百怪的,除了格式语法不合要求之外的,即便是所谓的合法数据也是五花八门。尤其是地址,所有才由此文。

百度Api注册一个账号,创建一个应用后就会有一个`ak`的参数,就够了。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

Python(号称胶水语言),此次所及的Demo是Python交互式编程的做法,只是为了方便展示。所得地址有可能是所在城市的地标地址,从功能层面来说已经尽力了。

 1 # -*- coding: utf-8 -*-
 2 
 3 import os
 4 import sys
 5 import json
 6 import urllib
 7 import requests
 8 from urllib import urlopen, quote
 9 
10 # Api
11 url = 'http://api.map.baidu.com/geocoder/v2/'
12 # 输出类型
13 output = 'json'
14 # 密钥
15 ak = 'ejxfGfepWQOUT2toG8GeGPN0rATxhBds'
16 # 为防止乱码,先进行编码
17 address = quote(sys.argv[1])
18 uri = url + '?' + 'address=' + address  + '&output=' + output + '&ak=' + ak 
19 # 请求第一次获得经纬度
20 req = requests.get(uri)
21 # 返回为json,进行解析
22 temp = json.loads(req.text)
23 # 获得经纬度
24 lat = temp['result']['location']['lat']
25 lng = temp['result']['location']['lng']
26 # 请求第二次用经纬度去获得位置信息
27 url_reback = 'http://api.map.baidu.com/geocoder/v2/?location='+bytes(lat)+','+bytes(lng)+'&output='+output+'&pois=1&ak='+ak
28 req_reback = requests.get(url_reback)
29 data = json.loads(req_reback.text)
30 
31 print "省:\t", data['result']['addressComponent']['province']
32 print "市:\t", data['result']['addressComponent']['city']
33 print "区:\t", data['result']['addressComponent']['district']
34 print "街:\t", data['result']['addressComponent']['street']
35 print "地址:\t", data['result']['formatted_address']

结果展示:

$ python test-baidu-api.py '石家庄'
省:    河北省
市:    石家庄市
区:    长安区
街:    中山东路
地址:    河北省石家庄市长安区中山东路216号
$ python test-baidu-api.py '郭守敬大街'
省:    河北省
市:    邢台市
区:    桥西区
街:    郭守敬北路
地址:    河北省邢台市桥西区郭守敬北路287号

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄