2016-06-15 8 views
2

Fitbit APIを使用してデータをダウンロードしようとしています。私は特定の日のデータを得る方法を考え出しました。これは良いことです。このcurlコマンドを同じことをするいくつかのPythonコードに変換する方法は?

curl -i -H "Authorization: Bearer (here goes a very long token)" https://api.fitbit.com/1/user/-/activities/heart/date/2016-6-14/1d/1sec/time/00:00/23:59.json >> heart_rate_20160614.json 

しかし、私は日のデータの数百を収集したいと私は手動でそれを行うにはしたくない。そして、ここで私が使用curlコマンドです。だから、私はPythonループを使うことができると思う。私はthis onethis oneのようないくつかの他のトピックを読んでいますが、urllib2を使ってこれらのカールコマンドをPython言語に翻訳する方法はまだ分かりません。

私はこれを試してみました:

だから、Python言語にこのcurlコマンド「を翻訳」するための正しい方法は何ですか:

import urllib2 
url = 'https://api.fitbit.com/1/user/-/activities/heart/date/today/1d/1sec/time/00:00/00:01.json' 
data = '{Authorization: Bearer (here goes a very long token)}' 
req = urllib2.Request(url,data) 
f = urllib2.urlopen(req) 

しかしだ、エラーが見つかりません「HTTPエラー404」と言います?ありがとう!

答えて

3

この問題は、Requestオブジェクトの構築に起因します。デフォルトでは、2番目のパラメータは要求と一緒に渡すデータです。代わりに、ヘッダーを渡すように指定する必要があります。これは正しい方法です:

import urllib2 
url = 'https://api.fitbit.com/1/user/-/activities/heart/date/2016-6-14/1d/1sec/time/00:00/23:59.json' 
hdr = {'Authorization': 'Bearer (token)'} 
req = urllib2.Request(url,headers=hdr) 
f = urllib2.urlopen(req) 

これは私の側で401を使用しますが、あなたのトークンで動作するはずです。

あなたはより多くのurllib2の上の情報(およびRequestクラス)here

を持つことができますしかし、私はあなたが私の意見で使用する方が簡単ですRequestsを見て、取る、と非常によく文書示唆しています。

希望すると便利です。

1

私の意見では、urllibよりはるかに使いやすい優れたライブラリrequestsを使用することができます。その後、あなたのインタプリタで

まず、pip install requests、:

import requests 
response = requests.get(url='https://api.fitbit.com/1/user/-/activities/heart/date/2016-6-14/1d/1sec/time/00:00/23:59.json', headers={'Authorization':'Bearer <TOKEN>'}) 
if response.ok: 
    print response.content 
else: 
    print "error", response.content 

ここからあなたは簡単にそれがJSONだ場合response.contentまたはresponse.json()を経由して応答内容を取得し、それをファイルに書き込むことができます。

関連する問題