2

我编写了一个 python 2.7 脚本来从 Xively 检索我的所有历史数据。

最初我是用 C# 编写的,它运行良好。

我将请求限制为 6 小时,以检索所有存储的数据。

我在 Python 中的版本如下:

requestString = ' http://api.xively.com/v2/feeds/41189/datastreams/0001.csv?key=YcfzZVxtXxxxxxxxxxxORnVu_dMQ&start= ' + requestDate + '&duration=6hours&interval=0&per_page=1000' 响应 = urllib2.urlopen(requestString) 。读()

请求日期格式正确,我比较了完整的 c# requestString 版本和 python 版本。

使用上面的请求,我只得到了 101 行数据,相当于几分钟的结果。

我怀疑它是 .read() 函数,它返回大约 34k 的字符,远远少于 c# 版本。我尝试将 100000 作为参数添加到 ad 函数,但结果没有变化。

4

1 回答 1

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

希望你能帮上忙,很高兴回答任何问题:)

于 2014-12-22T19:00:26.673 回答