質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

582閲覧

python google map apiでジオコーディング

Y.Hdesu

総合スコア12

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/02/18 08:26

python2.7を使い、下記コードを入力すると「UnicodeEncodeError: 'ascii' codec can't encode characters in position 27-32: ordinal not in range(128)」というエラーが表示され、プログラムがとまります。test.txtの中身は下記にあります。対処方法を教えていただけないでしょうか。よろしくお願いします。
川口駅
赤羽駅


-- coding: utf-8 --

import requests
import json
from time import sleep

wait_time = 0.3 # (sec)
base_url = 'https://maps.googleapis.com/maps/api/geocode/json?language=ja&address={}&key=***'
headers = {'content-type': 'application/json'}

queries = []
with open(r'C:\work\test.txt', 'r') as f:
queries = f.readlines()

for q in queries:
q = q.strip()
url = base_url.format(q)
r = requests.get(url, headers=headers)
data = r.json()
if 'results' in data and len(data['results']) > 0 and 'formatted_address' in data['results'][0]:
print '{}@{}@{}@{}'.format(
q,
data['results'][0]['formatted_address'].encode('utf-8'),
data['results'][0]['geometry']['location']['lat'],
data['results'][0]['geometry']['location']['lng']
)
else:
print '{}@ @ @ '.format(q)
sleep(wait_time)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

入力ファイルのC:\work\test.txtがSJISになっていませんか?
UTF-8でファイルを作成したところ動作しました。

2019/02/19 8:01追記
ファイル出力にしたコードを載せておきます。
URLのアスタリスクは実際には有効なAPIキーが入ります。

Python

1# -*- coding: utf-8 -*- 2 3import requests 4import json 5from time import sleep 6 7wait_time = 0.3 # (sec) 8base_url = 'https://maps.googleapis.com/maps/api/geocode/json?language=ja&address={}&key=***' 9headers = {'content-type': 'application/json'} 10 11queries = [] 12with open(r'C:\work\test.txt', 'r') as f: 13 queries = f.readlines() 14 for query in queries: 15 query = query.strip() 16 url = base_url.format(query) 17 r = requests.get(url, headers=headers) 18 data = r.json() 19 if 'results' in data and len(data['results']) > 0 and 'formatted_address' in data['results'][0]: 20 with open(r'C:\work\test_out.txt', 'a') as out: 21 out.write('{}@{}@{}@{}'.format( 22 query, 23 data['results'][0]['formatted_address'].encode('utf-8'), 24 data['results'][0]['geometry']['location']['lat'], 25 data['results'][0]['geometry']['location']['lng'] 26 ))

投稿2019/02/18 09:00

編集2019/02/18 23:03
mackerel6.023

総合スコア317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.Hdesu

2019/02/18 09:31

ファイルはUTF-8で作成しています。やはり「UnicodeEncodeError: 'ascii' codec can't encode characters in position 27-32: ordinal not in range(128)」のエラーがでます
mackerel6.023

2019/02/18 12:04

動作環境(OSなど)を教えていただけますか? それとエラーが出ている行番号がわかれば追加で情報をいただけますか?
Y.Hdesu

2019/02/18 12:38

windows7 64bitになります。エラーは下記で出ています。 else: print '{}@ @ @ '.format(q) sleep(wait_time)
mackerel6.023

2019/02/18 13:32

まず、そちらの分岐に出ているということはまずgoogle map apiからデータが取得できていないようですね。 base_url のkey=***は実際には有効なAPIキーを入力していますでしょうか? windows7で実行しているということはコマンドプロンプトでしょうか? その場合文字コードがUTF8ではないため、標準出力で不具合が出ている可能性があります。 一度ファイル出力されてみてはいかがでしょうか? Windows10で実行した場合以下のように出ます。 川口駅@日本、〒332-0017 埼玉県川口市栄町3丁目1−21 川口駅@35.8019293@139.7176375 赤羽駅@日本、赤羽駅@35.7776951@139.7205691
Y.Hdesu

2019/02/18 21:11

色々とアドバイスありがとうございます。 apiキーは有効です。下記のurlを入力したら赤羽駅の情報がかえってきました。https://maps.googleapis.com/maps/api/geocode/json?address=赤羽駅&key=*** はい、コマンドプロンプト又はpyscripterから実行しています。 ファイル出力するコードを教えていただけないでしょうか。
mackerel6.023

2019/02/18 23:05

コードは回答本文に載せました。 ファイル出力部分のみの変更です。
Y.Hdesu

2019/02/19 00:31

ありがとうございました。動作しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問