2015-06-17 61 views
2

我正在開發一個項目,我必須從網站獲取數據,然後將其發佈到其他網站。目前我還是新手,所以我使用的是thingspeak.com帳戶來測試發佈內容,我也遵循urllib文檔中使用的相同示例https://docs.python.org/2/library/urllib.html如何POST-API在thingspeak.com中使用Python中的urllib

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。有什麼問題?! :\

所有幫助非常感謝。如果我錯了,也請糾正。

回答

3

您正在URL中發送名爲field1的查詢參數,但它被設置爲任何空字符串。因此field1被thingspeak.com設置爲""。您在params中傳遞的值將在HTTP POST請求的正文中發送,但它們不會以某種方式附加到該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將接受查詢參數的URL與POST請求,例如您可以在URL和身體的API密鑰傳遞field1

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

然而,隨着API玩弄它看起來將只接受命名field1查詢參數。所有其他字段被忽略,即使是那些documentedfield2field3

+1

艾哈邁德,你可能也想看看http://httpbin.org它允許你用HTTP POST請求進行實驗,並簡單地用一個響應JSON編碼的POST請求版本。 – mhawke

+0

非常感謝您的幫助先生。 Atm我想嘗試httpbin.org的時候,但我仍然不確定如何使用curl,但無論如何,我只是試過,它與這個代碼一起工作:'params = urllib.urlencode({'key':'8TU6AC31T81MV52N', 'field1':{'spam':1,'eggs':2,'bacon':0}}) \t \t f = urllib.urlopen(「https://api.thingspeak.com/update」,data = params)'它工作:D!但我仍然面臨循環問題。例如,如果我嘗試每隔幾秒發佈一次,它只會讀取第一次閱讀,其餘的將會被忽略!這是來自事情還是我需要解決的問題? –

+2

每個頻道的更新速率限制爲每15秒1次 - 請參閱https:// thingspeak。COM /文檔/信道#rate_limits – mhawke

相關問題