I. Introdução

Este relatório de desenvolvimento tem como objetivo demonstrar como usar a API do Notion para automatizar a programação de exercícios. O Notion é uma ferramenta de produtividade tudo-em-um que permite aos usuários criar e organizar bancos de dados, notas, tarefas e muito mais. A API do Notion fornece aos desenvolvedores acesso programático aos recursos do Notion, possibilitando a automação de várias tarefas.

O trecho de código fornecido demonstra como usar a API do Notion para criar eventos de exercícios em um banco de dados com base em uma programação pré-definida. O script recupera os eventos existentes em um intervalo de datas específico e cria novos eventos para os dias que não têm nenhum evento agendado. A programação de exercícios é definida no dicionário days_of_week, que mapeia cada dia da semana para um nome de exercício e uma lista de tags.

Ao automatizar o processo de programação de exercícios com a API do Notion, os desenvolvedores podem economizar tempo e reduzir erros manuais. Este relatório fornecerá um guia passo a passo para ajudá-lo a configurar a API do Notion e entender os vários componentes do trecho de código.

II. Configurando a API do Notion

Para usar a API do Notion, você precisa ter uma conta no Notion e uma integração configurada. Aqui está um guia passo a passo para autenticar na API do Notion:

  1. Crie uma integração no Notion

    • Faça login no Notion e navegue até a página de Integrações clicando no ícone do perfil no canto inferior esquerdo da tela e em seguida, clicando em “Integrações”.
    • Clique no botão “Criar nova integração”.
    • Dê um nome à sua integração e selecione o espaço de trabalho onde você deseja usá-la.
    • Clique no botão “Enviar” para criar a integração.
  2. Obtenha seu token de integração

    • Depois de criada a integração, você pode obter o token de integração clicando no nome da integração.
    • Copie o token de integração para usá-lo em seu código.
  3. Instale o pacote da API do Notion

    • Abra o seu terminal ou prompt de comando.

    • Execute o seguinte comando para instalar o pacote da API do Notion:

      pip install notion-client
      
  4. Configure o cliente da API do Notion

    • Importe o cliente da API do Notion em seu código adicionando a seguinte linha no topo:

      from notion_client import Client
      
    • Autentique o cliente adicionando a seguinte linha e substituindo <API Key> pelo seu token de integração:

      notion = Client(auth="<API Key>")
      
  5. Configure os detalhes do banco de dados

    • Obtenha o ID do banco de dados onde você deseja adicionar eventos.
    • Substitua a variável database_id no trecho de código pelo seu ID de banco de dados.

O trecho de código fornecido usa o objeto notion_client.Client para interagir com a API do Notion. O objeto Client é usado para autenticar o cliente da API e fornece acesso a vários recursos do Notion, como bancos de dados e páginas.

A variável database_id é definida como o ID do banco de dados do Notion onde os eventos de exercícios serão adicionados. O ID pode ser encontrado na URL do banco de dados.

III. Definindo a Programação de Exercícios

A programação de exercícios é definida no trecho de código usando as seguintes variáveis:

  • start_days_ago: o número de dias antes da data de hoje para iniciar a programação
  • end_days_after: o número de dias após a data de hoje para encerrar a programação
  • days_of_week: um dicionário que mapeia cada dia da semana para um nome de exercício e uma lista de tags.

O dicionário days_of_week é usado para definir o plano de exercícios para cada dia da semana. Cada dia da semana é uma chave no dicionário e o valor correspondente é outro dicionário que contém o nome do exercício e uma lista de tags associadas ao exercício. Por exemplo:

days_of_week = {
    "Monday": {"name": "DAY 1", "tag": ["chest", "triceps"]},
    "Tuesday": {"name": "DAY 2", "tag": ["back", "biceps"]},
    "Wednesday": {"name": "DAY 3", "tag": ["lower body", "shoulder"]},
    "Thursday": {"name": "DAY 1", "tag": ["chest", "triceps"]},
    "Friday": {"name": "DAY 2", "tag": ["back", "biceps"]},
    "Saturday": {"name": "DAY 3", "tag": ["lower body", "shoulder"]},
}

Neste exemplo, a programação é dividida em três dias e cada dia tem um exercício específico e tags associadas a ele.

As variáveis start_days_ago e end_days_after são usadas para definir o intervalo de datas para a programação de exercícios. start_days_ago especifica quantos dias antes da data de hoje para começar a programação e end_days_after especifica quantos dias após a data de hoje para encerrar a programação.

O trecho de código usa o módulo datetime para obter a data de hoje e calcular as datas de início e término da programação de exercícios. A data de início é obtida subtraindo start_days_ago da data de hoje e a data de término é obtida adicionando end_days_after à data de hoje. As datas são formatadas como strings no formato %Y-%m-%d.

