Workflow: develop a modular n8n workflow that supports Webhook Respondtowebhook Automation Webhook
Integrations: function, htmlExtract, httpRequest, itemLists, manualTrigger, respondToWebhook, set, webhook

{"nodes": [{"id": "35c4aa9f-7535-4315-9174-fe97afc6de2e", "name": "On clicking 'execute'", "type": "n8n-nodes-base.manualTrigger", "position": [240, 300], "parameters": {}, "typeVersion": 1}, {"id": "ed1f4f78-733f-4dd5-9785-969c9ec0d637", "name": "Get overview page", "type": "n8n-nodes-base.httpRequest", "position": [460, 300], "parameters": {"url": "https://www.ardaudiothek.de/sendung/kalk-und-welk/10777871/", "options": {}, "responseFormat": "string"}, "typeVersion": 2}, {"id": "28333c78-aa8f-401a-8033-2007a5e6991c", "name": "Extract links", "type": "n8n-nodes-base.htmlExtract", "position": [680, 300], "parameters": {"options": {}, "extractionValues": {"values": [{"key": "links", "attribute": "href", "cssSelector": "a[href*=\"/episode/\"]", "returnArray": true, "returnValue": "attribute"}]}}, "typeVersion": 1}, {"id": "58840494-4208-49ce-b82a-d7cf8abd3b29", "name": "Remove duplicate links", "type": "n8n-nodes-base.itemLists", "position": [1120, 300], "parameters": {"operation": "removeDuplicates"}, "typeVersion": 1}, {"id": "17efb905-b947-4538-ab34-d50bf7fdbd75", "name": "Split out lists", "type": "n8n-nodes-base.itemLists", "position": [900, 300], "parameters": {"options": {"destinationFieldName": "link"}, "fieldToSplitOut": "links"}, "typeVersion": 1}, {"id": "59a69e64-ebba-42cb-b8d0-8dd73f0ae962", "name": "Get episode page", "type": "n8n-nodes-base.httpRequest", "position": [1340, 300], "parameters": {"url": "=https://www.ardaudiothek.de{{ $json[\"link\"] }}", "options": {}, "responseFormat": "string"}, "typeVersion": 2}, {"id": "68749bff-1499-4ef5-aefd-c4b6233d0fa7", "name": "Extract script", "type": "n8n-nodes-base.htmlExtract", "position": [1560, 300], "parameters": {"options": {}, "extractionValues": {"values": [{"key": "script", "cssSelector": "script:nth-of-type(2)", "returnValue": "html"}]}}, "typeVersion": 1}, {"id": "158e7b18-f58d-453f-80f8-97e65f0b1fde", "name": "Parse JSON", "type": "n8n-nodes-base.set", "position": [1780, 300], "parameters": {"values": {"string": [{"name": "data", "value": "={{ JSON.parse($json.script) }}"}]}, "options": {}, "keepOnlySet": true}, "typeVersion": 1}, {"id": "a613c52e-395b-4d88-ab7d-b1cf2b664b43", "name": "Define feed items", "type": "n8n-nodes-base.function", "position": [2000, 300], "parameters": {"functionCode": "const escapeHTML = str => str.replace(/[&<>'\"]/g, \n  tag => ({\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      \"'\": '&#39;',\n      '\"': '&quot;'\n    }[tag]));\n\nlet feedItems = [];\nfor (item of items) {\n  feedItems.push(`<item>\n  <title>${escapeHTML(item.json.data.name)}</title>\n  <enclosure url=\"${item.json.data.associatedMedia.contentUrl}\" length=\"${item.json.data.timeRequired * 20 * 1000}\" type=\"${item.json.data.encodingFormat}\"/>\n  <guid isPermaLink=\"false\">${item.json.data.identifier}</guid>\n  <pubDate>${DateTime.fromISO(item.json.data.datePublished).toRFC2822()}</pubDate>\n  <description>${escapeHTML(item.json.data.description)}</description>\n</item>`);\n}\n\nreturn [{\n  data: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss version=\"2.0\" xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\">\n  <channel>\n    <title>${escapeHTML(items[0].json.data.partOfSeries.name)}</title>\n    <description>${escapeHTML(items[0].json.data.partOfSeries.about)}</description>\n    <itunes:image href=\"${escapeHTML(items[0].json.data.image)}\" />\n    <language>${items[0].json.data.inLanguage}</language>\n    <itunes:category text=\"Comedy\" />\n    <itunes:explicit>no</itunes:explicit>\n    <link>${items[0].json.data.partOfSeries.url}</link>\n    <copyright>\u00a9 ${$now.toFormat('yyyy')} ${escapeHTML(items[0].json.data.productionCompany)}</copyright>\n    <itunes:author>${escapeHTML(items[0].json.data.productionCompany)}</itunes:author>\n    ${feedItems.join('\\n')}\n  </channel>\n</rss>\n`\n}];\n"}, "typeVersion": 1}, {"id": "cbdc367d-a685-4f0b-a9f3-0aedc2c8b3c1", "name": "Feed", "type": "n8n-nodes-base.webhook", "position": [240, 100], "webhookId": "3fbd94de-2fb3-4b32-a46e-c237865479b9", "parameters": {"path": "3fbd94de-2fb3-4b32-a46e-c237865479b9.rss", "options": {}, "responseMode": "responseNode"}, "typeVersion": 1}, {"id": "0dfb02cc-1944-4542-b5c5-9e0b198e143d", "name": "Serve feed", "type": "n8n-nodes-base.respondToWebhook", "position": [2220, 300], "parameters": {"options": {"responseCode": 200, "responseHeaders": {"entries": [{"name": "Content-Type", "value": "application/rss+xml"}]}}, "respondWith": "text", "responseBody": "={{ $json[\"data\"] }}"}, "typeVersion": 1}], "connections": {"Feed": {"main": [[{"node": "Get overview page", "type": "main", "index": 0}]]}, "Parse JSON": {"main": [[{"node": "Define feed items", "type": "main", "index": 0}]]}, "Extract links": {"main": [[{"node": "Split out lists", "type": "main", "index": 0}]]}, "Extract script": {"main": [[{"node": "Parse JSON", "type": "main", "index": 0}]]}, "Split out lists": {"main": [[{"node": "Remove duplicate links", "type": "main", "index": 0}]]}, "Get episode page": {"main": [[{"node": "Extract script", "type": "main", "index": 0}]]}, "Define feed items": {"main": [[{"node": "Serve feed", "type": "main", "index": 0}]]}, "Get overview page": {"main": [[{"node": "Extract links", "type": "main", "index": 0}]]}, "On clicking 'execute'": {"main": [[{"node": "Get overview page", "type": "main", "index": 0}]]}, "Remove duplicate links": {"main": [[{"node": "Get episode page", "type": "main", "index": 0}]]}}}