Álvaro Ramírez
fitbit API, org babel, and gnuplot
Retook running recently. Took the dust off my aria scale and used the opportunity to check out fitbit's API.
First register your app at dev.fitbit.com/apps/new and get a client_id=AABBCC.
You'll also need your USER_ID, from your Fitbitx user profile.
We'll also need a token. I used the implicit grant flow URL in my browser and extracted access_token=TOKEN.
Now let's wire up two org source blocks to fetch the data and subsequently plot using gnuplot.
It's pretty neat. You can take the output from one source block and use it as input to another.
We use curl to fetch data from fitbit's API and pipe through jq and sed to massage the output format into two columns.
Note: Before using gnuplot in org babel, you'll need to install the gnuplot package and add to babel languages.
(use-package gnuplot :ensure t) (use-package ob :config (org-babel-do-load-languages 'org-babel-load-languages '((gnuplot . t))))
curl -s -H "Authorization: Bearer TOKEN" https://api.fitbit.com/1/user/USER_ID/body/weight/date/2018-06-09/2018-07-11.json | jq '.[][] | "\(.dateTime) \(.value)"' | sed 's/"//g'
2018-06-09 | 65.753 |
2018-06-10 | 65.762 |
2018-06-11 | 65.771 |
2018-06-12 | 65.78 |
2018-06-13 | 65.789 |
2018-06-14 | 65.798 |
2018-06-15 | 65.807 |
2018-06-16 | 65.816 |
2018-06-17 | 65.825 |
2018-06-18 | 65.85 |
2018-06-19 | 65.96 |
2018-06-20 | 64.1 |
2018-06-21 | 65.64 |
2018-06-22 | 65.47 |
2018-06-23 | 65.515 |
2018-06-24 | 65.56 |
2018-06-25 | 65.605 |
2018-06-26 | 65.65 |
2018-06-27 | 65.18 |
2018-06-28 | 64.49 |
2018-06-29 | 64.49 |
2018-06-30 | 64.41 |
2018-07-01 | 64.33 |
2018-07-02 | 64.25 |
2018-07-03 | 64.17 |
2018-07-04 | 64.55 |
2018-07-05 | 64.39 |
2018-07-06 | 64.33 |
2018-07-07 | 65.06 |
2018-07-08 | 63.28 |
2018-07-09 | 63.4 |
2018-07-10 | 64.22 |
2018-07-11 | 63.95 |
Now feed the two column data to gnuplot.
reset set title "My recent weight" set xdata time set timefmt '%Y-%m-%d' set format x "%d/%m/%y" set term png set xrange ['2018-06-09':'2018-07-11'] plot data u 1:2 with linespoints title 'Weight in Kg'
Fetching data and plotting through org babel and gnuplot is pretty sweet. I've barely scratched the surface. There's more at Org-babel-gnuplot and Plotting tables in Org-Mode using org-plot. Either way, this is another Emacs super power to keep in the toolbox.