我在https://towardsdatascience.com/getting-weather-data-in-3-easy-steps-8dc10cc5c859上学习了一个教程,遇到了一个问题,如果我复制并粘贴了他们的代码,它就会正常工作。但是,如果我更改了站点ID,那么我就得到了一个错误,不管我把它改到哪个站。
import requests
import numpy as np
import pandas as pd
import json
from datetime import datetime
import matplotlib.pyplot as plt
Token = 'YourTokenHere'
station_id = 'GHCND:USW00023129'
station_id1 = 'GHCND:USC00107689'
station_id2 = 'GHCND:USW00003122'
#initialize lists to store data
dates_temp = []
dates_prcp = []
temps = []
#for each year from 2015-2019 ...
for year in range(2015, 2017):
year = str(year)
print('working on year '+year)
#make the api call
r = requests.get('https://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=GHCND&datatypeid=TAVG&limit=1000&stationid='
+station_id1+'&startdate='+year+'-01-01&enddate='+year+'-12-31', headers={'token':Token})
#load the api response as a json
d = json.loads(r.text)
#get all items in the response which are average temperature readings
avg_temps = [item for item in d['results'] if item['datatype']=='TAVG']
#get the date field from all average temperature readings
dates_temp += [item['date'] for item in avg_temps]
#get the actual average temperature from all average temperature readings
temps += [item['value'] for item in avg_temps]如果我使用station_id GHCND: use 00023129,它可以正常工作。如果我使用station_id1或2(或任何其他station_id,我尝试过几次),就会得到以下错误:
runfile('D:/Code/Weather/Weather.py', wdir='D:/Code/Weather')
working on year 2015
Traceback (most recent call last):
File "D:\Code\Weather\Weather.py", line 36, in <module>
avg_temps = [item for item in d['results'] if item['datatype']=='TAVG']
KeyError: 'results'谢谢
发布于 2022-01-20 18:17:17
“结果”是返回一个关键错误,因为您的.get没有返回响应。看起来NOAA已经在一段时间更新了他们的api格式,而且很多的材料已经不再起作用了,包括参考数据科学的文章。
如果您刚刚开始,这种格式将返回一个带有结果的json文件,希望您可以从那里调整它:
import requests
import json
from datetime import datetime
token = 'yourtoken'
url = "http://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=GHCNDMS&startdate=1776-07-04&enddate=1776-09-04"
headers = {"token":token}
r = requests.get(url, "dataset", headers = headers).text
print(r)
response = json.loads(r)
response = response['results']
response = response[0]
print(response)https://stackoverflow.com/questions/65495264
复制相似问题