GET リクエストを介して、Google ジオコード API から json を取得します。
import urllib, urllib2
url = "http://maps.googleapis.com/maps/api/geocode/json"
params = {'address': 'ivory coast', 'sensor': 'false'}
request = urllib2.Request(url + "?" + urllib.urlencode(params))
response = urllib2.urlopen(request)
st = response.read()
出てくるものは次のようになります。
{
"results" : [
{
"address_components" : [
{
"long_name" : "Côte d'Ivoire",
"short_name" : "CI",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "Côte d'Ivoire",
"geometry" : { ... # rest snipped
ご覧のとおり、国名にはいくつかのエンコードの問題があります。私はこのようなエンコーディングを推測しようとしました:
import chardet
encoding = chardet.detect(st)
print "String is encoded in {0} (with {1}% confidence).".format(encoding['encoding'], encoding['confidence']*100)
どちらが返されますか:
String is encoded in GB2312 (with 99.0% confidence).
ô
私が知りたいのは、これを(サーカムフレックス付きの o) が適切に表示されるエンコーディングを使用して辞書に変換する方法です。
私は試した:
st = st.decode(encoding['encoding']).encode('utf-8')
しかし、私は得る:
{
"results" : [
{
"address_components" : [
{
"long_name" : "C么te d'Ivoire",
"short_name" : "CI",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "C么te d'Ivoire",
"geometry" : { ... # rest snipped