C# – Comment récupérer la distance totale courue dans les données de RunKeeper

Après ma famille, le travail et ce blogue, mon autre passion est la course à pied. À une moyenne de quatre matins par semaine, je sors aller faire ma course avant d’aller au travail. C’est la deuxième année que je fais cela. La course à pied  m’a énormément aidé à mieux gérer mon stress. Je vous le conseille fortement!

L’an passé, je m’étais fixé un objectif assez modeste. En anglais, il disent Couch to  10k. Il s’agit de partir à 0 et atteindre la distance à la course de 10 kilomètres. Pour ceux qui se demandent, j’ai réussi le défi que je m’étais fixé.

Par contre, cette année j’ai comme projet d’arriver à courir un demi-marathon. Il s’agit d’une distance de 21.1 kilomètres. Réalistement, cette distance se complète entre deux heures et deux heures trente. C’est du sérieux!

Pour atteindre ce but, je suis un plan d’entraînement tiré de l’excellent livre Courir au bon rythme. Avant tout, les plans d’entraînements qui y figurent sont associés à une philosophie en ce qui concerne la course à pied. Le nom du livre veut tout dire, vous devez courir au bon rythme.

Bref, je cours en moyenne 25 et 35 kilomètres chaque semaine depuis le début du printemps. En même temps, j’ai décidé de mettre à contribution mes kilomètres dans une cause assez amusante. Les Forrest Gump de Val-David est une initiative fondée par un collègue visant à mythique distance courue par Forest Gump. C’est-à-dire courir une distance de 30 616 km.

Participer au groupe n’implique pas grand-chose. Je n’ai même pas besoin de résider à Val-David pour que ça compte. Tout ce que j’ai à faire c’est de faire le décompte des kilomètres que j’ai couru depuis le début de ma saison. Pour cela, il y a une bonne et une mauvaise nouvelle.

La bonne nouvelle est que j’utilise l’application iOS RunKeeper pour enregistrer le détail de mes courses. Avec cela, je peux faire un total de mes distances par jour. La mauvaise, c’est que je suis terriblement paresseux. Je n’ai vraiment pas envie d’aller compter la distance que j’ai couru manuellement!

Vous me voyez venir? RunKeeper a un API REST que je peux aller tripoter. N’est-ce pas un bon jour pour être un professionnel du web? Oui, madame!

Sans plus tarder, voici le code!


public class HealthGraph
{
static void Main(string[] args)
{
var tokenManager = new AccessTokenManager("7303a9bd039f4484af3fd83d5f60d72c", ConfigurationManager.AppSettings["ClientSecret"], "https://www.frenchcoding.com/", ConfigurationManager.AppSettings["AccessToken"]);
var userRequest = new UsersEndpoint(tokenManager);
var user = userRequest.GetUser();
var activitiesRequest = new FitnessActivitiesEndpoint(tokenManager, user);
var activities = activitiesRequest.GetFeedPage(null, 500, new DateTime(2014, 07, 20), DateTime.Now);
var totalDistance = 0.0;
var lines = new List<string>();
foreach (var activity in activities.Items.OrderBy(p => p.StartTime))
{
totalDistance += activity.TotalDistance;
var date = activity.StartTime;
var distance = activity.TotalDistance;
lines.Add(date.ToShortDateString() + " / " + ToKilometers(distance));
}
System.IO.File.WriteAllLines("runs.txt", lines);
Console.WriteLine("Distance totale : " + ToKilometers(totalDistance));
Console.ReadKey();
}
private static double ToKilometers(double distance)
{
return Math.Round(distance / 1000, 2);
}
}

view raw

runkeeper.cs

hosted with ❤ by GitHub

Le comble de la paresse est que j’ai utilisé la librairie HealthGraphNet pour accéder à mes données RunKeeper. Le sale boulot de gérer mon jeton d’authentification et de faire les appels HTTP requis sont est fait à ma place. Pour en ajouter à cette paresse c’est que la date à partir laquelle je questionne l’API est écrite directement dans mon code.

Je n’ai que moi-même à satisfaire, après tout.

Quelques notes supplémentaires concernant la mise en place de ce code.

  1. Il vous faut un compte développeur est une application enregistrée chez RunKeeper afin de pouvoir l’exécuter.
  2. Étant donné la nature très jetable de ce code, j’ai utilisé un formulaire HTML pour obtenir les codes d’autorisations OAuth 2.0.

En guise de conclusion, je suis dans l’obligation de me bomber un peu le torse et d’avouer que dans la période entre le premier avril 2014 et le 8 août 2014 j’ai couru environ 490.08 kilomètres. Je suis très fier! Dire que la saison n’est même pas finie!