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

在Python中发出带有令牌语法错误的API请求,python,ajax,curl,Python,Ajax,Curl,我是Python新手,正在尝试在我的Jupyter笔记本中使用API,这需要一个令牌。API来自NOAA 我将我的请求以上给出的格式提交。下面的所有内容都是我在代码中输入的内容,除了标记本身,被替换为MYLONGTOKEN: curl -H "token:<MYLONGTOKEN>" "https://www.ncdc.noaa.gov/cdo-web/api/v2/stations" $.ajax({ url:<url>, dat

我是Python新手,正在尝试在我的Jupyter笔记本中使用API,这需要一个令牌。API来自NOAA

我将我的请求以上给出的格式提交。下面的所有内容都是我在代码中输入的内容,除了标记本身,被替换为MYLONGTOKEN:

curl -H "token:<MYLONGTOKEN>" "https://www.ncdc.noaa.gov/cdo-web/api/v2/stations"
$.ajax({ url:<url>, data:{<data>}, headers:{ token:<token> } })
我得到一个指向after MYLONGTOKEN的语法错误。我试着把它从方括号和引号中去掉,添加空格等等,但似乎无法摆脱这个错误。我也不清楚第二行上的是否应该替换为实际的token,但我还没有通过第一行中的错误来找到答案

我还尝试遵循上提供的不同语法,但这给了我一个JSONDECODE错误

我正在使用python3,想知道NOAA的代码是否已经过时

感谢您的帮助!谢谢。

示例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中返回不同的结构。上面的例子是基于我在问题中引用的站点URL发现的。查看response.json返回的数据以了解结果,因为我不知道来自所有不同端点的结果是否一定包含一个名为“results”的元素

卷曲的点。。。他们文档中的内容是,如果要从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调用进行访问的示例。

我没有看到任何Python代码。你说除了令牌之外,所有东西都是你放进去的,但很明显你要用实际值替换每个项。无论如何,我不认为你要包括.Ajax的东西,这是另一个选项,不是curl命令的一部分。除了前面的注释外:请添加错误消息。如果您试图从python调用,则需要使用请求库,并使用包含“{'token':'XxYyZz…..”或其他内容的字典的headers参数。我马上会用一个实际的例子来补充一个答案……非常感谢!我不知道ajax或curl是干什么的,所以我很感谢你的解释。