I. Introducción

Este informe de desarrollo tiene como objetivo demostrar cómo usar la API de Notion para automatizar la programación de entrenamiento. Notion es una herramienta de productividad todo en uno que permite a los usuarios crear y organizar bases de datos, notas, tareas y mucho más. La API de Notion proporciona a los desarrolladores acceso programático a las características de Notion, lo que permite la automatización de diversas tareas.

El fragmento de código proporcionado muestra cómo usar la API de Notion para crear eventos de entrenamiento en una base de datos basada en una programación predefinida. El script recupera los eventos existentes dentro de un rango de fechas específico y crea nuevos eventos para los días que no tienen ningún evento programado. La programación de entrenamiento se define en el diccionario days_of_week, que asigna cada día de la semana a un nombre de entrenamiento y una lista de etiquetas.

Al automatizar el proceso de programación de entrenamiento con la API de Notion, los desarrolladores pueden ahorrar tiempo y reducir errores manuales. Este informe proporcionará una guía paso a paso para ayudarte a configurar la API de Notion y comprender los diversos componentes del fragmento de código.

II. Configurando la API de Notion

Para usar la API de Notion, necesitas tener una cuenta de Notion y una integración configurada. Aquí tienes una guía paso a paso para autenticarte en la API de Notion:

  1. Crea una integración en Notion

    • Inicia sesión en Notion y navega hasta la página de Integraciones haciendo clic en tu icono de perfil en la esquina inferior izquierda de la pantalla y luego en “Integrations”.
    • Haz clic en el botón “Create a new integration”.
    • Dale un nombre a tu integración y selecciona el espacio de trabajo donde quieres usarla.
    • Haz clic en el botón “Submit” para crear la integración.
  2. Obtén tu token de integración

    • Una vez creada tu integración, puedes obtener tu token de integración haciendo clic en el nombre de la integración.
    • Copia el token de integración para usarlo en tu código.
  3. Instala el paquete de la API de Notion

    • Abre tu terminal o símbolo del sistema.

    • Ejecuta el siguiente comando para instalar el paquete de la API de Notion:

      pip install notion-client
      
  4. Configurar el cliente de la API de Notion

    • Importa el cliente de la API de Notion en tu código agregando la siguiente línea en la parte superior:

      from notion_client import Client
      
    • Autentica el cliente agregando la siguiente línea y reemplazando <API Key> con tu token de integración:

      notion = Client(auth="<API Key>")
      
  5. Configura los detalles de la base de datos

    • Obtén el ID de la base de datos donde deseas agregar eventos.
    • Reemplaza la variable database_id en el fragmento de código con tu ID de base de datos.

El fragmento de código proporcionado utiliza el objeto notion_client.Client para interactuar con la API de Notion. El objeto Client se utiliza para autenticar al cliente de la API y proporciona acceso a varios recursos de Notion, como bases de datos y páginas.

La variable database_id se establece en el ID de la base de datos de Notion donde se agregarán los eventos de entrenamiento. El ID se puede encontrar en la URL de la base de datos.

III. Definir la programación de entrenamiento

La programación de entrenamiento se define en el fragmento de código utilizando las siguientes variables:

  • start_days_ago: el número de días antes de la fecha de hoy para comenzar la programación
  • end_days_after: el número de días después de la fecha de hoy para finalizar la programación
  • days_of_week: un diccionario que asigna cada día de la semana a un nombre de entrenamiento y una lista de etiquetas.

El diccionario days_of_week se utiliza para definir el plan de entrenamiento para cada día de la semana. Cada día de la semana es una clave en el diccionario, y el valor correspondiente es otro diccionario que contiene el nombre del entrenamiento y una lista de etiquetas asociadas con el entrenamiento. Por ejemplo:

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"]},
}

En este ejemplo, la programación se divide en tres días, y cada día tiene un entrenamiento específico y etiquetas asociadas.

Las variables start_days_ago y end_days_after se utilizan para definir el rango de fechas para la programación de entrenamiento. start_days_ago especifica cuántos días antes de la fecha de hoy comenzar la programación, y end_days_after especifica cuántos días después de la fecha de hoy finalizar la programación.

