Workflow n8n

Automatisation Google Sheets avec n8n : synchronisation Strava

Ce workflow n8n a pour objectif de synchroniser les données d'activités de Strava avec Google Sheets, permettant ainsi une gestion efficace des performances sportives. Idéal pour les entraîneurs, les équipes sportives ou toute personne souhaitant suivre ses progrès, ce processus d'automatisation n8n facilite la collecte et l'organisation des données sans intervention manuelle. Le workflow commence par un déclencheur de type 'Schedule Trigger' qui active le flux à intervalles réguliers. Ensuite, il interroge l'API de Strava pour récupérer les dernières activités, en utilisant le nœud Strava. Les données sont ensuite traitées par un nœud de code pour effectuer des opérations personnalisées si nécessaire. Les résultats sont ensuite envoyés vers Google Sheets, où les informations sont organisées dans un tableau. Pour éviter les doublons, un nœud 'Remove Duplicates' est utilisé, garantissant que seules les données uniques sont conservées. Enfin, les résultats sont triés et formatés avant d'être enregistrés dans la feuille de calcul. Grâce à cette automatisation, les utilisateurs peuvent gagner un temps précieux et réduire les erreurs liées à la saisie manuelle des données, tout en ayant accès à des informations à jour sur leurs performances.

Tags clés :automatisationGoogle SheetsStravasynchronisationworkflow
Catégorie: Scheduled · Tags: automatisation, Google Sheets, Strava, synchronisation, workflow0

