在Python中发出带有令牌语法错误的API请求

2024-10-02 20:37:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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的代码是否已经过时

感谢您的帮助!多谢各位


Tags: 代码标记tokenapiurl内容data格式
1条回答
网友
1楼 · 发布于 2024-10-02 20:37:25

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中返回不同的结构。上面的例子是基于我使用你在问题中引用的stationsURL找到的。查看从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调用进行访问的示例

相关问题 更多 >