我编写了一个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作为参数添加到广告功能中,但结果没有变化。
答案 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
希望你能提供帮助,很高兴回答任何问题:)