Xively在Python中读取数据

时间:2013-08-31 17:48:26

标签: python-2.7 xively

我编写了一个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'response = urllib2.urlopen(requestString).read()

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

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

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

1 个答案:

答案 0 :(得分: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

希望你能提供帮助,很高兴回答任何问题:)