FAIRE:
garmin.cn
et garmin.com
Si quelque chose ne fonctionne pas, veuillez d'abord vérifier https://connect.garmin.com/status/.
Actuellement, la plupart des fonctionnalités précédentes fonctionnent, mais certaines API Rest ne sont pas ajoutées, telles que Gear
, Workout
, Badge
, etc. Donc, si vous avez besoin de ces fonctionnalités, veuillez ajouter un PR.
Tous les travaux ci-dessus sont inspirés de https://github.com/matin/garth. Merci beaucoup.
Une puissante bibliothèque JavaScript pour se connecter à Garmin Connect pour envoyer et recevoir des données de santé et d'entraînement. Il est livré avec des méthodes prédéfinies pour obtenir et définir différents types de données pour votre compte Garmin, mais il offre également la possibilité de faire des requêtes personnalisées. GET
, POST
et PUT
sont actuellement pris en charge. Cela facilite la mise en œuvre de tout ce qui pourrait manquer pour répondre à vos besoins.
Cette bibliothèque vous demandera d'ajouter un fichier de configuration à la racine de votre projet appelé garmin.config.json
contenant votre nom d'utilisateur et votre mot de passe pour le service Garmin Connect.
{
"username" : " [email protected] " ,
"password" : " MySecretPassword "
}
$ npm install garmin-connect
const { GarminConnect } = require ( 'garmin-connect' ) ;
// Create a new Garmin Connect Client
const GCClient = new GarminConnect ( {
username : '[email protected]' ,
password : 'MySecretPassword'
} ) ;
// Uses credentials from garmin.config.json or uses supplied params
await GCClient . login ( ) ;
const userProfile = await GCClient . getUserProfile ( ) ;
Vous pouvez maintenant vérifier userProfile.userName
pour vérifier que votre connexion a réussi.
GCClient . saveTokenToFile ( '/path/to/save/tokens' ) ;
Résultat:
$ ls /path/to/save/tokens
oauth1_token.json oauth2_token.json
Jeton de réutilisation :
GCClient . loadTokenByFile ( '/path/to/save/tokens' ) ;
const oauth1 = GCClient . client . oauth1Token ;
const oauth2 = GCClient . client . oauth2Token ;
// save to db or other storage
...
Jeton de réutilisation :
GCClient . loadToken ( oauth1 , oauth2 ) ;
Il s'agit d'une fonctionnalité expérimentale qui n'offre peut-être pas encore une stabilité totale.
Après une connexion réussie, le getter et le setter sessionJson
peuvent être utilisés pour exporter et restaurer votre session.
// Exporting the session
const session = GCClient . sessionJson ;
// Use this instead of GCClient.login() to restore the session
// This will throw an error if the stored session cannot be reused
GCClient . restore ( session ) ;
La session exportée doit être sérialisable et peut être stockée sous forme de chaîne JSON.
Une session stockée ne peut être réutilisée qu'une seule fois et devra être stockée après chaque demande. Cela peut être fait en attachant du stockage à l'événement sessionChange
.
GCClient . onSessionChange ( ( session ) => {
/*
Your choice of storage here
node-persist will probably work in most cases
*/
} ) ;
Pour être sûr d'utiliser une session stockée si possible, mais de revenir à une connexion régulière, on peut utiliser la méthode restoreOrLogin
. Les arguments username
et password
sont tous deux facultatifs et le .login()
normal sera appelé si la restauration de session échoue.
await GCClient . restoreOrLogin ( session , username , password ) ;
sessionChange
se déclenchera lors d'un changement dans la sessionJson
en cours Pour attacher un écouteur à un événement, utilisez la méthode .on()
.
GCClient . on ( 'sessionChange' , ( session ) => console . log ( session ) ) ;
Il n'existe actuellement aucun moyen de supprimer des auditeurs.
Recevoir des informations utilisateur de base
GCClient . getUserInfo ( ) ;
Recevoir des informations sur les utilisateurs sociaux
GCClient . getSocialProfile ( ) ;
Obtenez une liste de toutes les connexions sociales
GCClient . getSocialConnections ( ) ;
Obtenez une liste de tous les appareils enregistrés, y compris les numéros de modèle et les versions du micrologiciel.
GCClient . getDeviceInfo ( ) ;
getActivities(start: number, limit: number, activityType?: ActivityType, subActivityType?: ActivitySubType): Promise<IActivity[]>
Récupère une liste d'activités en fonction des paramètres spécifiés.
start
(nombre, facultatif) : index pour commencer à récupérer les activités.limit
(nombre, facultatif) : nombre d'activités à récupérer.activityType
(ActivityType, facultatif) : type d'activité (si spécifié, le début doit être nul).subActivityType
(ActivitySubType, facultatif) : sous-type d'activité (si spécifié, le début doit être nul). Promise<IActivity[]>
: une promesse qui se résout en un ensemble d'activités. const activities = await GCClient . getActivities (
0 ,
10 ,
ActivityType . Running ,
ActivitySubType . Outdoor
) ;
getActivity(activity: { activityId: GCActivityId }): Promise<IActivity>
Récupère les détails d’une activité spécifique en fonction de l’ activityId
fourni.
activity
(objet) : un objet contenant la propriété activityId
.
activityId
(GCActivityId) : Identifiant de l’activité souhaitée. Promise<IActivity>
: une promesse qui correspond aux détails de l'activité spécifiée. const activityDetails = await GCClient . getActivity ( {
activityId : 'exampleActivityId'
} ) ;
Pour obtenir une liste des activités dans votre fil d'actualité, utilisez la méthode getNewsFeed
. Cette fonction prend deux arguments, start et limit , qui sont utilisés pour la pagination. Les deux sont facultatifs et seront par défaut ceux utilisés par Garmin Connect. Pour être sûr d'obtenir toutes les activités, utilisez-le correctement.
// Get the news feed with a default length with most recent activities
GCClient . getNewsFeed ( ) ;
// Get activities in feed, 10 through 15. (start 10, limit 5)
GCClient . getNewsFeed ( 10 , 5 ) ;
Utilisez l'activityId pour télécharger les données d'activité d'origine. Habituellement, celui-ci est fourni sous forme de fichier .zip.
const [ activity ] = await GCClient . getActivities ( 0 , 1 ) ;
// Directory path is optional and defaults to the current working directory.
// Downloads filename will be supplied by Garmin.
GCClient . downloadOriginalActivityData ( activity , './some/path/that/exists' ) ;
Télécharge un fichier d'activité en tant que nouvelle activité. Le fichier peut être un fichier gpx
, tcx
ou fit
. Si l'activité existe déjà, le résultat aura un code d'état de 409. Téléchargement corrigé dans la version 1.4.4, Garmin a modifié l'API de téléchargement, la réponse detailedImportResult
ne contient pas le nouvel identifiant d'activité.
const upload = await GCClient . uploadActivity ( './some/path/to/file.fit' ) ;
// not working
const activityId = upload . detailedImportResult . successes [ 0 ] . internalId ;
const uploadId = upload . detailedImportResult . uploadId ;
Télécharge une image vers l'activité
const [ latestActivty ] = await GCClient . getActivities ( 0 , 1 ) ;
const upload = await GCClient . uploadImage (
latestActivty ,
'./some/path/to/file.jpg'
) ;
Supprimer une image de l'activité
const [ activity ] = await GCClient . getActivities ( 0 , 1 ) ;
const activityDetails = await GCClient . getActivityDetails ( activity . activityId ) ;
await GCClient . deleteImage (
activity ,
activityDetails . metadataDTO . activityImages [ 0 ] . imageId
) ;
getSteps(date?: Date): Promise<number>
Récupère le nombre total d’étapes pour une date donnée.
date
(Date, facultatif) : Date des informations sur les étapes demandées ; la valeur par défaut est aujourd'hui si aucune date n'est fournie. Promise<number>
: une promesse qui correspond au nombre total d'étapes pour la date spécifiée. const totalSteps = await GCClient . getSteps ( new Date ( '2020-03-24' ) ) ;
getSleepData(date: string): Promise<SleepData>
Récupère toutes les données de sommeil pour une date donnée
date
(Date, facultatif) : date des informations demandées, celle-ci sera par défaut aujourd'hui si aucune date n'est fournie Promise<SleepData>
: une promesse qui se résout en un objet contenant des informations détaillées sur le sommeil.
dailySleepDTO
(objet) : informations sur le sommeil quotidien de l'utilisateur.id
(numéro) : L’identifiant unique de l’enregistrement de sommeil.userProfilePK
(numéro) : l'identifiant du profil de l'utilisateur.calendarDate
(chaîne) : la date de l'enregistrement du sommeil.sleepMovement
(array) : un tableau de données sur les mouvements du sommeil.remSleepData
(booléen) : indique si les données de sommeil paradoxal sont disponibles.sleepLevels
(array) : un tableau de données sur les niveaux de sommeil.restlessMomentsCount
(nombre) : nombre de moments d'agitation pendant le sommeil. const detailedSleep = await GCClient . getSleepDuration ( new Date ( '2020-03-24' ) ) ;
getSleepDuration(date: string): Promise<{hours: number, minutes: number}
Récupère les heures et les minutes de sommeil pour une date donnée
date
(Date, facultatif) : date des informations demandées, celle-ci sera par défaut aujourd'hui si aucune date n'est fournie Promise<{hours: string, minutes: string }>
: Une promesse qui se résout en un objet contenant des informations sur la durée du sommeil
hours
(chaîne) : nombre d'heuresminutes
(chaîne) : nombre de minutes const detailedSleep = await GCClient . getSleepDuration ( new Date ( '2020-03-24' ) ) ;
getDailyWeightData(date?: Date): Promise<number>
Récupère le poids quotidien et le convertit de grammes en livres.
date
(Date, facultatif) : Date des informations demandées. La valeur par défaut est la date actuelle. Promise<number>
: Une promesse qui correspond au poids quotidien converti de grammes en livres. Error
: si des données de poids quotidien valides ne peuvent pas être trouvées pour la date spécifiée. const weightData = await GCClient . getDailyWeightData ( new Date ( '2023-12-25' ) ) ;
getDailyWeightInPounds(date?: Date): Promise<number>
Récupère le poids quotidien en livres pour une date donnée.
date
(Date, facultatif) : Date des informations demandées ; la valeur par défaut est aujourd'hui si aucune date n'est fournie. Promise<number>
: Une promesse qui correspond au poids quotidien en livres. const weightInPounds = await GCClient . getDailyWeightInPounds (
new Date ( '2020-03-24' )
) ;
getDailyHydration(date?: Date): Promise<number>
Récupère les données d'hydratation quotidiennes et les convertit de millilitres en onces.
date
(Date, facultatif) : Date des informations demandées. La valeur par défaut est la date actuelle.Promise<number>
: Une promesse qui correspond aux données d'hydratation quotidiennes converties de millilitres en onces.Error
: Si des données d'hydratation quotidiennes valides ne sont pas trouvées pour la date spécifiée ou si la réponse est invalide. const hydrationInOunces = await GCClient . getDailyHydration (
new Date ( '2023-12-25' )
) ;
getGolfSummary(): Promise<GolfSummary>
Récupère un résumé des données de la carte de score de golf.
Promise<GolfSummary>
: une promesse qui correspond au résumé de la carte de score de golf. const golfSummary = await GCClient . getGolfSummary ( ) ;
getGolfScorecard(scorecardId: number): Promise<GolfScorecard>
Récupère les données de la carte de score de golf pour une carte de score spécifique.
scorecardId
(numéro) : Identifiant de la carte de score de golf souhaitée. Promise<GolfScorecard>
: une promesse qui correspond aux données de la carte de score de golf. const scorecardId = 123 ; // Replace with the desired scorecard ID
const golfScorecard = await GCClient . getGolfScorecard ( scorecardId ) ;
getHeartRate(date?: Date): Promise<HeartRate>
Récupère les données de fréquence cardiaque quotidiennes pour une date donnée.
date
(Date, facultatif) : Date des données de fréquence cardiaque demandées ; la valeur par défaut est aujourd'hui si aucune date n'est fournie. Promise<HeartRate>
: Une promesse qui correspond aux données de fréquence cardiaque quotidiennes. const heartRateData = await GCClient . getHeartRate ( new Date ( '2020-03-24' ) ) ;
const activities = await GCClient . getActivities ( 0 , 1 ) ;
const activity = activities [ 0 ] ;
activity [ 'activityName' ] = 'The Updated Name' ;
await GCClient . updateActivity ( activity ) ;
Supprime une activité.
const activities = await GCClient . getActivities ( 0 , 1 ) ;
const activity = activities [ 0 ] ;
await GCClient . deleteActivity ( activity ) ;
updateHydrationLogOunces(date?: Date, valueInOz: number): Promise<WaterIntake>
Ajoute une entrée du journal d'hydratation en onces pour une date donnée.
date
(Date, facultatif) : date de l'entrée du journal ; la valeur par défaut est aujourd'hui si aucune date n'est fournie.valueInOz
(nombre) : quantité d'eau consommée en onces. Accepte un nombre négatif. Promise<WaterIntake>
: une promesse qui correspond à l'entrée du journal d'hydratation. const hydrationLogEntry = await GCClient . addHydrationLogOunces (
new Date ( '2020-03-24' ) ,
16
) ;
updateWeight(date = new Date(), lbs: number, timezone: string): Promise<UpdateWeight>
Met à jour les informations de poids
date
(facultatif) : Objet date représentant la date de saisie du poids. La valeur par défaut est la date actuelle si elle n'est pas fournie.lbs
(nombre) : valeur du poids en livres.timezone
(string) : chaîne représentant le fuseau horaire pour l’entrée du poids. Promise<UpdateWeight>
: une promesse qui correspond au résultat de la mise à jour du poids. await GCClient . updateWeight ( undefined , 202.9 , 'America/Los_Angeles' ) ;
Pour ajouter un entraînement personnalisé, utilisez addWorkout
ou plus précisément addRunningWorkout
.
GCClient . addRunningWorkout ( 'My 5k run' , 5000 , 'Some description' ) ;
Ajoutera un entraînement de course à pied de 5 km appelé "Ma course de 5 km" et renverra un objet JSON représentant l'entraînement enregistré.
Pour ajouter un entraînement à votre calendrier, recherchez d'abord votre entraînement, puis ajoutez-le à une date spécifique.
const workouts = await GCClient . getWorkouts ( ) ;
const id = workouts [ 0 ] . workoutId ;
GCClient . scheduleWorkout ( { workoutId : id } , new Date ( '2020-03-24' ) ) ;
Cela ajoutera l'entraînement à une date spécifique dans votre calendrier et le fera apparaître automatiquement si vous utilisez l'une des montres Garmin.
Supprimer un entraînement est très similaire à en planifier un.
const workouts = await GCClient . getWorkouts ( ) ;
const id = workouts [ 0 ] . workoutId ;
GCClient . deleteWorkout ( { workoutId : id } ) ;
Cette bibliothèque gérera les demandes personnalisées adressées à votre session Garmin Connect active. De nombreuses URL différentes sont utilisées, ce qui signifie que cette bibliothèque ne les couvrira probablement pas toutes. En utilisant l'outil d'analyse de réseau, vous pouvez trouver les URL utilisées par Garmin Connect pour récupérer des données.
Supposons que j'ai trouvé une requête GET
à l'URL suivante :
https://connect.garmin.com/modern/proxy/wellness-service/wellness/dailyHeartRate/22f5f84c-de9d-4ad6-97f2-201097b3b983?date=2020-03-24
La demande peut être envoyée à l'aide GCClient
en exécutant
// You can get your displayName by using the getUserInfo method;
const displayName = '22f5f84c-de9d-4ad6-97f2-201097b3b983' ;
const url =
'https://connect.garmin.com/modern/proxy/wellness-service/wellness/dailyHeartRate/' ;
const dateString = '2020-03-24' ;
GCClient . get ( url + displayName , { date : dateString } ) ;
et vous rapportera le même résultat qu'en utilisant la méthode fournie
GCClient . getHeartRate ( ) ;
Remarquez comment le client gardera une trace des URL, de vos informations utilisateur et maintiendra la session en vie.
De nombreuses réponses de Garmin Connect manquent de définitions de type et la valeur par défaut est unknown
. N'hésitez pas à ajouter des types en ouvrant une pull request.
Pour l'instant, cette bibliothèque ne prend en charge que les éléments suivants :