mirror of
https://github.com/sstent/go-garth.git
synced 2025-12-06 08:01:42 +00:00
2.1 KiB
2.1 KiB
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:
DailyStepsDailyStressDailyHRVDailyHydrationDailyIntensityMinutesDailySleep
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:
go run cmd/garth/main.go --email user@example.com --password pass \
--data bodybattery --start 2023-01-01 --end 2023-01-07