2013-08-31 3 views
2

Я написал сценарий python 2.7 для извлечения всех моих исторических данных из Xively.Xively read data in Python

Первоначально я написал его на C#, и он отлично работает.

Я ограничиваю запрос на 6-часовые блоки, чтобы получить все сохраненные данные.

Моя версия в Python выглядит следующим образом:

requestString = 'http://api.xively.com/v2/feeds/41189/datastreams/0001.csv?key=YcfzZVxtXxxxxxxxxxxORnVu_dMQ&start=' + requestDate + & длительность = 6hours & интервал = 0 & per_page = 1000 'ответ = urllib2.urlopen (requestString) .read()

Дата запроса в правильном формате, я сравнил полную версию C# requestString и питон.

Используя приведенный выше запрос, я получаю только 101 строку данных, что соответствует нескольким минутам результатов.

Мое подозрение, что это функция .read(), возвращает около 34 тыс. Символов, что намного меньше, чем версия 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

Надеется, что вы могли бы помочь, рад ответить на любые вопросы :)