El fragmento de código utiliza el módulo datetime para obtener la fecha de hoy y calcular las fechas de inicio y finalización de la programación de entrenamiento. La fecha de inicio se obtiene restando start_days_ago de la fecha de hoy, y la fecha de finalización se obtiene sumando end_days_after a la fecha de hoy. Las fechas se formatean como cadenas en el formato %Y-%m-%d.

IV. Consulta de eventos existentes

Antes de crear nuevos eventos de entrenamiento, el fragmento de código recupera los eventos existentes dentro del rango de fechas definido. Esto se hace para evitar crear eventos duplicados en la misma fecha.

El método notion.databases.query() se utiliza para consultar la base de datos de Notion y recuperar los eventos existentes. El parámetro filter se utiliza para especificar las condiciones de filtro para la consulta. En este caso, el filtro se establece para recuperar eventos que caen dentro de las fechas de inicio y finalización definidas en el fragmento de código. Aquí tienes un ejemplo del filtro utilizado en la consulta:

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

Este filtro devuelve los eventos que tienen una propiedad Date que cae entre start_date y end_date.

El atributo results de la respuesta de la consulta se utiliza para obtener los eventos existentes dentro del rango de fechas. Los resultados se almacenan en la variable existing_events para su uso posterior en el fragmento 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. Creación de nuevos eventos

Una vez que se obtienen los eventos existentes dentro del rango de fechas, el fragmento de código procede a crear nuevos eventos de entrenamiento para cada día dentro del rango de fechas programado.

El fragmento de código utiliza un bucle for para iterar a través de cada fecha en el rango de fechas. Se crea un nuevo evento para cada día que no sea 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

Se utiliza el método strftime() para obtener el nombre del día de la semana a partir de la fecha, y si el nombre del día de la semana es “Sunday”, el bucle omite ese día y pasa al siguiente.

Luego, el fragmento de código verifica si ya existe un evento en la fecha actual:

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

Si ya existe un evento en la fecha actual, el bucle omite ese día y pasa al siguiente.

Si no hay un evento en la fecha actual, se crea un nuevo evento con el nombre del entrenamiento y las etiquetas asociadas con ese día de la 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)

El nombre del entrenamiento y las etiquetas asociadas con ese día de la semana se obtienen del diccionario days_of_week. El diccionario new_event se utiliza para definir las propiedades del nuevo evento, que incluye el nombre del evento, la fecha y las etiquetas. El método notion.pages.create() se utiliza para crear el nuevo evento en la base de datos de Notion.

Al crear nuevos eventos para cada día de la semana dentro del rango de fechas programado, los desarrolladores pueden automatizar el proceso de programación de entrenamiento y asegurarse de que el plan de entrenamiento esté actualizado y sea preciso.

VI. Conclusión

En este proyecto, hemos demostrado cómo utilizar la API de Notion para automatizar el proceso de creación de un plan de entrenamiento en una base de datos de Notion. El fragmento de código que proporcionamos se puede utilizar para crear un plan de entrenamiento para un rango de fechas específico y agregar automáticamente nuevos eventos a la base de datos según el plan de entrenamiento definido.

La API de Notion se puede utilizar para automatizar una amplia gama de tareas, como gestionar una lista de tareas, realizar un seguimiento de los gastos u organizar tareas de proyecto. Con la API de Notion, los desarrolladores pueden crear integraciones personalizadas y automatizar tareas repetitivas, ahorrando tiempo y aumentando la productividad.

En general, la API de Notion proporciona una herramienta potente para que los desarrolladores integren Notion en su flujo de trabajo y automatizar sus tareas. A medida que Notion continúa creciendo en popularidad, podemos esperar ver a más desarrolladores construyendo integraciones y automatizando tareas con la API de Notion.

En el futuro, planeamos expandir este proyecto agregando más funciones e integraciones con otras herramientas. También planeamos explorar otros casos de uso para la API de Notion y ver cómo se puede utilizar para automatizar otras tareas en nuestro flujo de trabajo.


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