I. Introduction

Ce rapport de développement vise à démontrer comment utiliser l’API Notion pour automatiser la planification d’entraînement. Notion est un outil de productivité tout-en-un qui permet aux utilisateurs de créer et d’organiser des bases de données, des notes, des tâches, et bien plus encore. L’API Notion fournit aux développeurs un accès programmatique aux fonctionnalités de Notion, permettant l’automatisation de diverses tâches.

Le code fourni illustre comment utiliser l’API Notion pour créer des événements d’entraînement dans une base de données en fonction d’un calendrier prédéfini. Le script récupère les événements existants dans une plage de dates spécifique et crée de nouveaux événements pour les jours qui n’ont pas d’événements planifiés. Le calendrier d’entraînement est défini dans le dictionnaire days_of_week, qui fait correspondre chaque jour de la semaine à un nom d’entraînement et une liste de balises.

En automatisant le processus de planification d’entraînement avec l’API Notion, les développeurs peuvent gagner du temps et réduire les erreurs manuelles. Ce rapport fournira un guide étape par étape pour vous aider à configurer l’API Notion et comprendre les différents composants du code.

II. Configuration de l’API Notion

Pour utiliser l’API Notion, vous devez avoir un compte Notion et une intégration configurée. Voici un guide étape par étape pour vous authentifier à l’API Notion:

  1. Créez une intégration dans Notion

    • Connectez-vous à Notion et accédez à la page Intégrations en cliquant sur votre icône de profil en bas à gauche de l’écran, puis en cliquant sur “Intégrations”.
    • Cliquez sur le bouton “Créer une nouvelle intégration”.
    • Donnez un nom à votre intégration et sélectionnez l’espace de travail dans lequel vous voulez l’utiliser.
    • Cliquez sur le bouton “Soumettre” pour créer l’intégration.
  2. Obtenez votre jeton d’intégration

    • Une fois votre intégration créée, vous pouvez obtenir votre jeton d’intégration en cliquant sur le nom de l’intégration.
    • Copiez le jeton d’intégration pour l’utiliser dans votre code.
  3. Installez le package Notion API

    • Ouvrez votre terminal ou votre invite de commande.

    • Exécutez la commande suivante pour installer le package Notion API:

      pip install notion-client
      
  4. Configurez le client de l’API Notion

    • Importez le client de l’API Notion dans votre code en ajoutant la ligne suivante en haut :

      from notion_client import Client
      
    • Authentifiez le client en ajoutant la ligne suivante et en remplaçant <API Key> par votre jeton d’intégration :

      notion = Client(auth="<API Key>")
      
  5. Configurez les détails de la base de données

    • Obtenez l’ID de la base de données dans laquelle vous souhaitez ajouter des événements.
    • Remplacez la variable database_id dans le code par votre ID de base de données.

Le code fourni utilise l’objet notion_client.Client pour interagir avec l’API Notion. L’objet Client est utilisé pour authentifier le client API et donne accès à diverses ressources de Notion, telles que les bases de données et les pages.

La variable database_id est définie sur l’ID de la base de données Notion dans laquelle les événements d’entraînement seront ajoutés. L’ID peut être trouvé dans l’URL de la base de données.

III. Définition du calendrier d’entraînement

Le calendrier d’entraînement est défini dans le code en utilisant les variables suivantes:

  • start_days_ago: le nombre de jours avant la date d’aujourd’hui pour commencer le calendrier
  • end_days_after: le nombre de jours après la date d’aujourd’hui pour terminer le calendrier
  • days_of_week: un dictionnaire qui fait correspondre chaque jour de la semaine à un nom d’entraînement et une liste de balises.

Le dictionnaire days_of_week est utilisé pour définir le plan d’entraînement pour chaque jour de la semaine. Chaque jour de la semaine est une clé dans le dictionnaire, et la valeur correspondante est un autre dictionnaire qui contient le nom d’entraînement et une liste de balises associées à l’entraînement. Par exemple:

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

Dans cet exemple, le plan est divisé en trois jours, et chaque jour a un entraînement spécifique et des balises associées.

Les variables start_days_ago et end_days_after sont utilisées pour définir la plage de dates pour le calendrier d’entraînement. start_days_ago spécifie le nombre de jours avant la date d’aujourd’hui pour commencer le calendrier, et end_days_after spécifie le nombre de jours après la date d’aujourd’hui pour terminer le calendrier.

