我正在尝试使用Fitbit API下载我的数据。我已经想出如何获得某一天的数据,这很好。这是我使用的curl命令:
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
但是,我想收集数百天的数据,我不想手动这样做。所以我想我可以使用Python循环。我读了一些其他主题,如this one和this one,但仍然不知道如何使用urllib2将这些curl命令“转换”为python语言。
我试过这个:
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:未找到”
那么将这个curl命令“翻译”为python语言的正确方法是什么?谢谢!
答案 0 :(得分:3)
问题来自class Message extends React.Component {
constructor(props) {
this.state = {
subject: this.props.subject,
body: this.props.body,
type: this.props.type,
messageIndex: this.props.messageIndex
};
}
componentDidUpdate() {
this.props.updateHandler(messageIndex, {
subject: this.state.subject,
body: this.state.body,
type: this.state.type
});
}
render() {
return (
<div>
<input
type="text"
defaultValue={this.state.subject}
onBlur={e => this.setState({subject: e.target.value})} />
<input
type="text"
defaultValue={this.state.subject}
onBlur={e => this.setState({body: e.target.value})} />
<select
type="text"
value={this.state.subject}
onChange={e => this.setState({type: e.target.value})}>
<option>Type 1</option>
<option>Type 2</option>
</select>
</div>
)
}
}
class MessageBox extends React.Component {
constructor(props) {
this.state = {
messages: aListOfMessageObjects
}
}
updateHandler(message) {
// Message update happens here and returns a list updatedMessages
this.setState({
messages: updatedMessages
});
}
render() {
let _this = this;
var messagesDOM = this.state.messages.map((m) => {
return (
<Message
message={m}
updateHandler={_this.updateHandler.bind(_this)} />
);
})
return (
<div>
{messagesDOM}
</div>
);
}
}
对象的构造:默认情况下,第二个参数是您要与请求一起传递的数据。相反,您必须指定要传递标头。这是正确的方法:
Request
这样就可以使用401,但是应该使用你的令牌。
您可以在urllib2(以及Request类)here
上获得更多信息但是,我建议你看一下Requests,我认为这更容易使用,并且有很好的记录。
希望它会有所帮助。
答案 1 :(得分:1)
在我看来,您可以使用比requests
更容易使用的优秀的库urllib
。
首先,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
从这里,您可以通过response.content
或response.json()
轻松获取响应内容(如果它是JSON),并将其写入文件。