Automatisation Airtable avec n8n : récupération de données sportives
Ce workflow n8n a pour objectif d'automatiser la récupération des données des événements sportifs à l'aide de TheOddsAPI et de les stocker dans Airtable. Idéal pour les entreprises qui suivent les résultats sportifs ou qui gèrent des paris, ce flux permet de récupérer les événements à venir chaque jour et de mettre à jour les résultats à la fin de la journée. Le workflow commence par un déclencheur programmé qui s'active à 7h00 pour récupérer les données des événements sportifs à venir. Ensuite, il utilise un nœud HTTP pour faire une requête à TheOddsAPI afin d'obtenir les informations nécessaires. Après cela, les données sont enregistrées dans Airtable grâce à un nœud dédié qui crée des enregistrements pour chaque événement. À 23h00, un autre déclencheur programmé active le processus de récupération des résultats des événements sportifs. Ces résultats sont ensuite combinés avec les enregistrements d'événements à l'aide d'un nœud de fusion, permettant ainsi d'associer les résultats avec les événements correspondants. Enfin, les enregistrements dans Airtable sont mis à jour avec les scores et résultats des événements. Ce système d'automatisation n8n permet de gagner du temps et d'améliorer l'efficacité en éliminant les tâches manuelles de suivi des données sportives.
Workflow n8n Airtable, TheOddsAPI, données sportives : vue d'ensemble
Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.
Workflow n8n Airtable, TheOddsAPI, données sportives : détail des nœuds
Inscris-toi pour voir l'intégralité du workflow
Inscription gratuite
S'inscrire gratuitementBesoin d'aide ?{
"id": "6sBxOuYYcJjIBmVJ",
"meta": {
"instanceId": "73d9d5380db181d01f4e26492c771d4cb5c4d6d109f18e2621cf49cac4c50763",
"templateCredsSetupCompleted": true
},
"name": "Automating Betting Data Retrieval with TheOddsAPI and Airtable",
"tags": [],
"nodes": [
{
"id": "3f7d9313-2a46-4869-a1f5-33976352961c",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-520,
-300
],
"parameters": {
"width": 300,
"height": 440,
"content": "The following triggers start the workflow at the Start of the day and the End of the day. Times can be adjusted to user's preference. "
},
"typeVersion": 1
},
{
"id": "a535c540-c186-466f-97e2-4d96d02c1f1d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-100,
-660
],
"parameters": {
"color": 4,
"width": 460,
"height": 660,
"content": "Once activated, HTTP Requests pulls the upcoming data for the sport of the user's choosing. The following is set for Ice Hockey. More documentation can be found within the link below: \n\nhttps://the-odds-api.com/liveapi/guides/v4/#get-events\n\nIf you would like to add more data such as the sport books or odds, you can find documentation within the documentation below: \n\nhttps://the-odds-api.com/liveapi/guides/v4/#get-odds\n\nOnce the data is pulled, the records are created within the Airtable.\n"
},
"typeVersion": 1
},
{
"id": "29335df8-6aab-475c-8d8b-38b27eb66bb9",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
440,
-280
],
"parameters": {
"color": 3,
"width": 800,
"height": 540,
"content": "At the end of the day, the Schedule Trigger will activate a HTTP request for the scores of the events. This is set for Ice Hockey but can be adjusted for the user's preference. \n\nAfter the data is pulled, it will merge the data with upcoming events to combine the results matching the id. \n\nThe Airtable is then updated with the result records. This can be adjusted to pull in sports odds or the different sports book data. "
},
"typeVersion": 1
},
{
"id": "01134aa4-cc3c-42ed-bc96-f737f1434ed6",
"name": "Morning Trigger To Pull Data At 7:00am",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-420,
-200
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"typeVersion": 1.2
},
{
"id": "c0b4c27f-bb17-4d85-a042-aa2db5060a6f",
"name": "Evening Trigger To Pull Data At 11:00pm",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-420,
-20
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 23
}
]
}
},
"typeVersion": 1.2
},
{
"id": "0a38de6c-4f2e-46ba-8c10-8f12b0a4abe2",
"name": "Retrieve Data Of Upcoming Sport Events For The Day",
"type": "n8n-nodes-base.httpRequest",
"position": [
20,
-200
],
"parameters": {
"url": "=https://api.the-odds-api.com/v4/sports/icehockey_nhl/events?apiKey=60019f5ac82b8d5d508b2dc8393384c1",
"options": {},
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "qbYtAoCFY2cLFvOU",
"name": "Header Auth account"
}
},
"typeVersion": 4.2
},
{
"id": "28393bd9-17ed-48b1-ba6f-f62b51ce137c",
"name": "Create Records Of Upcoming Events For The Day",
"type": "n8n-nodes-base.airtable",
"position": [
180,
-380
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appIXd8a8JeB9bPaL",
"cachedResultUrl": "https://airtable.com/appIXd8a8JeB9bPaL",
"cachedResultName": "Untitled Base"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tbldpnP52opBEtKEy",
"cachedResultUrl": "https://airtable.com/appIXd8a8JeB9bPaL/tbldpnP52opBEtKEy",
"cachedResultName": "Table 1"
},
"columns": {
"value": {
"id": "={{ $json.id }}",
"away_team": "={{ $json.away_team }}",
"home_team": "={{ $json.home_team }}",
"sports_key": "={{ $json.sport_key }}",
"sport_title": "={{ $json.sport_title }}",
"commence_time": "={{ $json.commence_time }}"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "sports_key",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "sports_key",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "sport_title",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "sport_title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "commence_time",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "commence_time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "home_team",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "home_team",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "away_team",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "away_team",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "completed",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "completed",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "scores",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "scores",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "last_update",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "last_update",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "0ApVmNsLu7aFzQD6",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2.1
},
{
"id": "086e599b-fc74-4ed5-a36f-fb80e385e625",
"name": "Retrieve Sport Results Data At The End Of The Day",
"type": "n8n-nodes-base.httpRequest",
"position": [
500,
20
],
"parameters": {
"url": "https://api.the-odds-api.com/v4/sports/icehockey_nhl/scores?daysFrom=1&apiKey=60019f5ac82b8d5d508b2dc8393384c1",
"options": {},
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "qbYtAoCFY2cLFvOU",
"name": "Header Auth account"
}
},
"typeVersion": 4.2
},
{
"id": "1b5ec6f2-d913-4005-89f0-d566e896c344",
"name": "Combine Sport Results With Upcoming Events Records By Matching ID",
"type": "n8n-nodes-base.merge",
"position": [
740,
-120
],
"parameters": {
"mode": "combine",
"options": {},
"fieldsToMatchString": "id"
},
"typeVersion": 3
},
{
"id": "f1765871-6f9e-416b-8ee8-696bc4dbf6bb",
"name": "Update Table Records With Scores And Results For Sport Events",
"type": "n8n-nodes-base.airtable",
"position": [
1020,
-60
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appIXd8a8JeB9bPaL",
"cachedResultUrl": "https://airtable.com/appIXd8a8JeB9bPaL",
"cachedResultName": "Untitled Base"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tbldpnP52opBEtKEy",
"cachedResultUrl": "https://airtable.com/appIXd8a8JeB9bPaL/tbldpnP52opBEtKEy",
"cachedResultName": "Table 1"
},
"columns": {
"value": {
"id": "={{ $json.id }}",
"scores": "={{ $json.scores }}",
"completed": "={{ $json.completed }}",
"last_update": "={{ $json.last_update }}"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "sports_key",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "sports_key",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "sport_title",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "sport_title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "commence_time",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "commence_time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "home_team",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "home_team",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "away_team",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "away_team",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "completed",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "completed",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "scores",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "scores",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "last_update",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "last_update",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update"
},
"credentials": {
"airtableTokenApi": {
"id": "0ApVmNsLu7aFzQD6",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2.1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "bf20603b-eb12-4156-94fe-fb18ecf6a454",
"connections": {
"Morning Trigger To Pull Data At 7:00am": {
"main": [
[
{
"node": "Retrieve Data Of Upcoming Sport Events For The Day",
"type": "main",
"index": 0
}
]
]
},
"Evening Trigger To Pull Data At 11:00pm": {
"main": [
[
{
"node": "Retrieve Sport Results Data At The End Of The Day",
"type": "main",
"index": 0
}
]
]
},
"Retrieve Sport Results Data At The End Of The Day": {
"main": [
[
{
"node": "Combine Sport Results With Upcoming Events Records By Matching ID",
"type": "main",
"index": 1
}
]
]
},
"Retrieve Data Of Upcoming Sport Events For The Day": {
"main": [
[
{
"node": "Combine Sport Results With Upcoming Events Records By Matching ID",
"type": "main",
"index": 0
},
{
"node": "Create Records Of Upcoming Events For The Day",
"type": "main",
"index": 0
}
]
]
},
"Combine Sport Results With Upcoming Events Records By Matching ID": {
"main": [
[
{
"node": "Update Table Records With Scores And Results For Sport Events",
"type": "main",
"index": 0
}
]
]
}
}
}Workflow n8n Airtable, TheOddsAPI, données sportives : pour qui est ce workflow ?
Ce workflow s'adresse aux entreprises et aux équipes qui gèrent des données sportives, notamment celles impliquées dans les paris ou le suivi des résultats sportifs. Un niveau technique intermédiaire est recommandé pour la mise en place et la personnalisation de ce flux.
Workflow n8n Airtable, TheOddsAPI, données sportives : problème résolu
Ce workflow résout le problème de la collecte manuelle des données sportives, qui peut être chronophage et sujette à des erreurs. En automatisant ce processus, les utilisateurs peuvent se concentrer sur l'analyse des données plutôt que sur leur collecte. Cela réduit également le risque d'erreurs humaines et garantit que les informations sont toujours à jour et précises.
Workflow n8n Airtable, TheOddsAPI, données sportives : étapes du workflow
Étape 1 : Le workflow est déclenché par un événement programmé à 7h00 pour récupérer les données des événements sportifs.
- Étape 1 : Une requête HTTP est envoyée à TheOddsAPI pour obtenir les informations sur les événements à venir.
- Étape 2 : Les données récupérées sont enregistrées dans Airtable pour une gestion facile.
- Étape 3 : À 23h00, un autre déclencheur programmé récupère les résultats des événements sportifs.
- Étape 4 : Les résultats sont fusionnés avec les enregistrements d'événements en utilisant un nœud de fusion.
- Étape 5 : Les enregistrements dans Airtable sont mis à jour avec les scores et résultats des événements.
Workflow n8n Airtable, TheOddsAPI, données sportives : guide de personnalisation
Pour personnaliser ce workflow, vous pouvez modifier les paramètres des nœuds HTTP pour adapter les requêtes à TheOddsAPI selon vos besoins spécifiques. Assurez-vous également de configurer correctement les identifiants de votre base Airtable, y compris le nom de la base et de la table. Il est possible d'ajouter d'autres nœuds pour intégrer des services supplémentaires ou d'ajuster les horaires des déclencheurs pour mieux correspondre à votre emploi du temps. Pensez à sécuriser vos clés API et à monitorer le flux pour garantir son bon fonctionnement.