Skip to main content

Garmin SSO auth + client

Project description

Garth

Garmin SSO auth + Connect client

Background

Garth is meant for personal use and follows the philosiphy that your data is your data. You should be able to download it and analyze it in the way that you'd like. In my case, that means processing with Google Colab, Pandas, Matplotlib, etc.

There are already a few Garmin Connect libraries. Why write another?

Authentication

The most important reasoning is to build a library with authentication that works on Google Colab and doesn't require tools like Cloudscraper. Garth, in comparison:

  1. Uses the same embedded SSO as the mobile app
  2. Only requires requests as a dependency
  3. Supports MFA
  4. Supports saving and resuming sessions to avoid the need to log in each time you run a script, which is particularly useful if you have MFA enabled
  5. Appears to be working on Google Colab thus far 🤞

Python 3.10+

Google Colab, currently, uses 3.10. We should take advantage of all the goodies that come along with it. If you need to use an earlier version of Python, there are other libraries that will meet your needs. There's no intetion to backport.

JSON vs HTML

Using garth.connectapi() allows you to make requests routed to the Connect API and receive JSON vs needing to parse HTML. You can use the same endpoints the mobile app uses.

This also goes back to authentication. Garth manages the necessary Bearer Authentication (along with auto-refresh) necessary to make requests routed to the Connect API.

Instructions

Install

pip install garth

Authenticate and save session

import garth
from getpass import getpass

email = input("Enter email address: ")
password = getpass("Enter password: ")
# If there's MFA, you'll be prompted during the login
garth.login(email, password)

garth.save("~/.garth")

Attempt to resume session

import garth
from garth import GarthException
from requests import HTTPError

garth.resume("~/.garth")
try:
    garth.client.auth_token.refresh()
except (GarthException, HTTPError):
    # Session is expired. You'll need to log in again

Connect API

Wellness

sleep = garth.connectapi(
    f"/wellness-service/wellness/dailySleepData/{garth.client.username}",
    params={"date": "2023-07-05", "nonSleepBufferMinutes": 60),
)
list(sleep.keys())
[
    "dailySleepDTO",
    "sleepMovement",
    "remSleepData",
    "sleepLevels",
    "sleepRestlessMoments",
    "restlessMomentsCount",
    "wellnessSpO2SleepSummaryDTO",
    "wellnessEpochSPO2DataDTOList",
    "wellnessEpochRespirationDataDTOList",
    "sleepStress"
]

Usersummary

stress =  garth.connectapi(f"/usersummary-service/stats/stress/weekly/2023-07-05/52")
{
    "calendarDate": "2023-07-13",
    "values": {
        "highStressDuration": 2880,
        "lowStressDuration": 10140,
        "overallStressLevel": 33,
        "restStressDuration": 30960,
        "mediumStressDuration": 8760
    }
}

Google Colabs

Graph 28-day rolling average of daily stress

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

garth-0.1.14.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

garth-0.1.14-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file garth-0.1.14.tar.gz.

File metadata

  • Download URL: garth-0.1.14.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.11

File hashes

Hashes for garth-0.1.14.tar.gz
Algorithm Hash digest
SHA256 57ef9d2190b7dca872b38dd6bff22671a6195ab0e3ec3c9441edbb54353d3813
MD5 0f8c36e5e953fc70d8ba287f7c0d880a
BLAKE2b-256 7720384135453e098b846b5e8d529c59381b372286f88e94a695c60452f61cdd

See more details on using hashes here.

File details

Details for the file garth-0.1.14-py3-none-any.whl.

File metadata

  • Download URL: garth-0.1.14-py3-none-any.whl
  • Upload date:
  • Size: 7.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.11

File hashes

Hashes for garth-0.1.14-py3-none-any.whl
Algorithm Hash digest
SHA256 5bb32e7202d733ec3f0b0cf06e6bb36b3750d7c369c2255225bd19a698f8789e
MD5 79e8aac0865892f072e8b9036f0fd9eb
BLAKE2b-256 3d983cd9f592988d3f1d03260d5043f0e600ffd824dce92ba61487baef860f20

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page