2

Xively からすべての履歴データを取得する python 2.7 スクリプトを作成しました。

もともと私はC#で書いていましたが、完璧に動作します。

保存されているすべてのデータを取得するために、リクエストを 6 時間ブロックに制限しています。

Python での私のバージョンは次のとおりです。

requestString = ' http://api.xively.com/v2/feeds/41189/datastreams/0001.csv?key=YcfzZVxtXxxxxxxxxxORnVu_dMQ&start= ' + requestDate + '&duration=6hours&interval=0&per_page=1000' レスポンス = urllib2.urlopen(requestString) 。読んだ()

リクエストの日付は正しい形式です。完全な c# requestString バージョンと python を比較しました。

上記のリクエストを使用すると、101 行のデータしか取得できません。これは、数分の結果に相当します。

私の疑いでは、それは .read() 関数であり、C# バージョンよりもはるかに少ない約 34k の文字を返します。ad 関数の引数に 100000 を追加してみましたが、結果は変わりません。

4

1 に答える 1

0

Python 2.7でも書かれた別のソリューションを残しました。

私の場合、多くのセンサーが毎分値を送信し、Xively API がこの送信頻度に 30 分のデータを制限しているため、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

ご質問にお答えできることを嬉しく思います:)

于 2014-12-22T19:00:26.673 に答える