Como montar uma planilha de treinos com base em dados do Strava

Atualizado em

Recentemente comecei a me exercitar e resolvi estabelecer metas semanais para minhas caminhadas, com o objetivo de me dar algum senso de realização.

Montei uma planilha mas era muito chato ter que sempre inserir os dados do exercício manualmente e pensei: será que não há como pegar esses dados automaticamente do Strava?

Para a minha surpresa não só era possível como já havia uma solução relativamente pronta para isso. Neste post eu explico como integrar a planilha de exemplo que eu criei com o Strava e depois como exportar os treinos como eventos no Google Agenda.

Agenda

  1. A Planilha
  2. Importando dados do Strava
  3. Exportando seus treinos como eventos no Google Agenda

A Planilha

A minha planilha de “treinos” consiste em basicamente em uma página com uma lista de dados obtidos através da API do Strava (veremos na etapa seguinte) e outra página com minhas metas semanais, a idéia é que cada seção de meta semanal filtre os dados do Strava por data, fazendo com que eu não precise inserir os dados manualmente.

Atualmente minha planilha não filtra o tipo de atividade do Strava, assim caso você tenha vários tipos de atividade mas queria monitorar apenas um, terá que editar a query para cada semana que fica na primeira linha de cada semana na coluna G.

Um exemplar da planilha está disponível neste link para que você possa copiar e criar a sua própria planilha.

Importanto dados do Strava

Essa é de fato a parte mais complicada e boa parte das instruções é uma tradução do post original:

1 – Crie um novo script do Google:

Eu chamei o meu de “StravaData” sem aspas

2 – Copie o código de base e cole no seu novo script

3 – Pegue o ID da sua planilha e cole no Script. O ID da planilha fica na URL como mostrado na imagem abaixo:

Insira o ID da planilha onde tem <INSIRA_AQUI> respectivamente no seu script:

var SPREADSHEET_NAME = "Registro de Exercícios"; // Nome da Planilha
var SPREADSHEET_ID = "<INSIRA_AQUI>"; // ID da Planilha
var SHEET_NAME = "Dados"; // Nome da página de dados

4 – Adicione a Biblioteca OAuth2:
Vá em Recursos > Bibliotecas > Add Library e cole o seguinte código:
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF

5 – Para conectar ao Strava, precisamos do Client ID e do Client Secret, então precisamos criar uma Aplicação na página de Desenvolvedores do Strava:

  1. Entre na sua conta em strava.com
  2. Vá para https://strava.com/settings/api . Crie um app.
  3. Copie o Client Id e Client Secret no script.
var CLIENT_ID = ''; // Client ID do Strava
var CLIENT_SECRET = ''; // Client Secret do Strava
var SPREADSHEET_NAME = "Registro de Exercícios"; // Nome da Planilha
var SPREADSHEET_ID = "ID DA SUA PLANILHA"; // ID da Planilha
var SHEET_NAME = "Dados"; // Nome da página de dados

6 – Precisamos agora adicionar um domínio de Callback nas configurações do Strava, ainda em strava.com/settings/api, role até o fim da página e adicione script.google.com em Domínio de autorização callback

Sim, eu sou o ícone!

7 – Agora precisamos publicar seu App. Vá em Publicar > Publicar como app Web.

A janela abaixo vai abrir, no botão azul vai ter o texto “Publicar“, clique nele.

9 – Vamos agora rodar seu app e ver se está tudo ok. Selecione a função retrieveData e clique no botão de play.

Verifique se na página Dados da sua planilha já existem dados dos seus exercícios.

10 – Agora vamos fazer com que o App busque as informações periodicamente, ou seja, a cada uma hora.

11 – Vá em Editar > Acionadores do Projeto Ativo

12 – Clique em Adicionar Acionador e uma janela semelhante a essa deve aparecer

13 – Selecione a função retrieveData, escolha a versão (provavelmente vai ser Versão 1), Controlado por relógio, Temporizador de horas, A cada hora. Clique em Guardar.

Prontinho, agora sua planilha deve ser atualizada de hora em hora (que nem Tele Sena) com os últimos dados de exercício do Strava.

Exportando seus treinos como Eventos do Google Agenda

1 – Para exportar os treinos vamos também criar um script do google, siga o passo 1 da seção anterior para criar o script.

var CALENDAR_ID = "" // ID do Calendário
var PLANILHA_ID = "" // ID da Planilha

function runFromSheet() {
  var spreadsheet = SpreadsheetApp.openById(PLANILHA_ID);
  var sheet = spreadsheet.getSheetByName("Dados");
  
  runCallback(sheet);
}

function getCalendar(){
  return CalendarApp.getCalendarById(CALENDAR_ID);
}

function runCallback(spreadsheet) {
  if(spreadsheet.getSheetName() === "Dados") {
    var exercicios = spreadsheet.getRange("Dados!A2:H").getValues();
    exercicios.forEach(function(exercicio){
      if(exercicio[0] !== 'Dados' && exercicio[0] !== '') {
        var data_init = new Date(exercicio[0])
        var end_time = new Date(exercicio[0])
        var tipos = {'Walk': 'Caminhada', 'Run': 'Corrida'}
        
        var tipo = (typeof tipos[exercicio[5]] !== 'undefined') ? tipos[exercicio[5]] : exercicio[5]
        
        end_time.setSeconds(end_time.getSeconds() + parseInt(exercicio[7], 10))
        data_init.setHours(data_init.getHours() + 3)
        end_time.setHours(end_time.getHours() + 3)
        
        var title = tipo + " de " + parseFloat(exercicio[3], 10).toFixed() + "m "
        var desc = "Distância: " + exercicio[2] + "m\n" + "Velocidade Média: "+ exercicio[4] + "Km/h"
        
        if(getCalendar().getEvents(data_init, end_time).length < 1)
          getCalendar().createEvent(title, data_init, end_time, {description: desc})
      }
    });
  }
}

2 – Preencha a ID da Planilha como no passo 3 da seção anterior

var CALENDAR_ID = "" // ID do Calendário
var PLANILHA_ID = "<INSIRA AQUI>" // ID da Planilha

3 – Crie um novo calendário no Google Agenda, Clique nos três pontinhos respectivos ao seu novo Calendário na barra lateral e clique em Definições e Partilha

4 – Role até o fim da página e copie o ID do calendário

Cole o ID do calendário no Script

var CALENDAR_ID = "<INSIRA AQUI>" // ID do Calendário
var PLANILHA_ID = "ID DA SUA PLANILHA" // ID da Planilha

5 – Selecione a função runFromSheet e clique no botão de play

Observe se os eventos foram criados no seu calendário.

6 – Publique como um app web conforme etapa 7 da seção anterior

7 – Crie um acionador conforme etapa anterior, mudando apenas a função de retrieveData para runFromSheet

Prontinho, agora seus treinos já devem virar eventos no seu calendário do google quando o script rodar a cada uma hora.