Workflow n8n Google Sheets, Strava, synchronisation : vue d'ensemble

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Workflow n8n Google Sheets, Strava, synchronisation : détail des nœuds

  • Schedule Trigger

    Ce noeud déclenche le workflow selon un calendrier défini.

  • Strava

    Ce noeud interagit avec l'API Strava pour récupérer des données selon l'opération spécifiée.

  • Code

    Ce noeud exécute un code JavaScript personnalisé pour traiter des données.

  • Google Sheets

    Ce noeud permet d'interagir avec Google Sheets pour lire ou écrire des données dans un document spécifique.

  • strava_last

    Ce noeud configure des variables à partir des données d'entrée pour les utiliser dans le workflow.

  • Remove Duplicates

    Ce noeud supprime les doublons d'une liste en fonction des critères spécifiés.

  • activities

    Ce noeud interagit avec Google Sheets pour récupérer des activités à partir d'un document spécifique.

  • sort_saved

    Ce noeud trie les données en fonction des critères de tri définis.

  • last_saved

    Ce noeud limite le nombre d'éléments à conserver dans les résultats selon les paramètres spécifiés.

  • saved_last

    Ce noeud configure des variables supplémentaires à partir des données d'entrée pour les utiliser dans le workflow.

  • sort_strava

    Ce noeud trie les données provenant de Strava selon les critères de tri définis.

  • last_strava

    Ce noeud limite le nombre d'éléments de Strava à conserver dans les résultats selon les paramètres spécifiés.

  • sort_results

    Ce noeud trie les résultats finaux en fonction des critères de tri définis.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "nodes": [
    {
      "id": "fc128eed-1666-46b8-8feb-e6ddf05e85d1",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        380,
        240
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 2
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "830708eb-197b-4bf7-95da-893d78329ab2",
      "name": "Strava",
      "type": "n8n-nodes-base.strava",
      "position": [
        380,
        480
      ],
      "parameters": {
        "limit": 10,
        "operation": "getAll"
      },
      "typeVersion": 1.1
    },
    {
      "id": "de776ebf-3ad5-4c4c-b0c8-7bc74cba5446",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        380,
        740
      ],
      "parameters": {
        "jsCode": "// Obtén los items del nodo \"Strava\"\nconst stravaItems = $('strava_last').all();\n\n// Obtén los items del nodo \"ultimas_id\"\nconst ultimasGuardadasItems = $('saved_last').all();\n\n// Extrae las referencias guardadas en un Set, asegurando el formato como cadena\nconst referenciasGuardadas = new Set(\n    ultimasGuardadasItems.map(item => String(item.json.id))\n);\n\n// Filtra los items de \"Strava\" cuyos IDs no estén en las referencias guardadas\nconst filteredItems = stravaItems.filter(item => {\n    // Convertir el ID actual de Strava a cadena para comparar correctamente\n    return !referenciasGuardadas.has(String(item.json.id));\n});\n\n// Depuración: imprime las referencias y los resultados\nconsole.log('Referencias guardadas:', [...referenciasGuardadas]);\nconsole.log('Items filtrados:', filteredItems);\n\n// Devuelve los items filtrados\nreturn filteredItems;\n\n\n"
      },
      "typeVersion": 2
    },
    {
      "id": "c8a93e6e-67fc-4f6d-bcde-83d3a885c622",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        900,
        740
      ],
      "parameters": {
        "columns": {
          "value": {
            "Kms": "={{ $json.distancia }}",
            "Ref": "={{ $json.id }}",
            "Fecha": "={{ $json.fecha }}",
            "Track": "=http://www.strava.com/activities/{{ $json.id }}",
            "Tiempo": "={{ $json.tiempo }}",
            "Desnivel": "={{ $json.elevacion }}"
          },
          "schema": [
            {
              "id": "Fecha",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Fecha",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Kms",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Kms",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tiempo",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Tiempo",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ref",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Ref",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Track",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Track",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Bicicleta",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Bicicleta",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Terreno",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Terreno",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Desnivel",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Desnivel",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": []
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 419561402,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs/edit#gid=419561402",
          "cachedResultName": "n8n"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs/edit?usp=drivesdk",
          "cachedResultName": "Sherlo_Bike"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "tyg7FJlIITkSazyi",
          "name": "Nik's Google"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "0ce07d54-97af-4e88-9d27-452191a0b3ba",
      "name": "strava_last",
      "type": "n8n-nodes-base.set",
      "position": [
        1420,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "423ae4b8-287c-4dc1-b32b-d1b6f1f45efa",
              "name": "id",
              "type": "number",
              "value": "={{ $json.id }}"
            },
            {
              "id": "595802d2-17d0-40be-9e43-d655ffbf4ce0",
              "name": "fecha",
              "type": "string",
              "value": "={{ DateTime.fromISO($json.start_date_local).toFormat('d/M/yyyy') }}"
            },
            {
              "id": "4b39d783-19f2-4a7e-b0e6-dbe2b98f1ae0",
              "name": "distancia",
              "type": "number",
              "value": "={{ Math.round($json.distance / 100) / 10 }}"
            },
            {
              "id": "2f321dc0-435f-4b4d-866c-091ff9eaf9df",
              "name": "elevacion",
              "type": "number",
              "value": "={{ Math.round($json.total_elevation_gain) }}"
            },
            {
              "id": "ba1bb089-5ae7-4e42-ac65-07323c4e1842",
              "name": "tiempo",
              "type": "string",
              "value": "={{ `${Math.floor($json.moving_time / 3600)}:${Math.floor(($json.moving_time % 3600) / 60).toString().padStart(2, '0')}:${($json.moving_time % 60).toString().padStart(2, '0')}` }}\n"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "490f7be9-73c9-4431-8b83-fcdbbcc283eb",
      "name": "Remove Duplicates",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        900,
        480
      ],
      "parameters": {
        "compare": "selectedFields",
        "options": {},
        "fieldsToCompare": "id"
      },
      "typeVersion": 2
    },
    {
      "id": "2d1c4dc5-2baa-4c89-a312-4b40381d4e5d",
      "name": "activities",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        660,
        240
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 419561402,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs/edit#gid=419561402",
          "cachedResultName": "n8n"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs/edit?usp=drivesdk",
          "cachedResultName": "Sherlo_Bike"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "tyg7FJlIITkSazyi",
          "name": "Nik's Google"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "2c7b7939-4ca1-4868-92bf-5fd7384a1103",
      "name": "sort_saved",
      "type": "n8n-nodes-base.sort",
      "position": [
        900,
        240
      ],
      "parameters": {
        "options": {},
        "sortFieldsUi": {
          "sortField": [
            {
              "fieldName": "Ref"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4e1d9064-6dda-4a01-af48-f278792f8b6b",
      "name": "last_saved",
      "type": "n8n-nodes-base.limit",
      "position": [
        1160,
        240
      ],
      "parameters": {
        "keep": "lastItems",
        "maxItems": 10
      },
      "typeVersion": 1
    },
    {
      "id": "6eb2053a-1101-477b-86e9-113813be2d92",
      "name": "saved_last",
      "type": "n8n-nodes-base.set",
      "position": [
        1420,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "50097932-ab91-4af7-9412-925fab1982f0",
              "name": "id",
              "type": "string",
              "value": "={{ $json.Ref }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "afd986f1-0c49-4a69-b948-aefcbff1010f",
      "name": "sort_strava",
      "type": "n8n-nodes-base.sort",
      "position": [
        660,
        480
      ],
      "parameters": {
        "options": {},
        "sortFieldsUi": {
          "sortField": [
            {
              "fieldName": "id"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "16094d29-f35b-492c-9d93-3145dab30cd3",
      "name": "last_strava",
      "type": "n8n-nodes-base.limit",
      "position": [
        1160,
        480
      ],
      "parameters": {
        "keep": "lastItems",
        "maxItems": 10
      },
      "typeVersion": 1
    },
    {
      "id": "9986360b-fcd3-42f4-ad13-aea69f6d1a80",
      "name": "sort_results",
      "type": "n8n-nodes-base.sort",
      "position": [
        660,
        740
      ],
      "parameters": {
        "options": {},
        "sortFieldsUi": {
          "sortField": [
            {
              "fieldName": "id"
            }
          ]
        }
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Code": {
      "main": [
        [
          {
            "node": "sort_results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Strava": {
      "main": [
        [
          {
            "node": "sort_strava",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "activities": {
      "main": [
        [
          {
            "node": "sort_saved",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "last_saved": {
      "main": [
        [
          {
            "node": "saved_last",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "saved_last": {
      "main": [
        [
          {
            "node": "Strava",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "sort_saved": {
      "main": [
        [
          {
            "node": "last_saved",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "last_strava": {
      "main": [
        [
          {
            "node": "strava_last",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "sort_strava": {
      "main": [
        [
          {
            "node": "Remove Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "strava_last": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "sort_results": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "activities",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicates": {
      "main": [
        [
          {
            "node": "last_strava",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n Google Sheets, Strava, synchronisation : pour qui est ce workflow ?

Ce workflow s'adresse aux entraîneurs, aux équipes sportives et aux passionnés de fitness qui utilisent Strava pour suivre leurs performances. Il est conçu pour des utilisateurs ayant un niveau technique intermédiaire et souhaitant automatiser la gestion de leurs données sportives.

Workflow n8n Google Sheets, Strava, synchronisation : problème résolu

Ce workflow résout le problème de la collecte manuelle des données d'activités sportives, qui peut être chronophage et sujet à des erreurs. En automatisant ce processus, les utilisateurs peuvent se concentrer sur l'analyse de leurs performances plutôt que sur la saisie de données. Cela réduit également le risque de doublons dans les enregistrements, garantissant ainsi une base de données propre et fiable.

Workflow n8n Google Sheets, Strava, synchronisation : étapes du workflow

Étape 1 : Le workflow est déclenché par un 'Schedule Trigger' qui active le flux à intervalles réguliers.

  • Étape 1 : Les données des activités sont récupérées via le nœud Strava, qui interroge l'API pour obtenir les dernières informations.
  • Étape 2 : Un nœud de code permet de traiter les données si des opérations spécifiques sont nécessaires.
  • Étape 3 : Les résultats sont envoyés vers Google Sheets pour être organisés.
  • Étape 4 : Un nœud 'Remove Duplicates' s'assure que seules les données uniques sont conservées.
  • Étape 5 : Les résultats sont triés et formatés avant d'être enregistrés dans la feuille de calcul.

Workflow n8n Google Sheets, Strava, synchronisation : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier le nœud 'Schedule Trigger' afin de définir la fréquence d'exécution selon vos besoins. Dans le nœud Strava, ajustez les paramètres pour récupérer des types spécifiques d'activités ou limiter le nombre de résultats. Le nœud de code peut être adapté pour inclure des calculs ou des transformations supplémentaires sur les données. Enfin, assurez-vous que les paramètres du nœud Google Sheets correspondent à la structure de votre feuille de calcul, notamment le nom de la feuille et les colonnes à remplir.