Skip to content

Instantly share code, notes, and snippets.

@inokappa
Last active October 30, 2016 15:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save inokappa/41e77975a5af88a1fd3324a6845c899b to your computer and use it in GitHub Desktop.
Save inokappa/41e77975a5af88a1fd3324a6845c899b to your computer and use it in GitHub Desktop.
fitbit で収集した心拍数を flask で Mackerel に飛ばすサンプル
import time, json
from datetime import datetime as dt
from flask import Flask, request, session, redirect
from fitbit.api import FitbitOauth2Client
import fitbit
import requests
app = Flask(__name__)
app.secret_key = 'super secret key'
def oauth2client():
return FitbitOauth2Client('xxxxx', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
def authorize_token_url():
url, _ = oauth2client().authorize_token_url(redirect_uri='http://127.0.0.1:12345/auth/fitbit_oauth2/callback', scope=['heartrate'])
return url
def fetch_access_token(code):
response = oauth2client().fetch_access_token(code, 'http://127.0.0.1:12345/auth/fitbit_oauth2/callback')
return response
def get_heartrate(access_token, refresh_token):
fitbit_client = fitbit.Fitbit('xxxxx', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
access_token = access_token,
refresh_token = refresh_token)
tdatetime = dt.now()
_date = tdatetime.strftime('%Y-%m-%d')
response = fitbit_client.intraday_time_series('activities/heart', base_date=_date, detail_level='1min')
metrics = map(lambda x:{'time': int(time.mktime(dt.strptime(_date + ' ' + x['time'], '%Y-%m-%d %H:%M:%S').timetuple())),
'value': int(x['value']),
'name': 'heartrate'},
response['activities-heart-intraday']['dataset'])
post_mackerel(metrics)
return metrics
def post_mackerel(metrics):
headers = {'Content-Type': 'application/json','X-Api-Key': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
request = requests.post('https://mackerel.io/api/v0/services/fitbit/tsdb',
data = json.dumps(metrics),
headers = headers)
@app.route('/')
def root():
url = authorize_token_url()
return redirect(url)
@app.route('/heartrate')
def heartrate():
if session.get('access_token') and session.get('refresh_token'):
response = get_heartrate(session.get('access_token'), session.get('refresh_token'))
return json.dumps(response)
else:
return redirect('/')
@app.route('/auth/fitbit_oauth2/callback')
def callback():
code = request.args.get('code', '')
response = fetch_access_token(code)
session['refresh_token'] = response['refresh_token']
session['access_token'] = response['access_token']
return redirect('/heartrate')
if __name__ == '__main__':
app.run(port = 12345)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment