FITBIT

Utilitaires développés par les utilisateurs

FITBIT

Messagepar Aurel64 » 10 Juin 2013 14:33

Bonjour,

est-ce que quelqu'un a réussi à utiliser l'API de FITBIT pour faire afficher par exemple son poids dans un etat de l'Eedomus ?
Aurel64
 
Messages : 77
Inscription : 07 Mars 2013
Localisation : FRANCE - Pau

Re: FITBIT

Messagepar Madoma73 » 10 Juin 2013 16:00

Salut Aurel,
oui, j'ai fait un script php qui est capable de récupérer n'importe quelle infos d'un compte fitbit.

Pierre
Pierre
Madoma73
 
Messages : 1440
Inscription : 16 Sep 2012
Localisation : 38

Re: FITBIT

Messagepar jperillo » 11 Juin 2013 06:12

Bonjour Pierre,

Je serais très interressé par le script php, evidemment si celui-ci peux être public.

Jean-François
jperillo
 
Messages : 23
Inscription : 09 Oct 2012

Re: FITBIT

Messagepar cedriclocqueneux » 11 Juin 2013 09:46

+1 ! Ce serait sympa si tu veux bien nous le mettre à disposition :D
Image
cedriclocqueneux
 
Messages : 159
Inscription : 10 Jan 2012
Localisation : Orléans, France

Re: FITBIT

Messagepar Madoma73 » 11 Juin 2013 16:59

Pas de souci, j'avais déjà proposé de le rendre dispo mais ça n'avait semblé intéresser personne à l'époque, je le rends présentable et je le partage.

Pierre
Pierre
Madoma73
 
Messages : 1440
Inscription : 16 Sep 2012
Localisation : 38

Re: FITBIT

Messagepar Aurel64 » 17 Juin 2013 08:25

Merci beaucoup, on attend ton script avec impatience. :P
@+
Aurel64
 
Messages : 77
Inscription : 07 Mars 2013
Localisation : FRANCE - Pau

Re: FITBIT

Messagepar Madoma73 » 17 Juin 2013 10:24

je vous sors un truc ce soir, ce sera un premier jet :-)

Pierre
Pierre
Madoma73
 
Messages : 1440
Inscription : 16 Sep 2012
Localisation : 38

Re: FITBIT

Messagepar cedriclocqueneux » 17 Juin 2013 10:30

Super, hate d'essayer :D
Image
cedriclocqueneux
 
Messages : 159
Inscription : 10 Jan 2012
Localisation : Orléans, France

Re: FITBIT

Messagepar Madoma73 » 17 Juin 2013 22:57

je galère avec la génération du fichier XML....
l'authentification oauth est bonne :-)

Pierre
Pierre
Madoma73
 
Messages : 1440
Inscription : 16 Sep 2012
Localisation : 38

Re: FITBIT

Messagepar Madoma73 » 18 Juin 2013 21:38

Salut voici le début,
il faut comment par créer une application sur https://dev.fitbit.com/apps, cela vous donne une consumer key et un consumer secret.
vous les rentrez dans le script ci-dessous et en executant ce script vous allez recuperer les tokens oauth
Code : Tout sélectionner
<?php
    // Base URL
    $baseUrl = 'http://api.fitbit.com';
   
    // Request token path
    $req_url = $baseUrl . '/oauth/request_token';

    // Authorization path
    $authurl = $baseUrl . '/oauth/authorize';

    // Access token path
    $acc_url = $baseUrl . '/oauth/access_token';

    // Consumer key
    $conskey = <CONSUMER KEY>

    // Consumer secret
    $conssec = <CONSUMER SECRET>

    $callbackUrl="http://127.0.0.1/eedomus/completeAuthorization.php";
    // Start session to store the information between calls
    session_start();

    // In state=1 the next request should include an oauth_token.
    // If it doesn't go back to 0
    if ( !isset($_GET['oauth_token']) && $_SESSION['state']==1 ) $_SESSION['state'] = 0;

    try
    {
        // Create OAuth object
        $oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_AUTHORIZATION);

        // Enable ouath debug (should be disabled in production)
        $oauth->enableDebug();

        if ( $_SESSION['state'] == 0 )
        {
            // Getting request token. Callback URL is the Absolute URL to which the server provder will redirect the User back when the obtaining user authorization step is completed.
            $request_token_info = $oauth->getRequestToken($req_url, $callbackUrl);

            // Storing key and state in a session.
            $_SESSION['secret'] = $request_token_info['oauth_token_secret'];
            $_SESSION['state'] = 1;

            // Redirect to the authorization.
            header('Location: '.$authurl.'?oauth_token='.$request_token_info['oauth_token']);
            exit;
        }
        else if ( $_SESSION['state']==1 )
        {
            // Authorized. Getting access token and secret
            $oauth->setToken($_GET['oauth_token'],$_SESSION['secret']);
            $access_token_info = $oauth->getAccessToken($acc_url);

            // Storing key and state in a session.
            $_SESSION['state'] = 2;
            $_SESSION['token'] = $access_token_info['oauth_token'];
            $_SESSION['secret'] = $access_token_info['oauth_token_secret'];
        }

        // Setting asccess token to the OAuth object
        $oauth->setToken($_SESSION['token'],$_SESSION['secret']);
        echo  "oauth_token:" .  $access_token_info['oauth_token'];
        echo "<br>"  ;
        echo  "oauth_secret:" . $access_token_info['oauth_token_secret'];

    }
    catch( OAuthException $E )
    {
        print_r($E);
    }
