Simple Fitbit API webapp example
Von Carsten
Yesterday I decided to create a simple web application that demonstrates how to authorize with the Fitbit API and extract data from your account. You can see the result on my github repository. You can also download a runnable version of my webapp – all you need is Java.
Ok, now let’s get to the details. 🙂
First of all, I didn’t want any bloated framework to create a very simple example application, so I decided to use the Spark framework to build my web application. If you are familiar with frameworks like Sinatra or NodeJS you will feel at home. It’s a very basic framework, and you have to care only about the bare minimum to get a web application running. I’ll use a lot of Spark/Sinatra/Node-lingo now.
Here’s the main part of my application, the routes that are responsible for authorization with Fitbit, retrieving steps data and finally displaying the step count as a graph:
Please note that I left out the error handling and some other things for brevity. If you want to see the full code, go to my github repository.
The first route /login
is responsible to create the redirect to the authorization page if no credentials are found for the current user. After authorization the user is redirected back to the application where she ends up in the /login
route again, this time with valid authorization query parameters (if parameter completeAuthorization
is found, Fitbit completed the authorization for the user successfully). I’m then storing the credentials in the Fitbit API client fitbit
, putting the user
and the client
into the session and redirect to the route /steps
.
The route /steps
then makes a call to the Fitbit API and retrieve the steps for the last 7 days. The method loadData(...)
uses the fitbit client to get a TimeSeries of TimeSeriesResourceType.STEPS
for a period of TimePeriod.ONE_WEEK
.
Then the route redirects to a freemarker template that uses Google Chart API and iterates over the time series data to create the javascript code to populate the graph:
If you have any questions, feel free to leave a comment or contact me on Google+.