{ "id": "7", "name": "Daily Language Learning", "nodes": [ { "name": "Daily trigger", "type": "n8n-nodes-base.cron", "position": [ 620, 750 ], "parameters": { "triggerTimes": { "item": [ { "hour": 8 } ] } }, "typeVersion": 1 }, { "name": "Get top 3 articles", "type": "n8n-nodes-base.hackerNews", "position": [ 820, 750 ], "parameters": { "limit": 3, "resource": "all", "additionalFields": { "tags": [ "front_page" ] } }, "typeVersion": 1 }, { "name": "Extract words", "type": "n8n-nodes-base.function", "position": [ 1020, 750 ], "parameters": { "functionCode": "const words = [];\nconst regex = /\\d/g;\nconst newItems = [];\n\n// Splits titles into words and removes numbers\n// using regular expressions\n\nfor(let i=0; i < items.length; i++) {\n let split_titles = []; \n split_titles = items[i].json.title.split(' ');\n for(let j=0; j < split_titles.length; j++) {\n if(regex.test(split_titles[j])) {\n continue;\n } else {\n words.push(split_titles[j]);\n }\n }\n}\n\n// Removes all duplicate words by converting the\n// array into a set and then back into an array\n\nconst uniqueWords = [...new Set(words)];\n\n// Transform the array to the data structure expected\n// by n8n\n\nfor(let k=0; k < uniqueWords.length; k++) {\n newItems.push({json: { words: uniqueWords[k] }});\n}\n\nreturn newItems;" }, "typeVersion": 1 }, { "name": "Translate", "type": "n8n-nodes-base.lingvaNex", "position": [ 1220, 750 ], "parameters": { "text": "={{$node[\"Extract words\"].json[\"words\"]}}", "options": {}, "translateTo": "de_DE" }, "credentials": { "lingvaNexApi": "LingvaNex" }, "typeVersion": 1 }, { "name": "Filter data ", "type": "n8n-nodes-base.set", "position": [ 1420, 750 ], "parameters": { "values": { "string": [ { "name": "English word", "value": "={{$node[\"Translate\"].json[\"source\"]}}" }, { "name": "Translated word", "value": "={{$node[\"Translate\"].json[\"result\"]}}" } ] }, "options": {}, "keepOnlySet": true }, "typeVersion": 1 }, { "name": "Save today's words", "type": "n8n-nodes-base.airtable", "position": [ 1620, 850 ], "parameters": { "table": "Table 1", "options": {}, "operation": "append", "application": "app4Y6qcCHIO1cYNB" }, "credentials": { "airtableApi": "Airtable" }, "typeVersion": 1 }, { "name": "Craft message", "type": "n8n-nodes-base.function", "position": [ 1620, 650 ], "parameters": { "functionCode": "const number_of_words = 5;\nconst words = [];\n\n// Crafts the words to be sent in en_word : translated_word format\n// and adds them to an array\n\nfor(let i=0; i < number_of_words; i++) {\n words.push(items[i].json['English word'] + ' : ' + items[i].json['Translated word']);\n}\n\n// Takes all the items from the array and converts them into a comma\n// separated string\n\nconst words_of_the_day = words.join(', ');\n\nreturn [{json: {words_of_the_day: words_of_the_day}}];" }, "typeVersion": 1 }, { "name": "Send SMS", "type": "n8n-nodes-base.vonage", "position": [ 1820, 650 ], "parameters": { "to": "+4915225152610", "from": "Vonage APIs", "message": "=Good morning, here are your words for today\n{{$node[\"Craft message\"].json[\"words_of_the_day\"]}}", "additionalFields": {} }, "credentials": { "vonageApi": "Vonage" }, "typeVersion": 1 } ], "active": false, "settings": {}, "connections": { "Translate": { "main": [ [ { "node": "Filter data ", "type": "main", "index": 0 } ] ] }, "Filter data ": { "main": [ [ { "node": "Craft message", "type": "main", "index": 0 }, { "node": "Save today's words", "type": "main", "index": 0 } ] ] }, "Craft message": { "main": [ [ { "node": "Send SMS", "type": "main", "index": 0 } ] ] }, "Daily trigger": { "main": [ [ { "node": "Get top 3 articles", "type": "main", "index": 0 } ] ] }, "Extract words": { "main": [ [ { "node": "Translate", "type": "main", "index": 0 } ] ] }, "Get top 3 articles": { "main": [ [ { "node": "Extract words", "type": "main", "index": 0 } ] ] } } }