использование Python for-l oop для извлечения информации из нескольких вызовов API, но получение информации 5x + скопировано - PullRequest
1 голос
/ 26 марта 2020

Я перебираю словарь с местами путешествия и датами начала / окончания. Я запрашиваю информацию о погоде для этих дат из 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», нан. , нан, нан, нан, нан, нан, нан, нан, нан, нан, нан, нан, нан, нан, нан, нан]

...