Skip to content

Instantly share code, notes, and snippets.

@fabulator
Created May 31, 2018 13:06
Show Gist options
  • Save fabulator/4e40dd59cb5dcaafcc86621701b4c556 to your computer and use it in GitHub Desktop.
Save fabulator/4e40dd59cb5dcaafcc86621701b4c556 to your computer and use it in GitHub Desktop.
How to push Fitbit heart data to Endomondo
require('cross-fetch/polyfill');
const ENDOMONDO = require('endomondo-api-handler');
const FITBIT = require('fitbit-api-handler');
const {
FITBIT_CLIENT_ID,
FITBIT_SECRET,
FITBIT_TOKEN,
ENDOMONDO_LOGIN,
ENDOMONDO_PASSWORD,
ENDOMONDO_WORKOUT_ID,
} = require('./env');
const EndomondoApi = ENDOMONDO.Api;
const EndomondoMobileApi = ENDOMONDO.MobileApi;
const FitbitApi = FITBIT.Api;
const { rewriteHeartRateData, replaceWorkout } = ENDOMONDO;
const { INTRADAY_RESOURCES } = FITBIT;
const endomondoApi = new EndomondoApi();
const endomondoMobileApi = new EndomondoMobileApi();
const fitbitApi = new FitbitApi(FITBIT_CLIENT_ID, FITBIT_SECRET);
fitbitApi.setAccessToken(FITBIT_TOKEN);
(async () => {
await endomondoApi.login(ENDOMONDO_LOGIN, ENDOMONDO_PASSWORD);
await endomondoMobileApi.login(ENDOMONDO_LOGIN, ENDOMONDO_PASSWORD);
const workout = await endomondoApi.getWorkout(ENDOMONDO_WORKOUT_ID);
if (!workout.hasGPSData()) {
console.log('Workout does not have GPS data');
return;
}
if (workout.getMaxHeartRate()) {
console.log('Workout already have HR data');
return;
}
const hrData = await fitbitApi.getIntradayData(
INTRADAY_RESOURCES.HEART,
workout.getStart(),
workout.getEnd().plus({ minutes: 1 }),
'1sec',
);
const rewrittenWorkout = rewriteHeartRateData(workout, hrData.sets.map((item) => {
return {
time: item.time,
hr: item.value,
};
}));
rewrittenWorkout.setAvgHeartRate(hrData.total);
await replaceWorkout(rewrittenWorkout, endomondoApi, endomondoMobileApi);
console.log(rewrittenWorkout.toString());
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment