由于用户输入是千奇百怪的,除了格式语法不合要求之外的,即便是所谓的合法数据也是五花八门。尤其是地址,所有才由此文。
百度Api注册一个账号,创建一个应用后就会有一个`ak`的参数,就够了。
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号