Forum eedomus
https://forum.eedomus.com/

Accès à l'API FITBIT sans librairie Oauth
https://forum.eedomus.com/viewtopic.php?f=16&t=2449
Page 1 sur 2  Suivant »
Auteur:  Havok [ 16 Fév 2015 14:54 ]
Sujet du message:  Accès à l'API FITBIT sans librairie Oauth

Bonjour,

Voici un petit didacticiel pour intégrer à votre eedomus les données Fitbit (bracelets, balance).
Il existe déjà un didacticiel sur le sujet à partir duquel je suis partit : viewtopic.php?f=16&t=1092

Le soucis est que j'ai un hébergement mutualité chez OVH qui, à ma connaissance, ne propose pas la librairie Oauth. Il a fallut faire sans :) Bref une méthode pour tout ceux qui ont un hébergement mais pas accès à la lib Oauth.

1- Récupérez les scripts :
http://www.phpclasses.org/package/7700- ... OAuth.html
et
http://www.phpclasses.org/package/3-PHP ... pages.html

2- Décompressez et installez les fichiers sur votre serveur (tout dans un même répertoire), par exemple : http://www.votreserveur.com/eedomus/

3- Créez une application sur https://dev.fitbit.com/apps, cela vous donne une <CONSUMER-KEY> et un <CONSUMER-SECRET>

4- Modifiez, sur votre serveur le fichier login_with_fitbit.php par le code ci-dessous, puis remplacez les variables <CONSUMER-KEY> et <CONSUMER-SECRET> par les valeurs obtenues au point 3
Code : Tout sélectionner
<?php
/*
 * login_with_fitbit.php
 *
 * @(#) $Id: login_with_fitbit.php,v 1.2 2013/07/31 11:48:04 mlemos Exp $
 *
 */

   /*
    *  Get the http.php file from http://www.phpclasses.org/httpclient
    */
   require('http.php');
   require('oauth_client.php');

   $client = new oauth_client_class;
   $client->debug = 1;
   $client->debug_http = 1;
   $client->server = 'Fitbit';
   $client->redirect_uri = 'http://'.$_SERVER['HTTP_HOST'].
      dirname(strtok($_SERVER['REQUEST_URI'],'?')).'/login_with_fitbit.php';

   $client->client_id = '<CONSUMER-KEY>'; $application_line = __LINE__;
   $client->client_secret = '<CONSUMER-SECRET>';

   if(strlen($client->client_id) == 0
   || strlen($client->client_secret) == 0)
      die('Please go to Fitbit application registration page https://dev.fitbit.com/apps/new , '.
         'create an application, and in the line '.$application_line.
         ' set the client_id to Consumer key and client_secret with Consumer secret. '.
         'The Callback URL must be '.$client->redirect_uri).' Make sure this URL is '.
         'not in a private network and accessible to the Fitbit site.';

   if(($success = $client->Initialize()))
   {
      if(($success = $client->Process()))
      {
         if(strlen($client->access_token))
         {
            $success = $client->CallAPI(
               'https://api.fitbit.com/1/user/-/profile.json',
               'GET', array(), array('FailOnAccessError'=>true), $user);
         }
      }
      $success = $client->Finalize($success);
   }
   if($client->exit)
      exit;
   if($success)
   {
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Fitbit OAuth client results</title>
</head>
<body>
<?php
      echo '<h1>', HtmlSpecialChars($user->user->displayName),
         ' you have logged in successfully with Fitbit!</h1>';
      //echo '<pre>', HtmlSpecialChars(print_r($user, 1)), '</pre>';
      echo '<pre>', HtmlSpecialChars(print_r($client, 1)), '</pre>';
?>
</body>
</html>
<?php
   }
   else
   {
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>OAuth client error</title>
</head>
<body>
<h1>OAuth client error</h1>
<p>Error: <?php echo HtmlSpecialChars($client->error); ?></p>
</body>
</html>
<?php
   }

?>


5- Lancer le fichier http://www.votreserveur.com/eedomus/log ... fitbit.php
identifiez-vous avec vos logins fitbit.
Une page de résultat va s'afficher
récupérez les valeurs de
Code : Tout sélectionner
[access_token] => xxxxxxxxxxxxxxxxxxxxxxxx
[access_token_secret] => yyyyyyyyyyyyyyyyyyyyyyy


