From 69ddb10b84faaf4a97799f8bab64096d5849655e Mon Sep 17 00:00:00 2001 From: sstent Date: Wed, 3 Sep 2025 11:06:48 -0700 Subject: [PATCH] sync --- examples/activities/.gitignore | 42 +++++ examples/activities/README.md | 113 +++++++++++++ examples/activities/activities_example.go | 13 +- examples/activities/enhanced/main.go | 194 ++++++++++++++++++++++ examples/activities/go.mod | 4 +- examples/activities/go.sum | 2 + examples/activities_example.go | 80 --------- go.mod | 2 +- login_page_1756913368.html | Bin 0 -> 3583 bytes login_page_1756918964.html | Bin 0 -> 3621 bytes login_page_1756918983.html | Bin 0 -> 3582 bytes login_page_1756919005.html | Bin 0 -> 3584 bytes login_page_1756919015.html | Bin 0 -> 3583 bytes login_page_1756919019.html | Bin 0 -> 3583 bytes login_page_1756922746.html | Bin 0 -> 3584 bytes 15 files changed, 366 insertions(+), 84 deletions(-) create mode 100644 examples/activities/.gitignore create mode 100644 examples/activities/README.md create mode 100644 examples/activities/enhanced/main.go create mode 100644 examples/activities/go.sum delete mode 100644 examples/activities_example.go create mode 100644 login_page_1756913368.html create mode 100644 login_page_1756918964.html create mode 100644 login_page_1756918983.html create mode 100644 login_page_1756919005.html create mode 100644 login_page_1756919015.html create mode 100644 login_page_1756919019.html create mode 100644 login_page_1756922746.html diff --git a/examples/activities/.gitignore b/examples/activities/.gitignore new file mode 100644 index 0000000..5b7a7fd --- /dev/null +++ b/examples/activities/.gitignore @@ -0,0 +1,42 @@ +# Environment variables +.env +.env.local +.env.production + +# OS files +.DS_Store +Thumbs.db + +# IDE files +.vscode/ +.idea/ +*.swp +*.swo + +# Build artifacts +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool +*.out + +# Go workspace file +go.work +go.work.sum + +# Local data files +data/ +*.db +*.sqlite +*.sqlite3 + +# Sensitive files +*.key +*.pem +config/secrets.json \ No newline at end of file diff --git a/examples/activities/README.md b/examples/activities/README.md new file mode 100644 index 0000000..dc4f891 --- /dev/null +++ b/examples/activities/README.md @@ -0,0 +1,113 @@ +# Garmin Connect Activity Examples + +This directory contains examples demonstrating how to use the go-garth library to interact with Garmin Connect activities. + +## Prerequisites + +1. A Garmin Connect account +2. Your Garmin Connect username and password +3. Go 1.22 or later + +## Setup + +1. Create a `.env` file in this directory with your credentials: + ``` + GARMIN_USERNAME=your_username + GARMIN_PASSWORD=your_password + ``` + +2. Install dependencies: + ```bash + go mod tidy + ``` + +## Examples + +### Basic Activity Listing (`activities_example.go`) + +This example demonstrates basic authentication and activity listing functionality: + +- Authenticates with Garmin Connect +- Lists recent activities +- Shows basic activity information + +Run with: +```bash +go run activities_example.go +``` + +### Enhanced Activity Listing (`enhanced_example.go`) + +This example provides more comprehensive activity querying capabilities: + +- Lists recent activities +- Filters activities by date range +- Filters activities by activity type (e.g., running, cycling) +- Searches activities by name +- Retrieves detailed activity information including: + - Elevation data + - Heart rate metrics + - Speed metrics + - Step counts + +Run with: +```bash +go run enhanced_example.go +``` + +## Activity Types + +Common activity types you can filter by: +- `running` +- `cycling` +- `walking` +- `swimming` +- `strength_training` +- `hiking` +- `yoga` + +## Output Examples + +### Basic Listing +``` +=== RECENT ACTIVITIES === +Recent Activities (5 total): +================================================== +1. Morning Run [running] + Date: 2024-01-15 07:30 + Distance: 5.20 km + Duration: 28m + Calories: 320 + +2. Evening Ride [cycling] + Date: 2024-01-14 18:00 + Distance: 15.50 km + Duration: 45m + Calories: 280 +``` + +### Detailed Activity Information +``` +=== DETAILS FOR ACTIVITY: Morning Run === +Activity ID: 123456789 +Name: Morning Run +Type: running +Description: Easy morning run in the park +Start Time: 2024-01-15 07:30:00 +Distance: 5.20 km +Duration: 28m +Calories: 320 +Elevation Gain: 45 m +Elevation Loss: 42 m +Max Heart Rate: 165 bpm +Avg Heart Rate: 142 bpm +Max Speed: 12.5 km/h +Avg Speed: 11.1 km/h +Steps: 5200 +``` + +## Security Notes + +- Never commit your `.env` file to version control +- The `.env` file is already included in `.gitignore` +- Consider using environment variables directly in production instead of `.env` files \ No newline at end of file diff --git a/examples/activities/activities_example.go b/examples/activities/activities_example.go index 430658d..e2b16fe 100644 --- a/examples/activities/activities_example.go +++ b/examples/activities/activities_example.go @@ -13,8 +13,17 @@ import ( ) func main() { - // Load environment variables from .env file - if err := godotenv.Load("../../../.env"); err != nil { + // Load environment variables from .env file (robust path handling) + var envPath string + if _, err := os.Stat("../../.env"); err == nil { + envPath = "../../.env" + } else if _, err := os.Stat("../../../.env"); err == nil { + envPath = "../../../.env" + } else { + envPath = ".env" + } + + if err := godotenv.Load(envPath); err != nil { log.Println("Note: Using system environment variables (no .env file found)") } diff --git a/examples/activities/enhanced/main.go b/examples/activities/enhanced/main.go new file mode 100644 index 0000000..b900cbf --- /dev/null +++ b/examples/activities/enhanced/main.go @@ -0,0 +1,194 @@ +package main + +import ( + "context" + "fmt" + "log" + "net/http" + "os" + "strings" + "time" + + "github.com/joho/godotenv" + "github.com/sstent/go-garth" +) + +func main() { + // Load environment variables from .env file (robust path handling) + var envPath string + if _, err := os.Stat("../../../.env"); err == nil { + envPath = "../../../.env" + } else if _, err := os.Stat("../../.env"); err == nil { + envPath = "../../.env" + } else { + envPath = ".env" + } + + if err := godotenv.Load(envPath); err != nil { + log.Println("Note: Using system environment variables (no .env file found)") + } + + // Get credentials from environment + username := os.Getenv("GARMIN_USERNAME") + password := os.Getenv("GARMIN_PASSWORD") + if username == "" || password == "" { + log.Fatal("GARMIN_USERNAME or GARMIN_PASSWORD not set in environment") + } + + // Create context with timeout + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + // Create token storage and authenticator + storage := garth.NewMemoryStorage() + auth := garth.NewAuthenticator(garth.ClientOptions{ + Storage: storage, + TokenURL: "https://connectapi.garmin.com/oauth-service/oauth/token", + Timeout: 30 * time.Second, + }) + + // Authenticate + token, err := auth.Login(ctx, username, password, "") + if err != nil { + log.Fatalf("Authentication failed: %v", err) + } + log.Printf("Authenticated successfully! Token expires at: %s", token.Expiry.Format(time.RFC3339)) + + // Create HTTP client with authentication transport + httpClient := &http.Client{ + Transport: garth.NewAuthTransport(auth.(*garth.GarthAuthenticator), storage, nil), + } + + // Create API client + apiClient := garth.NewAPIClient("https://connectapi.garmin.com", httpClient) + + // Create activity service + activityService := garth.NewActivityService(apiClient) + + // Example 1: List recent activities + fmt.Println("\n=== RECENT ACTIVITIES ===") + recentActivities, err := activityService.List(ctx, garth.ActivityListOptions{ + Limit: 10, + }) + if err != nil { + log.Printf("Failed to get recent activities: %v", err) + } else { + printActivities(recentActivities, "Recent Activities") + } + + // Example 2: List activities from last 30 days + fmt.Println("\n=== ACTIVITIES FROM LAST 30 DAYS ===") + thirtyDaysAgo := time.Now().AddDate(0, 0, -30) + recentMonthActivities, err := activityService.List(ctx, garth.ActivityListOptions{ + StartDate: thirtyDaysAgo, + EndDate: time.Now(), + Limit: 20, + }) + if err != nil { + log.Printf("Failed to get activities from last 30 days: %v", err) + } else { + printActivities(recentMonthActivities, "Last 30 Days") + } + + // Example 3: List running activities only + fmt.Println("\n=== RUNNING ACTIVITIES ===") + runningActivities, err := activityService.List(ctx, garth.ActivityListOptions{ + ActivityType: "running", + Limit: 15, + }) + if err != nil { + log.Printf("Failed to get running activities: %v", err) + } else { + printActivities(runningActivities, "Running Activities") + } + + // Example 4: Search activities by name + fmt.Println("\n=== ACTIVITIES CONTAINING 'MORNING' ===") + morningActivities, err := activityService.List(ctx, garth.ActivityListOptions{ + NameContains: "morning", + Limit: 10, + }) + if err != nil { + log.Printf("Failed to search activities: %v", err) + } else { + printActivities(morningActivities, "Activities with 'morning' in name") + } + + // Example 5: Get detailed information for the first activity + if len(recentActivities) > 0 { + firstActivity := recentActivities[0] + fmt.Printf("\n=== DETAILS FOR ACTIVITY: %s ===\n", firstActivity.Name) + + details, err := activityService.Get(ctx, firstActivity.ActivityID) + if err != nil { + log.Printf("Failed to get activity details: %v", err) + } else { + printActivityDetails(details) + } + } + + fmt.Println("\nEnhanced activity listing example completed successfully!") +} + +func printActivities(activities []garth.Activity, title string) { + if len(activities) == 0 { + fmt.Printf("No %s found\n", title) + return + } + + fmt.Printf("\n%s (%d total):\n", title, len(activities)) + fmt.Println(strings.Repeat("=", 50)) + + for i, activity := range activities { + fmt.Printf("%d. %s [%s]\n", i+1, activity.Name, activity.Type) + fmt.Printf(" Date: %s\n", activity.StartTime.Format("2006-01-02 15:04")) + fmt.Printf(" Distance: %.2f km\n", activity.Distance/1000) + fmt.Printf(" Duration: %s\n", formatDuration(activity.Duration)) + fmt.Printf(" Calories: %d\n", activity.Calories) + fmt.Println() + } +} + +func printActivityDetails(details *garth.ActivityDetails) { + fmt.Printf("Activity ID: %d\n", details.ActivityID) + fmt.Printf("Name: %s\n", details.Name) + fmt.Printf("Type: %s\n", details.Type) + fmt.Printf("Description: %s\n", details.Description) + fmt.Printf("Start Time: %s\n", details.StartTime.Format("2006-01-02 15:04:05")) + fmt.Printf("Distance: %.2f km\n", details.Distance/1000) + fmt.Printf("Duration: %s\n", formatDuration(details.Duration)) + fmt.Printf("Calories: %d\n", details.Calories) + + if details.ElevationGain > 0 { + fmt.Printf("Elevation Gain: %.0f m\n", details.ElevationGain) + } + if details.ElevationLoss > 0 { + fmt.Printf("Elevation Loss: %.0f m\n", details.ElevationLoss) + } + if details.MaxHeartRate > 0 { + fmt.Printf("Max Heart Rate: %d bpm\n", details.MaxHeartRate) + } + if details.AvgHeartRate > 0 { + fmt.Printf("Avg Heart Rate: %d bpm\n", details.AvgHeartRate) + } + if details.MaxSpeed > 0 { + fmt.Printf("Max Speed: %.1f km/h\n", details.MaxSpeed*3.6) + } + if details.AvgSpeed > 0 { + fmt.Printf("Avg Speed: %.1f km/h\n", details.AvgSpeed*3.6) + } + if details.Steps > 0 { + fmt.Printf("Steps: %d\n", details.Steps) + } +} + +func formatDuration(seconds float64) string { + duration := time.Duration(seconds * float64(time.Second)) + hours := int(duration.Hours()) + minutes := int(duration.Minutes()) % 60 + + if hours > 0 { + return fmt.Sprintf("%dh %dm", hours, minutes) + } + return fmt.Sprintf("%dm", minutes) +} diff --git a/examples/activities/go.mod b/examples/activities/go.mod index 5747dce..871c558 100644 --- a/examples/activities/go.mod +++ b/examples/activities/go.mod @@ -5,4 +5,6 @@ go 1.22 require ( github.com/joho/godotenv v1.5.1 github.com/sstent/go-garth v0.1.0 -) \ No newline at end of file +) + +replace github.com/sstent/go-garth => ../../ diff --git a/examples/activities/go.sum b/examples/activities/go.sum new file mode 100644 index 0000000..d61b19e --- /dev/null +++ b/examples/activities/go.sum @@ -0,0 +1,2 @@ +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= diff --git a/examples/activities_example.go b/examples/activities_example.go deleted file mode 100644 index abe36f5..0000000 --- a/examples/activities_example.go +++ /dev/null @@ -1,80 +0,0 @@ -package main - -import ( - "context" - "fmt" - "log" - "net/http" - "os" - "time" - - "github.com/joho/godotenv" - "github.com/sstent/go-garth" -) - -func main() { - // Load environment variables from .env file - if err := godotenv.Load("../../.env"); err != nil { - log.Println("Note: Using system environment variables (no .env file found)") - } - - // Get credentials from environment - username := os.Getenv("GARMIN_USERNAME") - password := os.Getenv("GARMIN_PASSWORD") - if username == "" || password == "" { - log.Fatal("GARMIN_USERNAME or GARMIN_PASSWORD not set in environment") - } - - // Create context with timeout - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - - // Create token storage and authenticator - storage := garth.NewMemoryStorage() - auth := garth.NewAuthenticator(garth.ClientOptions{ - Storage: storage, - TokenURL: "https://connectapi.garmin.com/oauth-service/oauth/token", - Timeout: 30 * time.Second, - }) - - // Authenticate - token, err := auth.Login(ctx, username, password, "") - if err != nil { - log.Fatalf("Authentication failed: %v", err) - } - log.Printf("Authenticated successfully! Token expires at: %s", token.Expiry.Format(time.RFC3339)) - - // Create HTTP client with authentication transport - httpClient := &http.Client{ - Transport: garth.NewAuthTransport(auth.(*garth.GarthAuthenticator), storage, nil), - } - - // Create API client - apiClient := garth.NewAPIClient("https://connectapi.garmin.com", httpClient) - - // Create activity service - activityService := garth.NewActivityService(apiClient) - - // List last 20 activities - activities, err := activityService.List(ctx, garth.ActivityListOptions{ - Limit: 20, - }) - if err != nil { - log.Fatalf("Failed to get activities: %v", err) - } - - // Print activities - fmt.Println("\nLast 20 Activities:") - fmt.Println("=======================================") - for i, activity := range activities { - fmt.Printf("%d. %s [%s] - %s\n", i+1, - activity.Name, - activity.Type, - activity.StartTime.Format("2006-01-02 15:04")) - fmt.Printf(" Distance: %.2f km, Duration: %.0f min\n\n", - activity.Distance/1000, - activity.Duration/60) - } - - fmt.Println("Example completed successfully!") -} diff --git a/go.mod b/go.mod index 39d1206..1fc068b 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,4 @@ module github.com/sstent/go-garth go 1.22 -require github.com/joho/godotenv v1.5.1 // indirect +require github.com/joho/godotenv v1.5.1 diff --git a/login_page_1756913368.html b/login_page_1756913368.html new file mode 100644 index 0000000000000000000000000000000000000000..651f29afa5b4ead2fa4f4ec6607fbe72a0779a8f GIT binary patch literal 3583 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 F00SNP*`@#h literal 0 HcmV?d00001 diff --git a/login_page_1756918964.html b/login_page_1756918964.html new file mode 100644 index 0000000000000000000000000000000000000000..317189703183df266b42d911d5998dbe46024bce GIT binary patch literal 3621 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 literal 0 HcmV?d00001 diff --git a/login_page_1756918983.html b/login_page_1756918983.html new file mode 100644 index 0000000000000000000000000000000000000000..f2c9d6dfadccb415ded458210f87cda4ca63b72b GIT binary patch literal 3582 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 literal 0 HcmV?d00001 diff --git a/login_page_1756919015.html b/login_page_1756919015.html new file mode 100644 index 0000000000000000000000000000000000000000..28745f45ef1127d3a8bbc27c1aa33e4107b54c52 GIT binary patch literal 3583 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 F00R~O?%)6b literal 0 HcmV?d00001 diff --git a/login_page_1756922746.html b/login_page_1756922746.html new file mode 100644 index 0000000000000000000000000000000000000000..af19a0821299442f68d2edea1075ffda4243876a GIT binary patch literal 3584 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 GT>}Hq`u3Rs literal 0 HcmV?d00001