2013-08-31 107 views
2

我已經編寫了一個python 2.7腳本來從Xively中檢索我所有的歷史數據。Xively在Python中讀取數據

最初我用C#寫的,它完美的工作。

我將請求限制爲6小時的塊,以檢索所有存儲的數據。

我在Python版本如下:

requestString = 'http://api.xively.com/v2/feeds/41189/datastreams/0001.csv?key=YcfzZVxtXxxxxxxxxxxORnVu_dMQ&start=' + requestDate + '&持續時間=6小時&間隔= 0 & per_page = 1000' 響應= urllib2.urlopen(requestString).read()

請求日期格式正確,我比較了完整的c#requestString版本和python版本。

使用上述請求,我只獲得101行數據,這相當於幾分鐘的結果。

我懷疑它是.read()函數,它返回大約34k字符,遠遠小於c#版本。我嘗試在廣告功能中添加100000作爲參數,但結果沒有變化。

回答

0

左邊的另一個解決方案也寫在Python 2.7中。

在我的情況下,每30分鐘就有一次數據,因爲許多傳感器每分鐘發送一次數值,而Xively API將半小時的數據限制在該發送頻率。

這是通用模塊:

for day in datespan(start_datetime, end_datetime, deltatime): # loop increasing deltatime to star_datetime until finish 
    while(True): # assurance correct retrieval data 
     try: 
      response = urllib2.urlopen('https://api.xively.com/v2/feeds/'+str(feed)+'.csv?key='+apikey_xively+'&start='+ day.strftime("%Y-%m-%dT%H:%M:%SZ")+'&interval='+str(interval)+'&duration='+duration) # get data 
      break 
     except: 
      time.sleep(0.3) 
      raise # try again 
    cr = csv.reader(response) # return data in columns 
    print '.' 
    for row in cr: 
     if row[0] in id: # choose desired data 
      f.write(row[0]+","+row[1]+","+row[2]+"\n") # write "id,timestamp,value" 

完整的腳本,你可以在這裏找到它:https://github.com/CarlosRufo/scripts/blob/master/python/retrievalDataXively.py

希望你也許會有幫助,很高興回答任何問題:)