如何 POST - API in thingspeak.comusing urllib in Python

How to POST - API in thingspeak.comusing urllib in Python

我正在做一个项目,我必须从一个网站获取数据,然后 post 它到另一个网站。目前我还是新手,所以我正在使用 thingspeak.com 帐户在 posting 上进行实验,并且我也在遵循 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 应该 posted 到网站,但我不明白为什么我得到空字符串。此外,如果我循环它也不起作用,它仅适用于第一次迭代 posting 空字符串,其余的是我将从 f.read() 中读取 0。有什么问题?! :\

非常感谢所有帮助。也请指正,如有错误请指正。

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

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

  • GET 请求使用:

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

    其中包括 API 键和 field1 的值。

  • 一个POST请求:

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

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

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

然而,玩弄 API 它看起来只接受名为 field1 的查询参数。所有其他字段都将被忽略,即使是那些 documented,例如 field2field3