Le code utilise le module datetime pour obtenir la date d’aujourd’hui et calculer les dates de début et de fin pour le programme d’entraînement. La date de début est obtenue en soustrayant start_days_ago de la date d’aujourd’hui, et la date de fin est obtenue en ajoutant end_days_after à la date d’aujourd’hui. Les dates sont formatées en chaînes de caractères au format %Y-%m-%d.

IV. Interrogation des événements existants

Avant de créer de nouveaux événements d’entraînement, le code interroge les événements existants dans la plage de dates définie. Cela est fait pour éviter de créer des événements en double à la même date.

La méthode notion.databases.query() est utilisée pour interroger la base de données Notion et récupérer les événements existants. Le paramètre filter est utilisé pour spécifier les conditions de filtre pour la requête. Dans ce cas, le filtre est défini pour récupérer les événements qui tombent dans la plage de dates de début et de fin définie dans le code. Voici un exemple de filtre utilisé dans la requête:

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

Ce filtre renvoie des événements qui ont une propriété Date qui tombe entre start_date et end_date.

L’attribut results de la réponse de la requête est utilisé pour obtenir les événements existants dans la plage de dates. Les résultats sont stockés dans la variable existing_events pour une utilisation ultérieure dans le code.

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. Création de nouveaux événements

Une fois que les événements existants dans la plage de dates sont obtenus, le code procède à la création de nouveaux événements d’entraînement pour chaque jour dans la plage de dates du calendrier.

Le code utilise une boucle for pour itérer à travers chaque date dans la plage de dates. Un nouvel événement est créé pour chaque jour qui n’est pas un dimanche:

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

La méthode strftime() est utilisée pour obtenir le nom du jour de la semaine à partir de la date, et si le nom du jour de la semaine est “Dimanche”, la boucle saute ce jour et passe au jour suivant.

Le code vérifie ensuite si un événement existe déjà à la date actuelle:

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 un événement existe déjà à la date actuelle, la boucle saute ce jour et passe au jour suivant.

Si aucun événement n’existe à la date actuelle, un nouvel événement est créé avec le nom de l’entraînement et les tags associés à ce jour de la semaine :

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)

Le nom de l’entraînement et les balises associées à ce jour de la semaine sont obtenus à partir du dictionnaire days_of_week. Le dictionnaire new_event est utilisé pour définir les propriétés du nouvel événement, qui incluent le nom de l’événement, la date et les balises. La méthode notion.pages.create() est utilisée pour créer le nouvel événement dans la base de données Notion.

En créant de nouveaux événements pour chaque jour de la semaine dans la plage de dates du calendrier, les développeurs peuvent automatiser le processus de planification d’entraînement et garantir que le plan d’entraînement est à jour et précis.

VI. Conclusion

Dans ce projet, nous avons démontré comment utiliser l’API Notion pour automatiser le processus de création d’un programme d’entraînement dans une base de données Notion. Le code que nous avons fourni peut être utilisé pour créer un programme d’entraînement pour une plage de dates spécifique et ajouter automatiquement de nouveaux événements à la base de données en fonction du plan d’entraînement défini.

L’API Notion peut être utilisée pour automatiser un large éventail de tâches, telles que la gestion d’une liste de tâches, le suivi des dépenses ou l’organisation des tâches de projet. Avec l’API Notion, les développeurs peuvent créer des intégrations personnalisées et automatiser les tâches répétitives, ce qui permet de gagner du temps et d’augmenter la productivité.

Dans l’ensemble, l’API Notion fournit un outil puissant pour les développeurs afin d’intégrer Notion dans leur flux de travail et d’automatiser leurs tâches. À mesure que Notion continue de gagner en popularité, nous pouvons nous attendre à voir de plus en plus de développeurs créer des intégrations et automatiser des tâches avec l’API Notion.

À l’avenir, nous prévoyons d’étendre ce projet en ajoutant plus de fonctionnalités et d’intégrations avec d’autres outils. Nous prévoyons également d’explorer d’autres cas d’utilisation pour l’API Notion et de voir comment elle peut être utilisée pour automatiser d’autres tâches dans notre flux de travail.


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