pythonにおけるhttpやjsonの練習の為、以前、perlで書いたentryをpython化
geocoding (住所→座標(緯度経度))変換は、google map apiより Yahoo!ジオコーダAPIがよさそ - end0tknr's kipple - 新web写経開発
YOLP(地図):Yahoo!ジオコーダAPI - Yahoo!デベロッパーネットワーク
#!/usr/local/bin/python # -*- coding: utf-8 -*- import json import socket import ssl import traceback import urllib import urllib2 def main(): # オレオレ証明書のurlにアクセスする場合 # SSL: CERTIFICATE_VERIFY_FAILED エラーになる為 ssl._create_default_https_context = ssl._create_unverified_context socket.setdefaulttimeout(5); # sec u_agent = urllib2.build_opener() u_agent.addheaders = [('User-Agent','python-urllib2-test')]; api_end_point = 'https://map.yahooapis.jp/geocode/V1/geoCoder' params = { 'appid' : 'ないしょ', 'output' :'json', 'ei':'UTF-8', "al":4, #level -> 1=都道府県, 2=市区町村, 3=町/大字, 4=丁目/字 "recursive": 'true', #見つからない場合、階層上位を探す "query": '東京都渋谷区渋谷1-11' } encoded_params = urllib.urlencode(params) req_url = api_end_point + "?" + encoded_params # print req_url try: # openの引数1コはGET, 2コはPOST response = u_agent.open(req_url) except urllib2.HTTPError as err: print("HTTP ERROR "+ err.reason) return except socket.timeout as err: print("SOCKET.TIMEOUT") return except Exception as err: print("UNKNOWN ERROR") print traceback.format_exc() return else: pass res_all_json = response.read() res_all = json.loads( res_all_json ) res_geocodes = res_all["Feature"] for ret_geocode in res_geocodes: disp_line = "\t".join([ret_geocode["Geometry"]["Coordinates"], ret_geocode["Property"]["Address"] ]); print disp_line if __name__ == '__main__': main()
↑こう書くと、↓こうできます
$ ./foo.py 139.70199214,35.66043257 東京都渋谷区渋谷1丁目