【问题标题】:How to POST - API in thingspeak.comusing urllib in Python如何发布 - thingspeak.com 中的 API 在 Python 中使用 urllib
【发布时间】:2015-06-17 11:11:31
【问题描述】:

我正在从事一个项目,我必须从网站获取数据,然后将其发布到不同的网站。目前我还是新手,所以我正在使用 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":""}

据推测,或者至少我是如何理解的,应该将参数发布到网站上,但我不明白为什么我会得到空字符串。此外,如果我循环它也不起作用,它只适用于发布空字符串的第一次迭代,其余的是我将从 f.read() 读取 0。有什么问题?! :\

非常感谢所有帮助。如果我弄错了也请指正。

【问题讨论】:

    标签: python api post urllib


    【解决方案1】:

    您在 URL 中发送名为 field1 的查询参数,但它被设置为任何空字符串。因此,thingspeak.com 将field1 设置为""。您在 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 等。

    【讨论】:

    • Ahmed,您可能还想查看httpbin.org,它可以让您试验 HTTP POST 请求并简单地使用 JSON 编码版本的 POST 请求进行响应。
    • 非常感谢您的帮助先生。在我想尝试 httpbin.org 的那一刻,我仍然不确定如何使用 curl,但无论如何,我只是尝试过,它可以使用以下代码:params = urllib.urlencode({'key': '8TU6AC31T81MV52N', 'field1': {'spam': 1, 'eggs': 2, 'bacon': 0}}) f = urllib.urlopen("https://api.thingspeak.com/update", data=params) 并且它有效:D!但我仍然面临循环问题。例如,如果我尝试每隔几秒钟发布一次,它只会阅读第一次阅读,其余的将被忽略!是事情发生了,还是我需要解决一些问题?
    • 每个频道的更新速率限制为每 15 秒 1 次 - 请参阅 thingspeak.com/docs/channels#rate_limits
    猜你喜欢
    • 2014-12-07
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多