我是Python的新手,正在尝试在Jupyter笔记本中使用需要令牌的API。该API来自NOAA。
我以NOAA's website上给出的格式提出了请求。下面的所有内容实际上都是我在代码中输入的内容,但令牌本身除外,已替换为MYLONGTOKEN:
curl -H "token:<MYLONGTOKEN>" "https://www.ncdc.noaa.gov/cdo-web/api/v2/stations"
$.ajax({ url:<url>, data:{<data>}, headers:{ token:<token> } })
在MYLONGTOKEN之后,我返回了指向“的语法错误。我尝试将其从括号和引号中删除,添加空格等,但似乎无法摆脱该错误。我也不清楚如果第二行中的
我还尝试遵循a previous post提供的不同语法,但这给了我JSONDECODE错误。
我正在使用python3,想知道NOAA的代码是否过时。
感谢您的帮助!谢谢。
答案 0 :(得分:1)
Python示例代码:
import requests
token = "setljksetaafjlkasetaljksetasetdt" # not a real access key obviously
url = "https://www.ncdc.noaa.gov/cdo-web/api/v2/stations"
response = requests.get(url, headers={'token': token})
data = response.json()
results = data["results"]
print("num results {}".format(len(results)))
for result in results[:2]: # show first two results
print()
for k, v in result.items():
print("{} => {}".format(k, v))
输出:
num results 25
elevation => 139
elevationUnit => METERS
mindate => 1948-01-01
longitude => -85.2482
name => ABBEVILLE, AL US
datacoverage => 0.8813
id => COOP:010008
latitude => 31.5702
maxdate => 2014-01-01
elevation => 249.3
elevationUnit => METERS
mindate => 1938-01-01
longitude => -87.1814
name => ADDISON, AL US
datacoverage => 0.5059
id => COOP:010063
latitude => 34.2553
maxdate => 2015-11-01
注意:大概不同的端点在JSON内返回不同的结构。上面的示例基于我使用您在问题中引用的stations
URL找到的内容。查看response.json()
返回的数据以查看得到的结果,因为我不知道所有不同端点的结果是否必然包含一个称为'results'
的元素。
在他们的文档中,curl ...
的意义在于,如果要从Linux命令行而不是Python脚本中调用 ,则可以执行以下操作:
curl -H "token:setljksetaafjlkasetaljksetasetdt" "https://www.ncdc.noaa.gov/cdo-web/api/v2/stations"
所以这就是说(因为curl中的-H
选项用于添加标题)是您需要添加一个名为token
的http请求标题,在上面的Python代码中使用通过headers
参数传递到requests.get
调用的字典。
分别在下一行,它们还提供了一个通过Ajax调用进行访问的示例。