如何使用Python中的urllib在thingspeak.com上发布API

时间:2015-06-17 11:11:32

标签: python api post urllib

我正在开展一个项目,我必须从网站获取数据,然后将其发布到其他网站。目前我还是新手,所以我使用的是一个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()

但是,当我查看我的thingpeak网站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。问题是什么?! :\

非常感谢所有帮助。如果错误的话,请纠正。

1 个答案:

答案 0 :(得分:3)

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

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

  • 使用以下方式的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中的查询参数,例如:您可以在网址中传递field1,在正文中传递API密钥:

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

但是,使用API​​看起来它只接受名为field1的查询参数。所有其他字段都会被忽略,即使是field2,例如field3Ext.form.Panel等等。