?>

en rentrant le token oauth et les consumer key et secret dans le deuxième script, vous aurez accès à toutes vos données fitbit en mode xml.

Code : Tout sélectionner
<?php

require 'fitbitphp.cls.php'  ;

$fitbit = new FitBitPHP('<consumerkey>', '<consumer secret>');
$fitbit->setOAuthDetails('<oauth token>', '<oauth secret>');

$xml = $fitbit->getProfile();
//print_r($xml);
//$xml2 = simplexml_load_string($xml);
$xml2=$fitbit->getActivities("",date("Y-m-d"));
//echo "<br><br>";
//print_r($xml2);

$xml3=$fitbit->getSleep("",date("Y-m-d"));
//echo "<br><br>";
//print_r($xml3);
echo $xml2->asXML();
?>


le premier jet a pris un peu plus de temps que prévu, mais on peut surement améliorer.
essayez si ça marche et dites-moi ce que je peux améliorer :-)
la librarie est en pièce jointe

Pierre
Pièces jointes
fitbitphp.cls.zip
(8.93 Kio) Téléchargé 698 fois
Dernière édition par Madoma73 le 19 Juin 2013 15:26, édité 1 fois.
Pierre
Madoma73
 
Messages : 1440
Inscription : 16 Sep 2012
Localisation : 38

Re: FITBIT

Messagepar cedriclocqueneux » 19 Juin 2013 14:21

Bon, bah pour une fois c'est moi qui va jouer le noobs :p
Ca marche pas !

Plus sérieusement je butte dès le premier script pour récupérer les tokens.
J'ai bien renseigné mon consumer key et mon consumer secret, et j'ai mis le script sur mon serveur web avec la librairie.
A l'exécution j'obtiens une erreur 500 :/

Une chose me parai tbizarre dans le script, c'est cette adresse:
http://127.0.0.1/eedomus/completeAuthorization.php
Tu peux m'expliquer ?

Pour l'instant j'avais juste mis les scripts sur mon serveur web pour voir à quoi ressemblait le xml, je n'ai encore rien appelé depuis mon eedomus.
Image
cedriclocqueneux
 
Messages : 159
Inscription : 10 Jan 2012
Localisation : Orléans, France

Re: FITBIT

Messagepar Madoma73 » 19 Juin 2013 15:22

le serveur fitbit fait un callback vers ton url, il faut que tu remplaces http://127.0.0.1/eedomus/completeAuthorization.php par une URL qui pointe sur le premier script (chez moi completeAuthorization.php) et qui est atteignable par ton navigateur, le serveur fitbit va en fait simplement informer ton navigateur que la suite se passe sur cette url.

malgré tout, je ne pense pas que l'erreur 500 vienne de ça, je dirai plutôt que j'ai oublié un truc important :?, il faut ajouter à ton config php, la librairie oauth qui n'est pas chargée de base. Si tu es sur WAMP, domotifred a écrit sur le post suivant une doc d'install.

Pierre
Pierre
Madoma73
 
Messages : 1440
Inscription : 16 Sep 2012
Localisation : 38

Re: FITBIT

Messagepar Aurel64 » 19 Juin 2013 17:36

Bonjour,

De mon côté j'ai testé également, ca donne :
1 - Oui il faut bien activé oauth pour que cela fonctionne
2 - Modifier l'url comme tu l'as préciser
3 - J'ai du modifier les clés // Consumer key et // Consumer secret en les mettant entre guillement sinon j'avais une erreur. Et j'ai du mettre des points virgules.
$conskey = "exxx";

// Consumer secret
$conssec = "xxx";
4 - Quand je lance le fichier completeAuthorization.php je récupère bien les deux clés :
oauth_token:yyy
oauth_secret:zzz
mais avant de me les monter il me demande de confirmer mon identifiant et mot de passe en me disant que mon application déclarer dans l'api cherche a lire des données

5 - Du coup quand je teste la chaine complète en lancant l'autre fichier que j'appele fitbit.php
j'ai l'erreur suivante :
Fatal error: Uncaught exception 'FitBitException' with message 'Fitbit request failed. Code: 401' in /home/aurelien64/www/fitbit/fitbitphp.cls.php:377 Stack trace: #0 /home/aurelien64/www/fitbit/fitbit.php(8): FitBitPHP->getProfile() #1 {main} thrown in /home/aurelien64/www/fitbit/fitbitphp.cls.php on line 377


Voilà du coup je sais si cela vient des modif que j'ai faite en 3 qui font que ca buggue

Est-ce que tu aurais une idée ?
Aurel64
 