Normalement cette page ne sert qu'une seule fois pour récupérer les 2 identifiants token !

6- Créez un fichier fitbit.php avec le code suivant puis remplacez les variables <CONSUMER-KEY> et <CONSUMER-SECRET> par les valeurs obtenues au point 3, <ACCESS-TOKEN> et <ACCESS-TOKEN-SECRET> par les valeurs obtenues au point 5
Code : Tout sélectionner
<?php

require 'http.php';
require 'oauth_client.php';

   $client = new oauth_client_class;
   $client->debug = 1;
   $client->debug_http = 1;
   $client->server = 'Fitbit';
   $client->redirect_uri = 'http://'.$_SERVER['HTTP_HOST'].
      dirname(strtok($_SERVER['REQUEST_URI'],'?')).'/fitbit.php';

   $client->client_id = '<CONSUMER-KEY>'; $application_line = __LINE__;
   $client->client_secret = '<CONSUMER-SECRET>';

   if(strlen($client->client_id) == 0
   || strlen($client->client_secret) == 0)
      die('Please go to Fitbit application registration page https://dev.fitbit.com/apps/new , '.
         'create an application, and in the line '.$application_line.
         ' set the client_id to Consumer key and client_secret with Consumer secret. '.
         'The Callback URL must be '.$client->redirect_uri).' Make sure this URL is '.
         'not in a private network and accessible to the Fitbit site.';
   $client->access_token = '<ACCESS-TOKEN>';
   $client->access_token_secret = '<ACCESS-TOKEN-SECRET>';

   if(($success = $client->Initialize()))
   {
         if(strlen($client->access_token))
         {
            $success = $client->CallAPI(
               'https://api.fitbit.com/1/user/-/activities/date/'.date("Y-m-d").'.xml',
               'GET', array(), array('FailOnAccessError'=>true), $user);
         }
      $success = $client->Finalize($success);
   }
   if($client->exit)
      exit;
   if($success)
   {
?>
<?php
      echo $user;
?>
<?php
   }
   else
   {
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>OAuth client error</title>
</head>
<body>
<h1>OAuth client error</h1>
<p>Error: <?php echo HtmlSpecialChars($client->error); ?></p>
</body>
</html>
<?php
   }

?>


Dans cet exemple l'appel de l'API fitbit va permettre de récupérer le nombre de pas effectués pour la journée en cours. Si vous souhaitez d'autres données (poids, sommeil, etc...) reportez vous à la doc suivante : https://wiki.fitbit.com/display/API/Fit ... Access+API
Il suffira de changer la ligne
Code : Tout sélectionner
'https://api.fitbit.com/1/user/-/activities/date/'.date("Y-m-d").'.xml'


7- Enfin le truc classique sur la eedomus :
configuration / ajouter un périphérique / Capteur http
Image

Reste plus qu'a tester :)

