Introdução

Essa será uma série de posts de como obter treinos da Garmin para baixar no seu computador de uma forma automatizada, para posterior análise ou mesmo backup desses dados.

Ambiente

A linguagem que utilizaremos será Go Lang porque? Não sei porque! Mas isso é rapidamente replicado para qualquer tipo de linguagem.

package main

import (
	"fmt"
	"log"
	"net/http"
	"strconv"
)

func main() {
    // Requisito a url
    response, err := http.Get("https://murilo.net.br/")
    
    // checo se retornou algum erro
    if err != nil {
        log.Fatal(err)
    }
    
    // Imprimo status code
    fmt.Println("Http Response Status: ", strconv.Itoa(response.StatusCode))

    if response.StatusCode >= 200 && response.StatusCode <= 299 {
        fmt.Println("HTTP STATUS OK =]")
    } else {
        fmt.Println("Oww oww =/")
    }
}

Executando o código acima:

$ go run garmin.go
Http Response Status:  200
HTTP STATUS OK =]

Problema

Um dos problemas do código acima é que ele irá esperar “infinitamente” caso tente se conectar ao servidor, para contornar esse problema vamos definir um valor de timeout.

package main

import (
	"fmt"
	"log"
	"net/http"
	"strconv"
)

func main() {
    // timeout 10 segundos
    timeout := time.Duration(10 * time.Second)
    // criamos um client
    client := &http.Client{
        Timeout: timeout,
    }
    // Requisito a url
    response, err := http.Get("https://murilo.net.br/")
    
    // checo se retornou algum erro
    if err != nil {
        log.Fatal(err)
    }
    
    // Imprimo status code
    fmt.Println("Http Response Status: ", strconv.Itoa(response.StatusCode))

    if response.StatusCode >= 200 && response.StatusCode <= 299 {
        fmt.Println("HTTP STATUS OK =]")
    } else {
        fmt.Println("Oww oww =/")
    }
}

Enviando dados

De fato requisitar por um endereço url é simples, a coisa começa a complicar quando necessitamos enviar dados para determinado endereço, como por exemplo se autenticar que é o nosso caso para o site da Garmin, antes de obter os treinos precisamos nos autenticar mas isso será uma pauta para o próximo post.