Evènements de Pâques
Objectif de l’exercice
Section intitulée « Objectif de l’exercice »Découvrir la gestion avancée de flux d’éléments : tris, filtres, limites, découpages.
Le “workflow” doit afficher tout les évènements qui sont renseignés dans wikipédia et ayant lieu les jours de Pâques (sur ces dernières années).
Description du workflow
Section intitulée « Description du workflow »Le script récupère un fichier JSON depuis internet avec le protocole HTTPS. Celui-ci contient l’ensemble des derniers jours fériés. Les données sont ensuite reformatées puis seuls les 40 premières dates étant marquées comme étant le jour de Pâques sont conservées, et ce, en partant des plus anciennes dates. Pour chacun de ces dates (sans l’année), une requête est effectuée sur wikipedia. En passant par un composant de type code, un filtre conserve uniquement les descriptifs et titres dont l’année correspond bien aux dates sélectionnées.
Consignes de l’exercice
Section intitulée « Consignes de l’exercice »-
Le fichier de jours fériés se trouve à l’URL suivante : https://etalab.github.io/jours-feries-france-data/json/metropole.json.
-
Pour obtenir les informations en donnant pour paramètre un jour et un mois mais sans avoir la possibilité de spécifier l’année sur Wikipédia, utiliser le modèle
https://en.wikipedia.org/api/rest_v1/feed/onthisday/events/MOIS/JOUR. Exemple valide : 20 avril.
Correction de l’exercice
Section intitulée « Correction de l’exercice »{
"name": "My workflow",
"nodes": [
{
"parameters": {},
"id": "cca18e2f-0d8f-4a12-b7db-2a6bd5416550",
"name": "When clicking ‘Test workflow’",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-580,
80
],
"typeVersion": 1
},
{
"parameters": {
"url": "https://etalab.github.io/jours-feries-france-data/json/metropole.json",
"options": {}
},
"id": "1aa3f6fd-db5c-4c45-b692-4846ffad73b8",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-420,
80
]
},
{
"parameters": {
"jsCode": "const jsonData = items[0].json;\n\nconst result = [];\n\nfor (const [date, nom] of Object.entries(jsonData)) {\n result.push({\n date: date,\n nom: nom\n });\n}\n\nreturn result.map(item => ({ json: item }));"
},
"id": "04e3222c-67df-4fe8-9adf-30c621e8f937",
"name": "Code",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-260,
80
]
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict"
},
"conditions": [
{
"id": "f0736b26-aa0d-4a41-b878-a06e0239a16e",
"leftValue": "={{ $json.date }}",
"rightValue": "={{ $now }}",
"operator": {
"type": "dateTime",
"operation": "before"
}
},
{
"id": "7d2d1aa0-72e8-4d3d-841f-3ef4a9b175c3",
"leftValue": "={{ $json.nom }}",
"rightValue": "Lundi de Pâques",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"options": {}
},
"id": "ede82360-ed84-4ecf-8908-b33fabe6e336",
"name": "Filter",
"type": "n8n-nodes-base.filter",
"typeVersion": 2,
"position": [
-60,
80
]
},
{
"parameters": {
"fieldToSplitOut": "date",
"options": {}
},
"id": "c4a578f1-9e76-448a-9768-62a0de031dc0",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
460,
80
]
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const targetYear = $json.year_req;\nconst targetMonth = $json.month_req;\nconst targetDay = $json.day_req;\nconst events = $json.year.map((year,index) => ({\n year: year,\n title: $json.description[index],\n description: $json.extract_html[index]\n}));\n\n// Filtrer les événements par année\nconst filteredEvents = events.filter(event => parseInt(event.year) === parseInt(targetYear));\n\nreturn { json: { \n date: targetYear+\"-\"+targetMonth+\"-\"+targetDay,\n events: filteredEvents\n } };"
},
"id": "5dfa15b7-83ad-4474-b3e7-6fa31b6fbb67",
"name": "Code1",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1180,
320
]
},
{
"parameters": {
"url": "=https://en.wikipedia.org/api/rest_v1/feed/onthisday/events/{{ $json.month_req }}/{{ $json.day_req }}",
"options": {
"response": {
"response": {}
}
}
},
"id": "83ea53ec-eb98-441a-ae32-eebb66d1ffef",
"name": "Events",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
840,
80
],
"alwaysOutputData": true
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "17733484-ebfd-4f3b-b887-e755b3cccd2c",
"name": "day_req",
"value": "={{ $json.date.split('-')[2] }}",
"type": "string"
},
{
"id": "00013606-4b52-4a7e-ace6-10b2ea655c87",
"name": "month_req",
"value": "={{ $json.date.split('-')[1] }}",
"type": "string"
},
{
"id": "9c306822-ab42-48bf-94ed-80cd8265071c",
"name": "=year_req",
"value": "={{ $json.date.split('-')[0] }}",
"type": "string"
}
]
},
"options": {}
},
"id": "55e751e2-e767-4e00-815a-bea9b0dae93d",
"name": "Set Date Parameters",
"type": "n8n-nodes-base.set",
"typeVersion": 3.3,
"position": [
660,
80
]
},
{
"parameters": {
"maxItems": 40
},
"id": "2eef541d-fbd2-45b8-8c03-507e8667b508",
"name": "Limit",
"type": "n8n-nodes-base.limit",
"typeVersion": 1,
"position": [
300,
80
]
},
{
"parameters": {
"mode": "combine",
"combinationMode": "mergeByPosition",
"options": {}
},
"id": "3b37fdde-0c39-4e98-974e-203dacba7458",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"typeVersion": 2.1,
"position": [
1020,
320
]
},
{
"parameters": {
"sortFieldsUi": {
"sortField": [
{
"fieldName": "date"
}
]
},
"options": {}
},
"id": "bd4eea9a-313d-4f3d-a484-d947b1bcff27",
"name": "Sort",
"type": "n8n-nodes-base.sort",
"typeVersion": 1,
"position": [
120,
80
]
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const fieldsToKeep = $node[\"Set Fields to Keep\"].json[\"fields\"].split(',').map(field => field.trim());\nconst events = $json.events;\n\n// Fonction pour filtrer et garder uniquement les champs spécifiés\nconst filterFields = (obj, fields) => {\n return fields.reduce((acc, field) => {\n if (obj[field] !== undefined) {\n acc[field] = obj[field];\n }\n return acc;\n }, {});\n};\n\n// Initialiser un objet pour stocker les champs combinés\nlet combinedFields = {};\n\n// Filtrer les événements et combiner les champs spécifiés\nevents.forEach(event => {\n const page = event.pages[0] || {}; // Prendre la première page si elle existe\n const eventFields = filterFields(event, fieldsToKeep);\n const pageFields = filterFields(page, fieldsToKeep);\n\n // Ajouter ou combiner les champs filtrés dans l'objet combiné\n Object.keys(eventFields).forEach(key => {\n if (!combinedFields[key]) {\n combinedFields[key] = eventFields[key];\n } else if (Array.isArray(combinedFields[key])) {\n combinedFields[key].push(eventFields[key]);\n } else {\n combinedFields[key] = [combinedFields[key], eventFields[key]];\n }\n });\n\n Object.keys(pageFields).forEach(key => {\n if (!combinedFields[key]) {\n combinedFields[key] = pageFields[key];\n } else if (Array.isArray(combinedFields[key])) {\n combinedFields[key].push(pageFields[key]);\n } else {\n combinedFields[key] = [combinedFields[key], pageFields[key]];\n }\n });\n});\n\nreturn { json: combinedFields };"
},
"id": "f1dae467-3a1c-4c01-b59c-234d2be00fb9",
"name": "Code2",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1400,
-40
]
},
{
"parameters": {
"mode": "chooseBranch",
"output": "input2"
},
"id": "92533dd4-238d-4483-a4da-cf9fcef05e15",
"name": "Merge1",
"type": "n8n-nodes-base.merge",
"typeVersion": 2.1,
"position": [
1140,
-80
]
},
{
"parameters": {
"values": {
"string": [
{
"name": "fields",
"value": "year,description,extract_html"
}
]
},
"options": {}
},
"name": "Set Fields to Keep",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [
720,
-120
],
"id": "da9dccf7-4178-4ac8-b65d-f735a84d1112"
}
],
"pinData": {},
"connections": {
"When clicking ‘Test workflow’": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Code": {
"main": [
[
{
"node": "Filter",
"type": "main",
"index": 0
}
]
]
},
"Filter": {
"main": [
[
{
"node": "Sort",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Set Date Parameters",
"type": "main",
"index": 0
},
{
"node": "Set Fields to Keep",
"type": "main",
"index": 0
}
]
]
},
"Events": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
]
]
},
"Set Date Parameters": {
"main": [
[
{
"node": "Events",
"type": "main",
"index": 0
},
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Limit": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Code1",
"type": "main",
"index": 0
}
]
]
},
"Sort": {
"main": [
[
{
"node": "Limit",
"type": "main",
"index": 0
}
]
]
},
"Code2": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "Code2",
"type": "main",
"index": 0
}
]
]
},
"Set Fields to Keep": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "e8655611-30ed-4986-9452-faea30e1b59b",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "09cd35d1aba7444d7fe329ac311b153e435db7ca8bc4395ee2bc3a4fef5e2050"
},
"id": "LzUBin8kNsI7Y2QA",
"tags": []
}