{ "meta": { "instanceId": "0c99324b4b0921a9febd4737c606882881f3ca11d9b1d7e22b0dad4784eb24c7" }, "nodes": [ { "id": "f418ae01-01ea-4794-8903-d5709a29c735", "name": "Get current date", "type": "n8n-nodes-base.code", "position": [ 240, 2460 ], "parameters": { "jsCode": "const monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n]\n\nconst date = new Date()\nconst year = date.getFullYear()\nconst month = date.getMonth()\n\nlet currentDate = {\n month: month,\n year: year,\n text: `${monthNames[month]} '${year.toString().slice(-2)}`\n}\n\nitems[0].json.currentDate = currentDate\n\nreturn items\n\n// Month > Number e.g. July = 6, December = 11\n// Year > Text\n// Text > Playlist name\n\n// let currentDate = {\n// month: 8, \n// year: '2024',\n// text: `September '23`\n// }\n\n// items[0].json.currentDate = currentDate\n\n// return items\n\n" }, "typeVersion": 1 }, { "id": "855e493a-a232-45ef-8fdd-4a8225065c95", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [ 460, 2580 ], "parameters": { "width": 1290.936043660723, "height": 407.6508589002549, "content": "## Check if the song is present in the database" }, "typeVersion": 1 }, { "id": "672ef06c-b812-41c8-8501-cde8b61a4aef", "name": "Get last 10 liked tracks", "type": "n8n-nodes-base.spotify", "position": [ 500, 2680 ], "parameters": { "limit": 10, "resource": "library" }, "credentials": { "spotifyOAuth2Api": { "id": "zQrMRwwU6DLh4W77", "name": "Spotify account" } }, "typeVersion": 1 }, { "id": "da13c571-6af4-49bf-b8ff-2d54245f6d3e", "name": "Check if track is saved", "type": "n8n-nodes-base.nocoDb", "position": [ 940, 2780 ], "parameters": { "table": "m0dm2y304t7vmuk", "options": { "where": "=(uri,eq,{{ $json.track.uri }})", "fields": [ "uri" ] }, "operation": "getAll", "projectId": "pepq760y5lwt5tm", "returnAll": true, "authentication": "nocoDbApiToken" }, "credentials": { "nocoDbApiToken": { "id": "9uSbSrDz8EL2OIL7", "name": "NocoDB Token account" } }, "typeVersion": 3, "alwaysOutputData": true }, { "id": "9144cda9-f18f-46d9-be2d-9fca4b192dbb", "name": "Is not saved", "type": "n8n-nodes-base.if", "position": [ 1160, 2780 ], "parameters": { "options": {}, "conditions": { "options": { "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "dbb259d9-e2ec-4a7b-b375-601346dc2571", "operator": { "type": "object", "operation": "empty", "singleValue": true }, "leftValue": "={{ $json }}", "rightValue": "" } ] } }, "typeVersion": 2 }, { "id": "66b430e2-f46c-43b2-84e7-35c85d2b4403", "name": "Create song entry", "type": "n8n-nodes-base.nocoDb", "position": [ 1380, 2700 ], "parameters": { "table": "m0dm2y304t7vmuk", "fieldsUi": { "fieldValues": [ { "fieldName": "uri", "fieldValue": "={{ $('For each tracks in liked song').item.json.track.uri }}" }, { "fieldName": "added_at", "fieldValue": "={{ $('For each tracks in liked song').item.json.added_at }}" }, { "fieldName": "playlistName", "fieldValue": "={{ $('Get current date').item.json.currentDate.text }}" } ] }, "operation": "create", "projectId": "pepq760y5lwt5tm", "authentication": "nocoDbApiToken" }, "credentials": { "nocoDbApiToken": { "id": "9uSbSrDz8EL2OIL7", "name": "NocoDB Token account" } }, "typeVersion": 3 }, { "id": "9bd883ea-2e87-45aa-b8a0-b361ba7c5d9f", "name": "Get all user playlist", "type": "n8n-nodes-base.spotify", "position": [ 500, 2220 ], "parameters": { "resource": "playlist", "operation": "getUserPlaylists", "returnAll": true }, "credentials": { "spotifyOAuth2Api": { "id": "zQrMRwwU6DLh4W77", "name": "Spotify account" } }, "typeVersion": 1 }, { "id": "3a0dad98-4571-4fb7-b366-0060d35b65fe", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [ 460, 2080 ], "parameters": { "width": 1481.5336029736159, "height": 416.7665808180022, "content": "## Check if the playlist present in the database" }, "typeVersion": 1 }, { "id": "e793b97c-cc29-47b0-8aa7-015fa631bc37", "name": "Get monthly playlist", "type": "n8n-nodes-base.filter", "position": [ 720, 2220 ], "parameters": { "options": {}, "conditions": { "options": { "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "56173299-d774-4cb4-b26f-4dca294dda1d", "operator": { "name": "filter.operator.equals", "type": "string", "operation": "equals" }, "leftValue": "={{ $json.name }}", "rightValue": "={{ $('Get current date').item.json.currentDate.text }}" } ] } }, "typeVersion": 2, "alwaysOutputData": true }, { "id": "502ea9e2-7f03-4a8a-860e-90d63e42ee33", "name": "Get playlist in DB", "type": "n8n-nodes-base.nocoDb", "position": [ 1160, 2120 ], "parameters": { "table": "mchan0xys9h7h7e", "options": { "where": "=(name,eq,{{ $('Get current date').item.json.currentDate.text }})" }, "operation": "getAll", "projectId": "pepq760y5lwt5tm", "returnAll": true, "authentication": "nocoDbApiToken" }, "credentials": { "nocoDbApiToken": { "id": "9uSbSrDz8EL2OIL7", "name": "NocoDB Token account" } }, "typeVersion": 3, "alwaysOutputData": true }, { "id": "3d2bece0-8096-4ee1-a3b9-ae91b83f0957", "name": "Monthly playlist exist in Spotify ?", "type": "n8n-nodes-base.if", "position": [ 940, 2220 ], "parameters": { "options": {}, "conditions": { "options": { "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "a2d9e3e0-a906-4ed9-9e23-166f781c86b1", "operator": { "type": "object", "operation": "notEmpty", "singleValue": true }, "leftValue": "={{ $json }}", "rightValue": "" } ] } }, "typeVersion": 2 }, { "id": "d983b940-2f8d-4823-aaaf-d1bfa4428b41", "name": "Playlist exist in DB ?", "type": "n8n-nodes-base.if", "position": [ 1380, 2120 ], "parameters": { "options": {}, "conditions": { "options": { "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "9485c9d4-ecdc-4d0e-a576-c7db5787c069", "operator": { "type": "object", "operation": "notEmpty", "singleValue": true }, "leftValue": "={{ $json }}", "rightValue": "" } ] } }, "typeVersion": 2 }, { "id": "c694ab19-bca7-4dd4-8d10-cf8a1adab341", "name": "Create playlist in Spotify", "type": "n8n-nodes-base.spotify", "position": [ 1160, 2320 ], "parameters": { "name": "={{ $('Get current date').item.json.currentDate.text }}", "resource": "playlist", "operation": "create", "additionalFields": { "description": "Monthly playlist" } }, "credentials": { "spotifyOAuth2Api": { "id": "zQrMRwwU6DLh4W77", "name": "Spotify account" } }, "typeVersion": 1 }, { "id": "dc9dc3b5-cef7-412b-b3f8-5ec011c2746d", "name": "Create playlist in DB1", "type": "n8n-nodes-base.nocoDb", "position": [ 1380, 2320 ], "parameters": { "table": "mchan0xys9h7h7e", "fieldsUi": { "fieldValues": [ { "fieldName": "uri", "fieldValue": "={{ $json.uri }}" }, { "fieldName": "name", "fieldValue": "={{ $json.name }}" }, { "fieldName": "description", "fieldValue": "={{ $json.description}}" } ] }, "operation": "create", "projectId": "pepq760y5lwt5tm", "authentication": "nocoDbApiToken" }, "credentials": { "nocoDbApiToken": { "id": "9uSbSrDz8EL2OIL7", "name": "NocoDB Token account" } }, "typeVersion": 3 }, { "id": "0356c3a4-dc20-42b0-b069-045048768939", "name": "Create playlist in DB", "type": "n8n-nodes-base.nocoDb", "position": [ 1600, 2200 ], "parameters": { "table": "mchan0xys9h7h7e", "fieldsUi": { "fieldValues": [ { "fieldName": "uri", "fieldValue": "={{ $('Get monthly playlist').item.json.uri }}" }, { "fieldName": "name", "fieldValue": "={{ $('Get monthly playlist').item.json.name }}" }, { "fieldName": "description", "fieldValue": "={{ $('Get monthly playlist').item.json.description }}" } ] }, "operation": "create", "projectId": "pepq760y5lwt5tm", "authentication": "nocoDbApiToken" }, "credentials": { "nocoDbApiToken": { "id": "9uSbSrDz8EL2OIL7", "name": "NocoDB Token account" } }, "typeVersion": 3 }, { "id": "e2c86f04-725c-4af7-b3c2-9c22e2dc64bf", "name": "Merge", "type": "n8n-nodes-base.merge", "position": [ 2040, 2460 ], "parameters": { "mode": "chooseBranch", "output": "empty" }, "typeVersion": 2.1 }, { "id": "036e0d74-3383-44e9-991d-7e062b982b51", "name": "Clean op", "type": "n8n-nodes-base.noOp", "position": [ 1820, 2200 ], "parameters": {}, "typeVersion": 1 }, { "id": "323c9746-f713-4a3d-9af5-9579ec767fca", "name": "Clean op2", "type": "n8n-nodes-base.noOp", "position": [ 1600, 2800 ], "parameters": {}, "typeVersion": 1 }, { "id": "3b0be7ca-c47b-4524-b72a-c37f25c5e4d0", "name": "Get this month playlist in DB", "type": "n8n-nodes-base.nocoDb", "position": [ 2260, 2460 ], "parameters": { "table": "mchan0xys9h7h7e", "options": { "where": "=(name,eq,{{ $('Get current date').item.json.currentDate.text }})" }, "operation": "getAll", "projectId": "pepq760y5lwt5tm", "returnAll": true, "authentication": "nocoDbApiToken" }, "credentials": { "nocoDbApiToken": { "id": "9uSbSrDz8EL2OIL7", "name": "NocoDB Token account" } }, "typeVersion": 3 }, { "id": "733077e4-c474-4c95-ba05-d0b2375475ad", "name": "Get this month tracks in DB", "type": "n8n-nodes-base.nocoDb", "position": [ 2480, 2460 ], "parameters": { "table": "m0dm2y304t7vmuk", "options": { "where": "=(playlistName,eq,{{ $('Get current date').item.json.currentDate.text }})" }, "operation": "getAll", "projectId": "pepq760y5lwt5tm", "returnAll": true, "authentication": "nocoDbApiToken" }, "credentials": { "nocoDbApiToken": { "id": "9uSbSrDz8EL2OIL7", "name": "NocoDB Token account" } }, "typeVersion": 3 }, { "id": "6c8ef70f-542d-4454-9ae6-8f4e9778beb0", "name": "Add song to the playlist", "type": "n8n-nodes-base.spotify", "position": [ 3580, 2460 ], "parameters": { "id": "={{ $('Get this month playlist in DB').item.json.uri }}", "trackID": "={{ $('For each monthly tracks in DB').item.json.uri }}", "resource": "playlist", "additionalFields": {} }, "credentials": { "spotifyOAuth2Api": { "id": "zQrMRwwU6DLh4W77", "name": "Spotify account" } }, "typeVersion": 1 }, { "id": "034cd38d-4800-4f9c-9b67-453fdb2afa3c", "name": "For each tracks in liked song", "type": "n8n-nodes-base.splitInBatches", "position": [ 720, 2680 ], "parameters": { "options": { "reset": false } }, "typeVersion": 3 }, { "id": "90ff5c0b-e842-437f-be85-a5938288c513", "name": "For each monthly tracks in DB", "type": "n8n-nodes-base.splitInBatches", "position": [ 2700, 2460 ], "parameters": { "options": {} }, "typeVersion": 3 }, { "id": "decf36a4-fb8c-41eb-ae15-7ba36d621ad7", "name": "Get this month tracks in Spotify", "type": "n8n-nodes-base.spotify", "position": [ 2920, 2560 ], "parameters": { "id": "={{ $('Get this month playlist in DB').item.json.uri }}", "resource": "playlist", "operation": "getTracks", "returnAll": true }, "credentials": { "spotifyOAuth2Api": { "id": "zQrMRwwU6DLh4W77", "name": "Spotify account" } }, "typeVersion": 1, "alwaysOutputData": true }, { "id": "d322a655-e80b-4277-87d9-93e927b2f372", "name": "Filter1", "type": "n8n-nodes-base.filter", "position": [ 3140, 2560 ], "parameters": { "options": {}, "conditions": { "options": { "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "a11640e1-f22a-4ce9-abff-976efc57e1d3", "operator": { "name": "filter.operator.equals", "type": "string", "operation": "equals" }, "leftValue": "={{ $('For each monthly tracks in DB').item.json.uri }}", "rightValue": "={{ $json.track.uri }}" } ] } }, "executeOnce": false, "typeVersion": 2, "alwaysOutputData": true }, { "id": "5027f98d-b973-405f-81cf-534df794325f", "name": "Song is not present in the playlist ?", "type": "n8n-nodes-base.if", "position": [ 3360, 2560 ], "parameters": { "options": {}, "conditions": { "options": { "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "1beb843e-53da-48ce-9717-d7797232e4ae", "operator": { "type": "object", "operation": "empty", "singleValue": true }, "leftValue": "={{ $json }}", "rightValue": "" } ] } }, "typeVersion": 2 }, { "id": "cd2e3a28-24c1-47d7-ad30-c836e08ad40f", "name": "Clean op1", "type": "n8n-nodes-base.noOp", "position": [ 3800, 2560 ], "parameters": {}, "typeVersion": 1 }, { "id": "56bbb0e9-3ee5-48e3-b0bf-48e8d026daa9", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [ 2220, 2400 ], "parameters": { "width": 1733.785946789966, "height": 351.94195615011336, "content": "## Check if the song is in the Spotify playlist. If not, add it." }, "typeVersion": 1 }, { "id": "9834163b-0991-4910-bb4f-cf4557bfa0d5", "name": "Schedule Trigger", "type": "n8n-nodes-base.scheduleTrigger", "position": [ 20, 2460 ], "parameters": { "rule": { "interval": [ { "field": "minutes" } ] } }, "typeVersion": 1.2 }, { "id": "72a3c48f-a759-4e0c-b7bb-9f69a5f4377e", "name": "End", "type": "n8n-nodes-base.noOp", "position": [ 4100, 2260 ], "parameters": {}, "typeVersion": 1 } ], "pinData": {}, "connections": { "Merge": { "main": [ [ { "node": "Get this month playlist in DB", "type": "main", "index": 0 } ] ] }, "Filter1": { "main": [ [ { "node": "Song is not present in the playlist ?", "type": "main", "index": 0 } ] ] }, "Clean op": { "main": [ [ { "node": "Merge", "type": "main", "index": 0 } ] ] }, "Clean op1": { "main": [ [ { "node": "For each monthly tracks in DB", "type": "main", "index": 0 } ] ] }, "Clean op2": { "main": [ [ { "node": "For each tracks in liked song", "type": "main", "index": 0 } ] ] }, "Is not saved": { "main": [ [ { "node": "Create song entry", "type": "main", "index": 0 } ], [ { "node": "Clean op2", "type": "main", "index": 0 } ] ] }, "Get current date": { "main": [ [ { "node": "Get all user playlist", "type": "main", "index": 0 }, { "node": "Get last 10 liked tracks", "type": "main", "index": 0 } ] ] }, "Schedule Trigger": { "main": [ [ { "node": "Get current date", "type": "main", "index": 0 } ] ] }, "Create song entry": { "main": [ [ { "node": "Clean op2", "type": "main", "index": 0 } ] ] }, "Get playlist in DB": { "main": [ [ { "node": "Playlist exist in DB ?", "type": "main", "index": 0 } ] ] }, "Get monthly playlist": { "main": [ [ { "node": "Monthly playlist exist in Spotify ?", "type": "main", "index": 0 } ] ] }, "Create playlist in DB": { "main": [ [ { "node": "Clean op", "type": "main", "index": 0 } ] ] }, "Get all user playlist": { "main": [ [ { "node": "Get monthly playlist", "type": "main", "index": 0 } ] ] }, "Create playlist in DB1": { "main": [ [ { "node": "Clean op", "type": "main", "index": 0 } ] ] }, "Check if track is saved": { "main": [ [ { "node": "Is not saved", "type": "main", "index": 0 } ] ] }, "Playlist exist in DB ?": { "main": [ [ { "node": "Clean op", "type": "main", "index": 0 } ], [ { "node": "Create playlist in DB", "type": "main", "index": 0 } ] ] }, "Add song to the playlist": { "main": [ [ { "node": "Clean op1", "type": "main", "index": 0 } ] ] }, "Get last 10 liked tracks": { "main": [ [ { "node": "For each tracks in liked song", "type": "main", "index": 0 } ] ] }, "Create playlist in Spotify": { "main": [ [ { "node": "Create playlist in DB1", "type": "main", "index": 0 } ] ] }, "Get this month tracks in DB": { "main": [ [ { "node": "For each monthly tracks in DB", "type": "main", "index": 0 } ] ] }, "For each monthly tracks in DB": { "main": [ [ { "node": "End", "type": "main", "index": 0 } ], [ { "node": "Get this month tracks in Spotify", "type": "main", "index": 0 } ] ] }, "For each tracks in liked song": { "main": [ [ { "node": "Merge", "type": "main", "index": 1 } ], [ { "node": "Check if track is saved", "type": "main", "index": 0 } ] ] }, "Get this month playlist in DB": { "main": [ [ { "node": "Get this month tracks in DB", "type": "main", "index": 0 } ] ] }, "Get this month tracks in Spotify": { "main": [ [ { "node": "Filter1", "type": "main", "index": 0 } ] ] }, "Monthly playlist exist in Spotify ?": { "main": [ [ { "node": "Get playlist in DB", "type": "main", "index": 0 } ], [ { "node": "Create playlist in Spotify", "type": "main", "index": 0 } ] ] }, "Song is not present in the playlist ?": { "main": [ [ { "node": "Add song to the playlist", "type": "main", "index": 0 } ], [ { "node": "Clean op1", "type": "main", "index": 0 } ] ] } } }