fitbit

Fitbit API client

Fitbit API Client for Node.js

Currently a read only implementation for reading data from the Fitbit API as an authenticated user.

### TODO

I've split this into two sections, top section is what I need to have for the project I created this module for and the latter is what the API supports.

Needed by me:

  • Add user model
  • Add time series data for models
  • Allow data models to be updated("logged") and deleted via the API

Supported by API:

  • Add Blood pressure, heart rate, glucose resource models
  • Add goals for all models that support them
  • Collection metadata models
  • Anything else...

npm install fitbit

Below is an example usage for authenticating and making a resource request:

var express = require('express')
  , config = require('./config/app')
  , app = express()
  , Fitbit = require('fitbit');
 
app.use(express.cookieParser());
app.use(express.session({secret: 'hekdhthigib'}));
app.listen(3000);
 
// OAuth flow 
app.get('/', function (reqres) {
  // Create an API client and start authentication via OAuth 
  var client = new Fitbit(config.CONSUMER_KEY, config.CONSUMER_SECRET);
 
  client.getRequestToken(function (errtokentokenSecret) {
    if (err) {
      // Take action 
      return;
    }
 
    req.session.oauth = {
        requestToken: token
      , requestTokenSecret: tokenSecret
    };
    res.redirect(client.authorizeUrl(token));
  });
});
 
// On return from the authorization 
app.get('/oauth_callback', function (reqres) {
  var verifier = req.query.oauth_verifier
    , oauthSettings = req.session.oauth
    , client = new Fitbit(config.CONSUMER_KEY, config.CONSUMER_SECRET);
 
  // Request an access token 
  client.getAccessToken(
      oauthSettings.requestToken
    , oauthSettings.requestTokenSecret
    , verifier
    , function (errtokensecret) {
        if (err) {
          // Take action 
          return;
        }
 
        oauthSettings.accessToken = token;
        oauthSettings.accessTokenSecret = secret;
 
        res.redirect('/stats');
      }
  );
});
 
// Display some stats 
app.get('/stats', function (reqres) {
  client = new Fitbit(
      config.CONSUMER_KEY
    , config.CONSUMER_SECRET
    , { // Now set with access tokens 
          accessToken: req.session.oauth.accessToken
        , accessTokenSecret: req.session.oauth.accessTokenSecret
        , unitMeasure: 'en_GB'
      }
  );
 
  // Fetch todays activities 
  client.getActivities(function (erractivities) {
    if (err) {
      // Take action 
      return;
    }
 
    // `activities` is a Resource model 
    res.send('Total steps today: ' + activities.steps());
  });
});