IV. Consultando os Eventos Existente

Antes de criar novos eventos de exercícios, o trecho de código recupera os eventos existentes dentro do intervalo de datas definido. Isso é feito para evitar a criação de eventos duplicados na mesma data.

O método notion.databases.query() é usado para consultar o banco de dados do Notion e recuperar os eventos existentes. O parâmetro filter é usado para especificar as condições de filtro para a consulta. Neste caso, o filtro é definido para recuperar os eventos que caem dentro das datas de início e término definidas no trecho de código. Aqui está um exemplo do filtro usado na consulta:

{
    "and": [
        {"property": "Date", "date": {"on_or_after": start_date}},
        {"property": "Date", "date": {"on_or_before": end_date}}
    ]
}

Esse filtro retorna eventos que têm uma propriedade Data que cai entre as datas de start_date e end_date.

O atributo results da resposta da consulta é usado para obter os eventos existentes dentro do intervalo de datas. Os resultados são armazenados na variável existing_events para uso posterior no trecho de código.

existing_events = notion.databases.query(
    **{
        "database_id": database_id,
        "filter": {
            "and": [
                {"property": "Date", "date": {"on_or_after": start_date}},
                {"property": "Date", "date": {"on_or_before": end_date}}
            ]
        },
    }
).get("results")

V. Criando Novos Eventos

Depois que os eventos existentes dentro do intervalo de datas são obtidos, o trecho de código prossegue para criar novos eventos de exercícios para cada dia dentro do intervalo de datas da programação.

O trecho de código usa um loop for para iterar por cada data dentro do intervalo de datas. Um novo evento é criado para cada dia que não é um domingo:

for date in (datetime.now() + timedelta(days=n) for n in range(-start_days_ago, end_days_after + 1)):
    # skip Sundays
    if date.strftime("%A") == "Sunday":
        continue

O método strftime() é usado para obter o nome do dia da semana a partir da data e, se o nome do dia da semana for “Domingo”, o loop pula esse dia e passa para o próximo dia.

O trecho de código então verifica se um evento já existe na data atual:

if any(event.get("properties").get("Date").get("date").get("start") == date.strftime("%Y-%m-%d") for event in existing_events):
    print(f"Event already exists for {date.strftime('%Y-%m-%d')}. Skipping.")
    continue

Se um evento já existe na data atual, o loop pula esse dia e passa para o próximo dia.

Se nenhum evento existir na data atual, um novo evento é criado com o nome do exercício e as tags associadas àquele dia da semana:

day_of_week = date.strftime("%A")
event_name = days_of_week[day_of_week]["name"]
event_tag = days_of_week[day_of_week]["tag"]
new_event = {
    "Name": {"title": [{"text": {"content": event_name}}]},
    "Date": {"date": {"start": date.strftime("%Y-%m-%d")}},
    "Tag": {"multi_select": [{"name": tag} for tag in event_tag]},
}
notion.pages.create(parent={"database_id": database_id}, properties=new_event)

O nome do exercício e as tags associadas àquele dia da semana são obtidos do dicionário days_of_week. O dicionário new_event é usado para definir as propriedades do novo evento, que inclui o nome do evento, data e tags. O método notion.pages.create() é usado para criar o novo evento no banco de dados do Notion.

Ao criar novos eventos para cada dia da semana dentro do intervalo de datas da programação, os desenvolvedores podem automatizar o processo de agendamento de exercícios e garantir que o plano de exercícios esteja atualizado e preciso.

VI. Conclusão

Neste projeto, demonstramos como usar a API do Notion para automatizar o processo de criação de uma programação de exercícios em um banco de dados do Notion. O trecho de código que fornecemos pode ser usado para criar uma programação de exercícios para um intervalo de datas específico e adicionar automaticamente novos eventos ao banco de dados com base no plano de exercícios definido.

A API do Notion pode ser usada para automatizar uma ampla variedade de tarefas, como gerenciar uma lista de tarefas, rastrear despesas ou organizar tarefas de projeto. Com a API do Notion, os desenvolvedores podem construir integrações personalizadas e automatizar tarefas repetitivas, economizando tempo e aumentando a produtividade.

No geral, a API do Notion oferece uma ferramenta poderosa para que os desenvolvedores integrem o Notion em seu fluxo de trabalho e automatizem suas tarefas. À medida que o Notion continua a crescer em popularidade, podemos esperar ver mais desenvolvedores criando integrações e automatizando tarefas com a API do Notion.

No futuro, planejamos expandir este projeto adicionando mais recursos e integrações com outras ferramentas. Também planejamos explorar outros casos de uso para a API do Notion e ver como ela pode ser usada para automatizar outras tarefas em nosso fluxo de trabalho.


Source code : https://github.com/hobbyworker/notion-workout-scheduler