Holen Sie sich Google Fit API-Daten in Python

Überblick

Sie müssen OAuth2 verwenden, um die Daten mit der Google Fit-API abzurufen. Es ist praktisch, google-api-python-client zu verwenden, wenn Daten mit OAuth2 abgerufen werden. Die Methode zum Abrufen der Daten mit google-api-python-client wird unten beschrieben.

Arbeitsablauf

  1. Installieren Sie die Google Fit-App auf Ihrem eigenen Smartphone
  2. Aktivieren Sie die Google Fit-API in der Google API-Konsole und laden Sie die JSON-Datei herunter. (Dateiname ist oauth2.json)
  1. Installieren Sie google-api-python-client mit dem folgenden Befehl pip3 install google-api-python-client
  2. Führen Sie die folgende Quelle aus
  3. Da beim ersten Start keine Authentifizierungsinformationen vorhanden sind, greifen Sie auf die vom Browser ausgegebene URL zu und übergeben Sie die OAuth2-Authentifizierung

Ausführungsquelle

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(
            #Geben Sie die JSON-Datei für OAuth an, die bei Aktivierung der API erfasst wurde
            './secret/oauth2.json',
            #Geben Sie den Bereich an
            scope=OAUTH_SCOPE,
            #Geben Sie die Tokenempfangsmethode nach der Benutzerauthentifizierung an (später beschrieben).
            redirect_uri=REDIRECT_URI)

        authorize_url = flow.step1_get_authorize_url()
        print('Bitte starten Sie die folgende URL in Ihrem Browser.')
        print(authorize_url)

        code = input('Bitte geben Sie den Code ein: ').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):
    """
In Nanosekunden umrechnen
    """
    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()

    #Holen Sie sich die Daten für den vorherigen Tag
    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)

Referenzseite

Recommended Posts

Holen Sie sich Google Fit API-Daten in Python
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Holen Sie sich LEAD-Daten mit der REST-API von Marketo in Python
[Python] Abrufen von Insight-Daten mithilfe der Google My Business-API
Abrufen von Daten aus der Analyse-API mit Google API Client für Python
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Erstellen einer Google-Tabelle mit der Python / Google Data-API
Evernote-API in Python
Holen Sie sich Datum in Python
C-API in Python 3
Holen Sie sich mit Python Zeitreihendaten von k-db.com
[Python] Holen Sie sich alle Kommentare mit Youtube Data Api
Führen Sie die Google Analytics-API (Core v3) in Python aus
Holen Sie sich die Bild-URL mithilfe der Flickr-API in Python
Holen Sie sich Aktienkursdaten mit Quandl API [Python]
Was tun, um eine Google-Tabelle in Python zu erhalten?
Hit Mastodons API in Python
Holen Sie sich YouTube-Kommentare in Python
Behandeln Sie Umgebungsdaten in Python
Holen Sie sich letzten Monat in Python
Zeigen Sie UTM-30LX-Daten in Python an
Holen Sie sich Youtube-Daten mit Python
Holen Sie sich mit Python Daten vom GPS-Modul mit 10 Hz
Holen Sie sich die Terminalgröße in Python
Holen Sie sich explizit EOF in Python
Rufen Sie Daten über die Salesforce-API (Bulk-API) in Python ab und laden Sie sie in BigQuery
Blender Python API in Houdini (Python 3)
Holen Sie sich Evernote-Notizen in Python
Google Drive API-Tipps (Python)
Holen Sie sich japanische Synonyme mit Python
Holen Sie sich Ihre Herzfrequenz von der Fitbit-API in Python!
Aufblasen von Textdaten durch erneute Übersetzung mithilfe der Google-Übersetzung in Python
Drücken Sie in Python auf REST, um Daten von New Relic abzurufen
Stellen Sie die umgekehrte Geokodierung auf Japanisch mit der Python Google Maps-API bereit
Spielen Sie mit der YouTube Data API v3 mit dem Google API Python Client
Rufen Sie github api in Python auf, um Informationen zur Pull-Anforderung zu erhalten
Abrufen von Salesforce-Daten mithilfe der REST-API
Abrufen der arXiv-API in Python
Datenerfassung mit Python Googlemap API
Holen Sie sich Bewertungen mit Python Googlemap API
Klicken Sie in Python auf die Sesami-API
[Python3] Google übersetzt Google Übersetzung ohne Verwendung von API
Behandeln Sie Daten im NetCDF-Format mit Python
[Python] Mit DataReader Wirtschaftsdaten abrufen
Laden Sie Google Drive-Dateien in Python herunter
Erstellen Sie Google Mail in Python ohne Verwendung der API
Abrufen von Amazon-Daten mit Keep API # 1 Abrufen von Daten
Hashing von Daten in R und Python
Holen Sie sich ein Kommunikationsmemo in Python
Klicken Sie auf die Web-API in Python
Python Holen Sie sich das kommende Wetter von der Wetter-API
Holen Sie sich den Desktop-Pfad in Python
Implementieren Sie die REST-API schnell in Python
Holen Sie sich den Hostnamen in Python
Greifen Sie mit Python auf die Twitter-API zu
Beginnen Sie mit Python mit Blender
Verwenden Sie die Google Analytics-API von Python
Klicken Sie in Python auf die New Relic-API, um den Status des Servers abzurufen