Obtenez les données de l'API Google Fit en Python

Aperçu

Vous devez utiliser OAuth2 pour obtenir les données avec l'API Google Fit. Il est pratique d'utiliser google-api-python-client lors de la récupération de données à l'aide d'OAuth2. La méthode pour obtenir les données à l'aide de google-api-python-client est décrite ci-dessous.

Procédure de travail

  1. Installez l'application Google Fit sur votre propre smartphone
  2. Activez l'API Google Fit dans la console API Google et téléchargez le fichier json. (Le nom du fichier est oauth2.json)
  1. Installez google-api-python-client avec la commande suivante pip3 install google-api-python-client
  2. Exécutez la source suivante
  3. Puisqu'il n'y a aucune information d'authentification au premier démarrage, accédez à la sortie d'URL par le navigateur et passez l'authentification OAuth2

Source d'exécution

getfit.py


import os
import json
import httplib2
import requests

import time
from datetime import datetime, timedelta
from apiclient.discovery import build
from oauth2client.client import OAuth2WebServerFlow, flow_from_clientsecrets
from oauth2client.file import Storage

OAUTH_SCOPE = 'https://www.googleapis.com/auth/fitness.activity.read'
DATA_SOURCE = "derived:com.google.step_count.delta:com.google.android.gms:estimated_steps"
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'
CREDENTIALS_FILE = "./secret/credentials"

