feat(RSS Read Node): Add support for custom response fields (#16875)

This commit is contained in:
Jon
2025-07-23 15:18:06 +01:00
committed by GitHub
parent a2f21a7615
commit d520059ec3
3 changed files with 89 additions and 12 deletions

View File

@@ -54,6 +54,14 @@ export class RssFeedRead implements INodeType {
placeholder: 'Add option', placeholder: 'Add option',
default: {}, default: {},
options: [ options: [
{
displayName: 'Custom Fields',
name: 'customFields',
type: 'string',
default: '',
description:
'A comma-separated list of custom fields to include in the output. For example, "author, contentSnippet".',
},
{ {
displayName: 'Ignore SSL Issues (Insecure)', displayName: 'Ignore SSL Issues (Insecure)',
name: 'ignoreSSL', name: 'ignoreSSL',
@@ -111,6 +119,13 @@ export class RssFeedRead implements INodeType {
}; };
} }
if (options.customFields) {
const customFields = options.customFields as string;
parserOptions.customFields = {
item: customFields.split(',').map((field) => field.trim()),
};
}
const parser = new Parser(parserOptions); const parser = new Parser(parserOptions);
let feed: Parser.Output<IDataObject>; let feed: Parser.Output<IDataObject>;
@@ -132,13 +147,12 @@ export class RssFeedRead implements INodeType {
}); });
} }
// For now we just take the items and ignore everything else
if (feed.items) { if (feed.items) {
const feedItems = (feed.items as IDataObject[]).map((item) => ({ const feedItems = (feed.items as IDataObject[]).map((item) => ({
json: item, json: item,
})) as INodeExecutionData[]; })) as INodeExecutionData[];
const itemData = fallbackPairedItems || [{ item: i }]; const itemData = fallbackPairedItems ?? [{ item: i }];
const executionData = this.helpers.constructExecutionMetaData(feedItems, { const executionData = this.helpers.constructExecutionMetaData(feedItems, {
itemData, itemData,
@@ -150,7 +164,7 @@ export class RssFeedRead implements INodeType {
if (this.continueOnFail()) { if (this.continueOnFail()) {
returnData.push({ returnData.push({
json: { error: error.message }, json: { error: error.message },
pairedItem: fallbackPairedItems || [{ item: i }], pairedItem: fallbackPairedItems ?? [{ item: i }],
}); });
continue; continue;
} }

View File

@@ -2,7 +2,7 @@ import { NodeTestHarness } from '@nodes-testing/node-test-harness';
import nock from 'nock'; import nock from 'nock';
// eslint-disable-next-line n8n-local-rules/no-unneeded-backticks // eslint-disable-next-line n8n-local-rules/no-unneeded-backticks
const feed = `<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Lorem ipsum feed for an interval of 1 minutes with 3 item(s)]]></title><description><![CDATA[This is a constantly updating lorem ipsum feed]]></description><link>http://example.com/</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Feb 2023 13:40:32 GMT</lastBuildDate><pubDate>Thu, 09 Feb 2023 13:40:00 GMT</pubDate><copyright><![CDATA[Michael Bertolacci, licensed under a Creative Commons Attribution 3.0 Unported License.]]></copyright><ttl>1</ttl><item><title><![CDATA[Lorem ipsum 2023-02-09T13:40:00Z]]></title><description><![CDATA[Fugiat excepteur exercitation tempor ut aute sunt pariatur veniam pariatur dolor.]]></description><link>http://example.com/test/1675950000</link><guid isPermaLink="true">http://example.com/test/1675950000</guid><dc:creator><![CDATA[John Smith]]></dc:creator><pubDate>Thu, 09 Feb 2023 13:40:00 GMT</pubDate></item><item><title><![CDATA[Lorem ipsum 2023-02-09T13:39:00Z]]></title><description><![CDATA[Laboris quis nulla tempor eu ullamco est esse qui aute commodo aliqua occaecat.]]></description><link>http://example.com/test/1675949940</link><guid isPermaLink="true">http://example.com/test/1675949940</guid><dc:creator><![CDATA[John Smith]]></dc:creator><pubDate>Thu, 09 Feb 2023 13:39:00 GMT</pubDate></item><item><title><![CDATA[Lorem ipsum 2023-02-09T13:38:00Z]]></title><description><![CDATA[Irure labore dolor dolore sint aliquip eu anim aute anim et nulla adipisicing nostrud.]]></description><link>http://example.com/test/1675949880</link><guid isPermaLink="true">http://example.com/test/1675949880</guid><dc:creator><![CDATA[John Smith]]></dc:creator><pubDate>Thu, 09 Feb 2023 13:38:00 GMT</pubDate></item></channel></rss>`; const feed = `<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Lorem ipsum feed for an interval of 1 minutes with 3 item(s)]]></title><description><![CDATA[This is a constantly updating lorem ipsum feed]]></description><link>http://example.com/</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Feb 2023 13:40:32 GMT</lastBuildDate><pubDate>Thu, 09 Feb 2023 13:40:00 GMT</pubDate><copyright><![CDATA[Michael Bertolacci, licensed under a Creative Commons Attribution 3.0 Unported License.]]></copyright><ttl>1</ttl><item><title><![CDATA[Lorem ipsum 2023-02-09T13:40:00Z]]></title><description><![CDATA[Fugiat excepteur exercitation tempor ut aute sunt pariatur veniam pariatur dolor.]]></description><link>http://example.com/test/1675950000</link><guid isPermaLink="true">http://example.com/test/1675950000</guid><dc:creator><![CDATA[John Smith]]></dc:creator><pubDate>Thu, 09 Feb 2023 13:40:00 GMT</pubDate><custom>custom</custom></item><item><title><![CDATA[Lorem ipsum 2023-02-09T13:39:00Z]]></title><description><![CDATA[Laboris quis nulla tempor eu ullamco est esse qui aute commodo aliqua occaecat.]]></description><link>http://example.com/test/1675949940</link><guid isPermaLink="true">http://example.com/test/1675949940</guid><dc:creator><![CDATA[John Smith]]></dc:creator><pubDate>Thu, 09 Feb 2023 13:39:00 GMT</pubDate><custom>custom</custom></item><item><title><![CDATA[Lorem ipsum 2023-02-09T13:38:00Z]]></title><description><![CDATA[Irure labore dolor dolore sint aliquip eu anim aute anim et nulla adipisicing nostrud.]]></description><link>http://example.com/test/1675949880</link><guid isPermaLink="true">http://example.com/test/1675949880</guid><dc:creator><![CDATA[John Smith]]></dc:creator><pubDate>Thu, 09 Feb 2023 13:38:00 GMT</pubDate><custom>custom</custom></item></channel></rss>`;
describe('Test RSS Feed Trigger Node', () => { describe('Test RSS Feed Trigger Node', () => {
beforeAll(() => { beforeAll(() => {
@@ -10,6 +10,7 @@ describe('Test RSS Feed Trigger Node', () => {
nock('https://fake-rss-feed.com') nock('https://fake-rss-feed.com')
.get('/feed') .get('/feed')
.reply(200, feed, { 'Content-Type': 'application/xml; charset=utf-8' }); .reply(200, feed, { 'Content-Type': 'application/xml; charset=utf-8' });
nock('https://custom-rss-feed.com').get('/feed').reply(200, feed);
}); });
new NodeTestHarness().setupTests(); new NodeTestHarness().setupTests();

View File

@@ -3,22 +3,22 @@
"nodes": [ "nodes": [
{ {
"parameters": {}, "parameters": {},
"id": "4d0527e8-1906-4c09-bbd7-fa3d88f13195", "id": "448372da-bc2d-4952-8d16-4b3384cd3c3d",
"name": "When clicking \"Execute Workflow\"", "name": "When clicking \"Execute Workflow\"",
"type": "n8n-nodes-base.manualTrigger", "type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1, "typeVersion": 1,
"position": [-200, -220] "position": [-112, -176]
}, },
{ {
"parameters": { "parameters": {
"url": "https://lorem-rss.herokuapp.com/feed?length=3", "url": "https://lorem-rss.herokuapp.com/feed?length=3",
"options": {} "options": {}
}, },
"id": "bb54b66c-2c40-4ea2-a1ae-5fef2186e4bd", "id": "13b7f0a0-db25-4ff3-9e61-4748f6910860",
"name": "RSS Read", "name": "RSS Read",
"type": "n8n-nodes-base.rssFeedRead", "type": "n8n-nodes-base.rssFeedRead",
"typeVersion": 1, "typeVersion": 1,
"position": [0, -220] "position": [96, -176]
}, },
{ {
"parameters": { "parameters": {
@@ -27,9 +27,22 @@
}, },
"type": "n8n-nodes-base.rssFeedRead", "type": "n8n-nodes-base.rssFeedRead",
"typeVersion": 1.2, "typeVersion": 1.2,
"position": [0, -40], "position": [96, 16],
"id": "9b67fdd9-23de-40ae-b477-cb121a4ed5c8", "id": "ec469874-0ca2-457e-9204-77417d08ef90",
"name": "RSS Read1" "name": "RSS Read1"
},
{
"parameters": {
"url": "https://custom-rss-feed.com/feed",
"options": {
"customFields": "custom"
}
},
"type": "n8n-nodes-base.rssFeedRead",
"typeVersion": 1.2,
"position": [96, 176],
"id": "6b9593c7-22e0-4ed6-a2ca-bd48aecdfc59",
"name": "RSS With Custom"
} }
], ],
"pinData": { "pinData": {
@@ -114,6 +127,50 @@
"isoDate": "2023-02-09T13:38:00.000Z" "isoDate": "2023-02-09T13:38:00.000Z"
} }
} }
],
"RSS With Custom": [
{
"json": {
"creator": "John Smith",
"title": "Lorem ipsum 2023-02-09T13:40:00Z",
"link": "http://example.com/test/1675950000",
"pubDate": "Thu, 09 Feb 2023 13:40:00 GMT",
"dc:creator": "John Smith",
"content": "Fugiat excepteur exercitation tempor ut aute sunt pariatur veniam pariatur dolor.",
"contentSnippet": "Fugiat excepteur exercitation tempor ut aute sunt pariatur veniam pariatur dolor.",
"guid": "http://example.com/test/1675950000",
"isoDate": "2023-02-09T13:40:00.000Z",
"custom": "custom"
}
},
{
"json": {
"creator": "John Smith",
"title": "Lorem ipsum 2023-02-09T13:39:00Z",
"link": "http://example.com/test/1675949940",
"pubDate": "Thu, 09 Feb 2023 13:39:00 GMT",
"dc:creator": "John Smith",
"content": "Laboris quis nulla tempor eu ullamco est esse qui aute commodo aliqua occaecat.",
"contentSnippet": "Laboris quis nulla tempor eu ullamco est esse qui aute commodo aliqua occaecat.",
"guid": "http://example.com/test/1675949940",
"isoDate": "2023-02-09T13:39:00.000Z",
"custom": "custom"
}
},
{
"json": {
"creator": "John Smith",
"title": "Lorem ipsum 2023-02-09T13:38:00Z",
"link": "http://example.com/test/1675949880",
"pubDate": "Thu, 09 Feb 2023 13:38:00 GMT",
"dc:creator": "John Smith",
"content": "Irure labore dolor dolore sint aliquip eu anim aute anim et nulla adipisicing nostrud.",
"contentSnippet": "Irure labore dolor dolore sint aliquip eu anim aute anim et nulla adipisicing nostrud.",
"guid": "http://example.com/test/1675949880",
"isoDate": "2023-02-09T13:38:00.000Z",
"custom": "custom"
}
}
] ]
}, },
"connections": { "connections": {
@@ -129,6 +186,11 @@
"node": "RSS Read1", "node": "RSS Read1",
"type": "main", "type": "main",
"index": 0 "index": 0
},
{
"node": "RSS With Custom",
"type": "main",
"index": 0
} }
] ]
] ]
@@ -138,10 +200,10 @@
"settings": { "settings": {
"executionOrder": "v1" "executionOrder": "v1"
}, },
"versionId": "9bb18c59-4606-4889-a2b0-40284952c604", "versionId": "11023520-13ee-48bf-80b4-81821316ec5f",
"meta": { "meta": {
"instanceId": "0fa937d34dcabeff4bd6480d3b42cc95edf3bc20e6810819086ef1ce2623639d" "instanceId": "0fa937d34dcabeff4bd6480d3b42cc95edf3bc20e6810819086ef1ce2623639d"
}, },
"id": "wWDle8xVd0Elxoa0", "id": "hKwPhUVv6w8I1s7M",
"tags": [] "tags": []
} }