如何在 thingspeak.com 上使用 Python 的 urllib 进行 POST - API

2024-10-06 11:51:48 发布

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

我正在做一个项目,我必须从一个网站获取数据,然后将其发布到另一个网站。目前我还是个新手,所以我使用thingspeak.com帐户进行发帖实验,而且我还使用了urllib文档中使用的相同示例https://docs.python.org/2/library/urllib.html

params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
# I am using this to check => eggs=2&bacon=0&spam=1
print params 
f = urllib.urlopen("https://api.thingspeak.com/update?key=8TU6AC31T81MV52N&field1=",params)
print f.read()

然而,当我检查我的thingspeak网站http://api.thingspeak.com/channels/42628/feed.json?key=8TU6AC31T81MV52N时,我会得到这个特定条目

{"created_at":"2015-06-17T10:05:12Z","entry_id":19,"field1":""}

据说,或者至少我是怎么理解的,params应该发布到网站上,但我不明白为什么我得到了空字符串。另外,如果我循环它,它也不会工作,它只在第一次发布空字符串的迭代中工作,其余的是我将从f.read()中获得0读取。怎么了?!:\

非常感谢大家的帮助。如果我错了,也请改正。


Tags: key字符串httpscomapiread网站params
1条回答
网友
1楼 · 发布于 2024-10-06 11:51:48

您正在URL中发送名为field1的查询参数,但它被设置为任何空字符串。因此,thingspeak.com将field1设置为""。您传入的那些值params是在HTTP POST请求的正文中发送的,它们不会以某种方式附加到URL。

可以通过以下两种方式之一设置字段:

  • 获取请求使用:

    f = urllib.urlopen("https://api.thingspeak.com/update?key=8TU6AC31T81MV52N&field1=my+value")
    

    其中包括API密钥和field1的值。

  • 后请求:

    params = urllib.urlencode({'key': '8TU6AC31T81MV52N', 'field1': 'my value'})
    f = urllib.urlopen("https://api.thingspeak.com/update", data=params)
    

thinkspeak将通过POST请求接受URL中的查询参数,例如,您可以在URL中传递field1,在body中传递API键:

params = urllib.urlencode({'key': '8TU6AC31T81MV52N'})
f = urllib.urlopen("https://api.thingspeak.com/update?field1=hello", data=params)

但是,在使用API时,它似乎只接受名为field1的查询参数。所有其他字段都将被忽略,甚至那些documented字段,如field2field3

相关问题 更多 >