def auth_data():

    credentials = ""

    if os.path.exists(CREDENTIALS_FILE):
        credentials = Storage(CREDENTIALS_FILE).get()
    else:
        #flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI)
        flow = flow_from_clientsecrets(
            #Spécifiez le fichier JSON pour OAuth acquis lorsque l'API est activée
            './secret/oauth2.json',
            #Spécifiez la portée
            scope=OAUTH_SCOPE,
            #Spécifiez la méthode de réception du jeton après l'authentification de l'utilisateur (décrite plus loin)
            redirect_uri=REDIRECT_URI)

        authorize_url = flow.step1_get_authorize_url()
        print('Veuillez démarrer l'URL suivante dans votre navigateur.')
        print(authorize_url)

        code = input('Veuillez saisir le code: ').strip()
        credentials = flow.step2_exchange(code)

        if not os.path.exists(CREDENTIALS_FILE):
            Storage(CREDENTIALS_FILE).put(credentials)

    # Create an httplib2.Http object and authorize it with our credentials
    http = httplib2.Http()
    http = credentials.authorize(http)

    fitness_service = build('fitness', 'v1', http=http)

    return fitness_service


def retrieve_data(fitness_service, dataset):

    return fitness_service.users().dataSources(). \
        datasets(). \
        get(userId='me', dataSourceId=DATA_SOURCE, datasetId=dataset). \
        execute()


def nanoseconds(nanotime):
    """
Convertir en nanosecondes
    """
    dt = datetime.fromtimestamp(nanotime // 1000000000)
    return dt.strftime('%Y-%m-%d %H:%M:%S')


def logwrite(date, step):
    with open('./data/step.log', 'a') as outfile:
        outfile.write(str(date) + "," + str(step) + "\n")


if __name__ == "__main__":

    authdata = auth_data()

    #Récupérez les données de la veille
    TODAY = datetime.today() - timedelta(days=1)
    STARTDAY = datetime(TODAY.year, TODAY.month, TODAY.day, 0, 0, 0)
    NEXTDAY = datetime(TODAY.year, TODAY.month, TODAY.day, 23, 59, 59)
    NOW = datetime.today()

    START = int(time.mktime(STARTDAY.timetuple())*1000000000)
    NEXT = int(time.mktime(NEXTDAY.timetuple())*1000000000)
    END = int(time.mktime(NOW.timetuple())*1000000000)
    data_set = "%s-%s" % (START, NEXT)

    while True:

        if END < NEXT:
            break

        dataset = retrieve_data(authdata, data_set)

        starts = []
        ends = []
        values = []
        for point in dataset["point"]:
            if int(point["startTimeNanos"]) > START:
                starts.append(int(point["startTimeNanos"]))
                ends.append(int(point["endTimeNanos"]))
                values.append(point['value'][0]['intVal'])

        print("From: {}".format(nanoseconds(min(starts))))
        print("To: {}".format(nanoseconds(max(ends))))
        print("Steps:{}".format(sum(values)))

        step = sum(values)

        startdate = STARTDAY.date()
        logwrite(startdate, step)

        STARTDAY = STARTDAY + timedelta(days=1)
        NEXTDAY = NEXTDAY + timedelta(days=1)
        START = int(time.mktime(STARTDAY.timetuple())*1000000000)
        NEXT = int(time.mktime(NEXTDAY.timetuple())*1000000000)
        data_set = "%s-%s" % (START, NEXT)

        time.sleep(5)

Page de référence

Recommended Posts

Obtenez les données de l'API Google Fit en Python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
[Python] Obtenez des données insight à l'aide de l'API Google My Business
Obtenir des données de Quandl en Python
Obtenez des données de l'API d'analyse avec le client API Google pour python
Obtenez des données supplémentaires vers LDAP avec python
Créer une feuille de calcul Google à l'aide de l'API Python / Google Data
API Evernote en Python
Obtenir la date en Python
API C en Python 3
Obtenez des données de séries chronologiques de k-db.com avec Python
[Python] Obtenez tous les commentaires à l'aide de Youtube Data Api
Exécutez l'API Google Analytics (core v3) en python
Obtenir l'URL de l'image à l'aide de l'API Flickr en Python
Obtenez des données sur le cours de l'action avec l'API Quandl [Python]
Que faire pour obtenir une feuille de calcul Google en Python
Hit API de Mastodon en Python
Obtenez des commentaires YouTube en Python
Gérer les données ambiantes en Python
Obtenez le mois dernier en Python
Afficher les données UTM-30LX en Python
Obtenez des données Youtube avec python
Obtenez des données du module GPS à 10 Hz avec Python
Obtenir la taille du terminal en Python
Obtenir explicitement EOF en python
Obtenez des données via l'API Salesforce (API en masse) en Python et chargez-les dans BigQuery
API Blender Python dans Houdini (Python 3)
Obtenez des notes Evernote en Python
Conseils relatifs aux API Google Drive (Python)
Obtenez des synonymes japonais avec Python
Obtenez votre fréquence cardiaque à partir de l'API fitbit en Python!
Gonfler des données textuelles par retranslation à l'aide de Google Traduction en Python
Appuyez sur REST en Python pour obtenir des données de New Relic
Mettez en place le géocodage inversé en japonais avec l'API Python Google Maps
Jouez avec l'API de données YouTube v3 à l'aide du client Python de l'API Google
Appelez l'API github en python pour obtenir des informations sur la demande d'extraction
Obtenir des données Salesforce à l'aide de l'API REST
Obtenir l'API arXiv en Python
Acquisition de données à l'aide de l'API googlemap de python
Obtenez des avis avec l'API googlemap de python
Frappez l'API Sesami en Python
[Python3] Google translate google translation sans utiliser l'API
Gérez les données au format NetCDF avec Python
[Python] Obtenez des données économiques avec DataReader
Téléchargez des fichiers Google Drive en Python
Créez Gmail en Python sans utiliser l'API
Obtenez des données Amazon à l'aide de Keep API # 1 Obtenez des données
Hashing de données en R et Python
Obtenir, publier un mémo de communication en Python
Accédez à l'API Web en Python
python Obtenez la météo à venir de l'API météo
Obtenez le chemin du bureau en Python
Implémentez rapidement l'API REST en Python
Obtenez le nom d'hôte en Python
Accéder à l'API Twitter avec Python
Démarrez avec Python avec Blender
Utiliser l'API Google Analytics de Python
Accédez à l'API New Relic en Python pour obtenir l'état du serveur