wol*_*ang 2 python json openstreetmap python-requests nominatim
我从这个URL获取JSON数据
http://nominatim.openstreetmap.org/?q=san%20francisco&format=json&addressdetails=1&limit=1
在Web浏览器上查看时输出
[{"display_name":"San Francisco City and County, California, United States of America","class":"boundary","type":"administrative","importance":0.88836369596997,"icon":"http:\/\/nominatim.openstreetmap.org\/images\/mapicons\/poi_boundary_administrative.p.20.png","address":{"county":"San Francisco City and County","state":"California","country":"United States of America","country_code":"us"}}]
Run Code Online (Sandbox Code Playgroud)
当我从一个简单的python程序中获取相同的URL时
import requests
r = requests.get('http://nominatim.openstreetmap.org/?q=san%20francisco&format=json&addressdetails=1&limit=1')
json_data = r.json()
print json_data
Run Code Online (Sandbox Code Playgroud)
这就是我得到的,
[{u'display_name': u'SF, California, United States of America', u'importance': 0.68836369596997, u'place_id': u'127766562', u'lon': u'-122.4629897', u'lat': u'37.7647993', u'osm_type': u'relation', u'licence': u'Data \xa9 OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright', u'osm_id': u'396487', u'boundingbox': [u'37.63983', u'37.9298443', u'-123.1738249', u'-122.2817799'], u'type': u'administrative', u'class': u'boundary', u'address': {u'county': u'SF', u'country': u'United States of America', u'state': u'California', u'country_code': u'us'}, u'icon': u'http://nominatim.openstreetmap.org/images/mapicons/poi_boundary_administrative.p.20.png'}]
Run Code Online (Sandbox Code Playgroud)
请注意display_name以.开头 SF,California, Unite.....
我已经尝试删除所有历史记录/ cookie /缓存甚至重新启动计算机
到底是怎么回事?
服务器查找Accept-Language标头; 不发送一个,你得到缩写,发一个说你接受英语,你得到全名:
>>> import requests
>>> url = 'http://nominatim.openstreetmap.org/'
>>> params = {'q': 'san francisco', 'format': 'json', 'addressdetails': 1, 'limit': 1}
>>> requests.get(url, params=params).json()[0]['display_name']
u'SF, California, United States of America'
>>> requests.get(url, params=params, headers={'Accept-Language': 'en'}).json()[0]['display_name']
u'San Francisco City and County, California, United States of America'
Run Code Online (Sandbox Code Playgroud)
所述Nomatim文档确实提到的是,报头被使用,但是可以通过指定一个覆盖accept-language在查询字符串参数:
>>> print requests.get(url, params=dict(params, **{'accept-language': 'pt'})).json()[0]['display_name']
SF, Califórnia, Estados Unidos da América
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |