Я пытаюсь получить информацию address из запроса, используя Google API и json . Но я получаю только адрес последнего элемента, а не агрегированные. Как решить эту проблему в python ?
Мой код состоит из 3 частей:
1. извлечь информацию о широте и долготе из файла json (sample.json).
2. запросить адрес с помощью Google API
3. извлечь адрес из результата запроса (формат json) и записать файл (test.csv)
Во-первых, мой входной файл json (sample.json) выглядит следующим образом:
{"last_updated":1554148141,
"ttl":10,
"data":{"stations":
[{"station_id":"1","external_id":"0b0fda98-08f3-11e7-a1cb-3863bb33a4e4","name":"Métro Champ-de-Mars (Viger / Sanguinet)","short_name":"6001","lat":45.51035067563653,"lon":-73.55650842189789,"rental_methods":["CREDITCARD","KEY"],"capacity":33,"electric_bike_surcharge_waiver":false,"eightd_has_key_dispenser":false,"has_kiosk":true},
{"station_id":"2","external_id":"0b0fdf05-08f3-11e7-a1cb-3863bb33a4e4","name":"Ste-Catherine / Dezery","short_name":"6002","lat":45.539385081961676,"lon":-73.54099988937377,"rental_methods":["CREDITCARD","KEY"],"capacity":19,"electric_bike_surcharge_waiver":false,"eightd_has_key_dispenser":false,"has_kiosk":true},
{"station_id":"3","external_id":"0b0fe114-08f3-11e7-a1cb-3863bb33a4e4","name":"Clark / Evans","short_name":"6003","lat":45.51100666600306,"lon":-73.56760203838348,"rental_methods":["CREDITCARD","KEY"],"capacity":19,"electric_bike_surcharge_waiver":false,"eightd_has_key_dispenser":false,"has_kiosk":true}
] } }
И следующий мой код на python:
(API_KEY - это мой личный ключ, помеченный как «****».)
import json
import requests
import csv
input_json = json.load(open('sample.json'))
for i in input_json ['data']['stations']:
lat = i['lat']
lon = i['lon']
API_URL = "https://maps.googleapis.com/maps/api/geocode/json?latlng={},{}&formatted_address&result_type=street_address&key=".format(
lat, lon)
API_KEY = '***********'
try:
response = requests.get(API_URL+API_KEY, auth=('user','pass'))
data = response.json()
address = []
for i in data['results']:
a = i['formatted_address']
address.append(a)
f = csv.writer(open('test.csv', 'w'))
f.writerow(address)
except Exception as e:
print(e)
else:
print(address)
Когда я запускаю этот код, результат выглядит следующим образом:
['2025 Rue Clark, Montréal, QC H2X 2R6, Canada', '2026 Rue Clark, Montréal, QC H2X 1Y8, Canada']
Согласно запросу Google, результат должен показать всего 6 адресов (для каждого элемента 2 адреса).
Мой результат показывает только 2 адреса последнего элемента.
Я не знаю, как правильно кодировать часть цикла. Не могли бы вы помочь мне с этим вопросом?