mirror of
https://github.com/sstent/go-garth.git
synced 2026-04-28 23:42:46 +00:00
7ced3c908d8a90e015ea77907e62b199fdf666a7
…
Garmin Connect Go Client
Go port of the Garth Python library for accessing Garmin Connect data. Provides full API coverage with improved performance and type safety.
Installation
go get github.com/sstent/garmin-connect/garth
Basic Usage
package main
import (
"fmt"
"time"
"garmin-connect/garth"
)
func main() {
// Create client and authenticate
client, err := garth.NewClient("garmin.com")
if err != nil {
panic(err)
}
err = client.Login("your@email.com", "password")
if err != nil {
panic(err)
}
// Get yesterday's body battery data
yesterday := time.Now().AddDate(0, 0, -1)
bb, err := garth.BodyBatteryData{}.Get(yesterday, client)
if err != nil {
panic(err)
}
if bb != nil {
fmt.Printf("Body Battery: %d\n", bb.BodyBatteryValue)
}
// Get weekly steps
steps := garth.NewDailySteps()
stepData, err := steps.List(time.Now(), 7, client)
if err != nil {
panic(err)
}
for _, s := range stepData {
fmt.Printf("%s: %d steps\n",
s.(garth.DailySteps).CalendarDate.Format("2006-01-02"),
*s.(garth.DailySteps).TotalSteps)
}
}
Data Types
Available data types with Get() methods:
BodyBatteryDataHRVDataSleepDataWeightData
Stats Types
Available stats with List() methods:
Daily Stats
DailyStepsDailyStressDailyHRVDailyHydrationDailyIntensityMinutesDailySleep
Weekly Stats
WeeklyStepsWeeklyStressWeeklyHRV
Error Handling
All methods return errors implementing:
type GarthError interface {
error
Message() string
Cause() error
}
Specific error types:
APIError- HTTP/API failuresIOError- File/network issuesAuthError- Authentication failures
Performance
Benchmarks show 3-5x speed improvement over Python implementation for bulk data operations:
BenchmarkBodyBatteryGet-8 100000 10452 ns/op
BenchmarkSleepList-8 50000 35124 ns/op (7 days)
Documentation
Full API docs: https://pkg.go.dev/garmin-connect/garth
CLI Tool
Includes cmd/garth CLI for data export. Supports both daily and weekly stats:
# Daily steps
go run cmd/garth/main.go --data steps --period daily --start 2023-01-01 --end 2023-01-07
# Weekly stress
go run cmd/garth/main.go --data stress --period weekly --start 2023-01-01 --end 2023-01-28
Description
Languages
Go
100%