2013-08-31 4 views
2

파이썬 2.7 스크립트를 작성하여 내 모든 히스토리 데이터를 Xively에서 검색했습니다.파이썬에서 데이터를 독서적으로 읽음

원래 C#으로 작성 했으므로 완벽하게 작동합니다.

모든 저장된 데이터를 검색하기 위해 요청을 6 시간 블록으로 제한하고 있습니다.

다음 파이썬 내 버전이다

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() 함수라는 것이 의심 스럽지만, C# 버전보다 훨씬 적은 약 34k 개의 문자를 반환합니다. 광고 함수에 인수로 100000을 추가하려고 시도했지만 결과는 변경되지 않았습니다.

답변

0

왼쪽 또 다른 해결책은 Python 2.7에도 썼습니다.

대부분의 센서가 매분 값을 보내고 Xively API가이 보낸 빈도로 데이터의 반 시간을 제한하기 때문에 필자의 경우 30 분마다 데이터를 얻었습니다.

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

기쁘게 질문에 대답하기 위해, 당신이 도움이 될 희망 :)

은 일반 모듈의

관련 문제