Messages : 77
Inscription : 07 Mars 2013
Localisation : FRANCE - Pau

Re: FITBIT

Messagepar Madoma73 » 19 Juin 2013 18:14

les modifs faite en 3 --> my fault :? , j'ai déjà prévu de m'auto-flageller ce soir... quand j'ai enlevé mes identifiants, j'en ai visiblement un peu trop enlevé.

pour ton point 4, c'est normal, tu t'identifies auprès de l'api fitbit, c'est comme ça que tu récupères tes tokens, je trouve que l'identification oauth est très bien faite.

Je regarde ton 5 après le repas ce soir, mais à partir du moment ou tu as tes tokens oauth, le plus dur est fait.
tu as bien remis les consumerKey /consumer secret dans ton fitbit.php ?

l'erreur 401, c'est que tu n'es pas autorisé à te connecter à l'API.... peut être re-vérifier les 4 paramètres Consumer Key, Consumer Secret, oauth_token, oauth_secret


Pierre
Pierre
Madoma73
 
Messages : 1440
Inscription : 16 Sep 2012
Localisation : 38

Re: FITBIT

Messagepar Aurel64 » 20 Juin 2013 10:16

Oui j'ai bien mis les 2 paramètres dans le fichier. Mais en fait le fonctionnement est-il le suivant ? :
Fichier 1 = completeAuthorization.php : permet de recuperer les paramètres :
oauth_token:xxx
oauth_secret:yyy

Fichier 2 = fitbit.php : utilise le fichier 1 en utilisant les 2 paramètres récoltés
Cela permet de valider l'auhtentification qui génère le fichier xml

Est-ce que j'ai bien compris le processus ?

Autre question dans l'api fitbit, est-ce que le paramètre Callback URL doit être le même que celui du fichier1 php ou plutot celle du fichier 2 ?
En fait je comprend pas comment sont lié les deux fichiers entre eux.
Aurel64
 
Messages : 77
Inscription : 07 Mars 2013
Localisation : FRANCE - Pau

Re: FITBIT

Messagepar Madoma73 » 20 Juin 2013 13:10

dans le deuxième fichier, il te faut les 4 paramètres :
- les deux consumer-key
- les deux oauth token.

Les deux fichiers n'ont pas de lien entre eux, le premier te permet de récupérer une fois pour toutes les tokens oauth.
Le deuxième te permet d'afficher le contenu de ton compte fitbit. le callback Url du deuxième n'est pas utilisé, c'est une tentative de ma part d'unifier les deux parties.

Pierre
Pierre
Madoma73
 
Messages : 1440
Inscription : 16 Sep 2012
Localisation : 38

Re: FITBIT

Messagepar Aurel64 » 20 Juin 2013 15:01

Dans mon cas les deux clés changent à chaque fois (oauth_token et oauth_secret). Ce n'est pas ton cas ?
Aurel64
 
Messages : 77
Inscription : 07 Mars 2013
Localisation : FRANCE - Pau

Re: FITBIT

Messagepar Madoma73 » 20 Juin 2013 19:09

Tu n'es normalement pas obligé de les régénérer à chaque fois, une fois que tu en as une pare, elle reste valide. Si j'ai bien tout compris à oauth...... ( en tout cas chez moi, ça marche comme ça)

Tu as réussi à obtenir le contenu XML ?

Pierre
Pierre
Madoma73
 
Messages : 1440
Inscription : 16 Sep 2012
Localisation : 38

Re: FITBIT

Messagepar Aurel64 » 21 Juin 2013 09:22

C'est bon ca fonctionne parfaitement. J'ai reconstruit une APP Fitbit et cette fois la génération des token est tout le temps identique.
Du coup j'ai pu intégré le poids dans l'eedomus sans problème.
POur cela il faut juste modifier la dernière ligne dans le fichier fitbit pour selectionner les données du profil :
echo $xml->asXML();

Du coup dans l'eedomus en prenant un capteur HTTP il faut mettre dans le xpath :
/result/user/weight

Et hop me voilà surveiller par ma box.
Merci beaucoup pour ton aide
:D
Aurel64
 
Messages : 77
Inscription : 07 Mars 2013
Localisation : FRANCE - Pau

Re: FITBIT

Messagepar Aurel64 » 26 Août 2013 15:05

Bonjour,

J'ai un nouveau problème. J'ai souhaité dupliquer le script pour faire afficher le poids de mon fils.
Il fait 14 Kg. Sur le site Fitbit c'est correctement renseigné mais une fois que la donnée est reprise via l'api ca affiche 78 Kg dans le xml.
C'est bien un compte Fitbit independant du mien. Ce n'est pas mon poids non plus. Je ne sais pas d'ou peut sortir cette valeur.
Si je modifier une autre valeur (ex sa taille, elle est bien reprise dans le xml) mais pas le poids.
Est-ce que tu aurais un idée ?
Aurel64
 
Messages : 77
Inscription : 07 Mars 2013
Localisation : FRANCE - Pau

Suivant

Retour vers Outils tiers

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 7 invité(s)