我正在开展一个项目,我必须从网站获取数据,然后将其发布到其他网站。目前我还是新手,所以我使用的是一个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。问题是什么?! :\
非常感谢所有帮助。如果错误的话,请纠正。
答案 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
,例如field3
,Ext.form.Panel
等等。