Я перебираю словарь с местами путешествия и датами начала / окончания. Я запрашиваю информацию о погоде для этих дат из API и получаю (по крайней мере, по большей части) список JSON ответов. Затем я перебираю список ответов JSON, используя условные выражения (if / elif), чтобы извлечь информацию, которую я хочу сохранить, и добавить информацию в пустые списки. Когда я распечатываю списки позже, значения повторяются до 5 или более раз (слишком много раз для параметров запроса, которые я ввожу).
baseURL = "https://api.globe.gov/search/v1/measurement/protocol/measureddate/point/distance/?protocols=air_temp_dailies&protocols=humidity_noons&protocols=precipitations&protocols=sky_conditions"
## iterrate through weather_params dict to pull out query parameters
## range(1,4) is because there are 3 cities in the dict and the keys are integers (need to start at 1)
for j in range(1,4):
travel_start = weather_params["travel_details"][j]["traveldates_start"]
travel_end = weather_params["travel_details"][j]["traveldates_end"]
start_date = f"2018-{travel_start}"
end_date = f"2018-{travel_end}"
city = weather_params["travel_details"][j]["city"]
location = gn.geocode(city)
time.sleep(5)
lat = location.latitude
lon = location.longitude
## insert parameters into API query
query = f"{baseURL}&startdate={start_date}&enddate={end_date}&lat={lat}&lon={lon}&distanceinkm=100&geojson=FALSE&sample=FALSE"
## run API query for each city at a time
response = requests.get(f'{query}').json()
## save query response into variable to extract weather info
JSON_ = response["results"] ##LIST of dicts
# print(JSON_)
## iterate through JSON_ list for each item[i], which are dicts
for i in range(len(JSON_)):
## create conditional to pull data from response (JSON_ list) for city[i]
if JSON_[i]['protocol'] == 'air_temp_dailies':
### Append JSON response values to lists for each output variable
date.append(JSON_[i]['measuredDate'])
max_temp.append(JSON_[i]['data']['airtempdailiesMaximumTemp'])
min_temp.append(JSON_[i]['data']['airtempdailiesMinimumTemp'])
latitude.append(JSON_[i]['latitude'])
longitude.append(JSON_[i]['longitude'])
i = i + 1
elif JSON_[i]['protocol'] == 'humidity_noons':
humidity.append(JSON_[i]['data']['humiditynoonsRelativeHumidityPercent'])
i = i + 1
elif JSON_[i]['protocol'] == 'precipitations':
precip.append(JSON_[i]['data']['precipitationsOccurrenceType'])
i = i + 1
else:
date.append(np.nan)
max_temp.append(np.nan)
min_temp.append(np.nan)
latitude.append(np.nan)
longitude.append(np.nan)
humidity.append(np.nan)
precip.append(np.nan)
i = i + 1
print(city, travel_start, travel_end, lat, lon, query)
del JSON_
j = j + 1
Попытка: я изначально сохранил ответы JSON от запрос в список, а затем итерированный по этому списку в другой ячейке для извлечения информации, но он стал слишком сложным для итерации по стольким спискам (например, список списков), поэтому я решил, что переместил for-l oop извлекая информацию из ответа в фактический запрос l oop Я мог убить двух зайцев одним l oop гигантом l oop.
Я также попытался удалить различные циклы for, но обычно он извлекает только данные первого города, а не остальные. либо у меня два цикла for на 45 записей данных, либо один for-l oop с 4 записями данных. Мне нужно что-то среднее, около 13 записей данных дают или берут.
когда я: print(len(date),len(max_temp),len(min_temp),len(precip),len(humidity))
print(f"date{date}")
вывод: 45 45 45 45 52 дата ['2018-03-03', ' 2018-03-04 ',' 2018-03-05 ',' 2018-03-06 ', nan, nan, nan,' 2018-03-12 ',' 2018-03-13 ',' 2018-03- 14 ',' 2018-03-15 ', nan, nan, nan, nan,' 2018-03-12 ',' 2018-03-13 ',' 2018-03-14 ',' 2018-03-15 ' , «2018-03-12», «2018-03-13», «2018-03-14», «2018-03-15», Nan, «2018-03-12», «2018-03-13» , «2018-03-14», «2018-03-15», «2018-03-12», «2018-03-13», «2018-03-14», «2018-03-15», нан. , нан, нан, нан, нан, нан, нан, нан, нан, нан, нан, нан, нан, нан, нан, нан]