PS: A noter que si vous relancer plusieurs fois l'étape 5 login_with_fitbit.php (alors qu'il n'y a aucune raison de le faire sauf si cela ne fonctionne plus) vous risquez d'avoir des identifiants TOKEN différents. Il faudra alors mettre à jour le fichier fitbit.php
Auteur:  ASECADOMOTIQUE54 [ 17 Fév 2015 09:11 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

Génial, beau tuto qui fonctionne impeccable! depuis le temps que je galère avec la librairie Aouth qui visiblement n'est pas présente sur DSM5.1 .
Merci à toi pour cette contribution Havok tu viens déjà de faire un heureux ;)
reste plus qu'a décrypter le xml pour voir ce qu'on peu en tirer :D
Auteur:  benjee [ 17 Fév 2015 14:23 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

Bonjour,
testé et validé également...
J'ai ressorti le nombre de pas, l'indice IMC et le poids de la balance...
ça tourne !!
Merci
Auteur:  Havok [ 17 Fév 2015 16:19 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

Heureux que ca fasse des heureux :)
Auteur:  l0ghan [ 11 Mai 2015 13:32 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

Bonjour,

JE me suis fait un petit cockpit pour le fitbit dans EEdomus :)

Image

Avec la recuperation des alarms et le fait qu'elles soient activées ou pas
Merci @Havoc pour les scripts :)
julien
Auteur:  rvp31 [ 19 Mai 2015 20:21 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

Alors moi j'ai un Pb avec le poids et la masse graisseuse. SI je regarde le doc de l'API, ils disent que pour récupérer le poids, il faut faire un GET avec le mot clef "body" à l place de activities.
Mais quand j'execute le script, il me retourne une erreur :
Code : Tout sélectionner
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>OAuth client error</title>
</head>
<body>
<h1>OAuth client error</h1>
<p>Error: it was not possible to access the API call: it was returned an unexpected response status 404 Response: <?xml version="1.0" encoding="UTF-8"?><result><errors><apiError><errorType>request</errorType><fieldName>n/a</fieldName><message>The API you are requesting could not be found.</message></apiError></errors><success>false</success></result></p>
</body>
</html>


Je précise que ça fonctionne avec "activities". Quelqu'un a la même erreur ?
Auteur:  ASECADOMOTIQUE54 [ 19 Mai 2015 21:27 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

moi aussi je me suis fait mon petit menu santé avec les données fitbit et withings :D encore merci à Havok pour son partage ;)
[img]
santé.jpg
[/img]

Pièces jointes:
santé.jpg
santé.jpg (128.14 Kio) Consulté 24322 fois
Auteur:  rvp31 [ 20 Mai 2015 19:24 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

BOn ben j'ai résolu mon pb en allant faire un tour sur le forum de dev de fitbit.
En fait l'URL exacte pour récupérer les datas est maintenant :

https://api.fitbit.com/1/user/-/body/lo ... e/date.xml

J'avais fait le test mais il manquait juste le "repertoire" date..

Si ça peut en aider d'autre ..
Auteur:  Madoma73 [ 20 Mai 2015 22:49 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

@Asecadomotique54,
Tu crois qu'il y aurait moyen de récupérer ton script ?
J'ai un peu la flemme sur ce coup la ! :?
Auteur:  ASECADOMOTIQUE54 [ 20 Mai 2015 23:11 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

Madoma73 a écrit:@Asecadomotique54,
Tu crois qu'il y aurait moyen de récupérer ton script ?
J'ai un peu la flemme sur ce coup la ! :?

Oui bien sur je te met ça a dispo demain!
Auteur:  ASECADOMOTIQUE54 [ 21 Mai 2015 21:35 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

Il te faut quoi exactement pierre comme fichiers? Parce que il y a du monde dans mon dossier fitbit.
Auteur:  Madoma73 [ 26 Mai 2015 19:17 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

bin, je sais pas...
si ça te dérange pas, envoie moi ton dossier fitbit, je ferai le tri et si tu veux je fais un beau tuto sur domo-blog en disant bien que c'est toi l'auteur :D
Auteur:  Havok [ 26 Mai 2015 19:22 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

Ouai.. Sauf que c'est un peu moi l'auteur^^
Auteur:  Madoma73 [ 26 Mai 2015 19:41 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

oula, j'ai foiré :oops:
je sais pas pourquoi, j'ai lu le post en diagonale et j'étais persuadé que @Asecadomotique était l'auteur...

Mea Culpa !
mais ma proposition tient cependant toujours si tu m'autorises à faire le tuto sur domo-blog :-)
Auteur:  Havok [ 26 Mai 2015 19:46 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

Pas de soucis.
Normalement tu as tout ce qui faut dans le premier post.
Auteur:  ASECADOMOTIQUE54 [ 27 Mai 2015 10:00 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

bas alors Pierre tu sais bien que je suis incapable de pondre ce genre de choses! :lol: ;) :lol:
Auteur:  Alex30 [ 12 Juin 2015 06:25 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

Bonjour et Merci pour le Tuto

MErci :!:
Auteur:  Madoma73 [ 15 Juin 2015 21:28 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

@l0ghan @Asecadomotique elles sont sympas vos icônes, y aurait moyen de les partager ?
Auteur:  ASECADOMOTIQUE54 [ 16 Juin 2015 11:48 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

Normalement toute mes icônes sont partagées. ;-)
Auteur:  Madoma73 [ 16 Juin 2015 15:06 ]
Sujet du message:  Re: Accès à l'API FITBIT sans librairie Oauth

yep, mais c'est un tel bin's que c'est dur de retrouver quoique ce soit !
Page 1 sur 2 Le fuseau horaire est UTC+1 heure