8
n8n 中文网amn8n.com

无重复的 RSS 阅读器

高级

这是一个Market Research, AI Summarization领域的自动化工作流,包含 23 个节点。主要使用 If, Set, Html, Filter, Markdown 等节点。 使用 Gemini AI 摘要和去重到 Google Sheets 的自动化 RSS 监控

前置要求
  • 可能需要目标 API 的认证凭证
  • Google Sheets API 凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "4ugQDSCMUWFpn5qo",
  "meta": {
    "instanceId": "e8794a4f970040d09c64040698c632aefaa9a59e97e60424e4b5671338351753",
    "templateCredsSetupCompleted": true
  },
  "name": "无重复的 RSS 阅读器",
  "tags": [],
  "nodes": [
    {
      "id": "abe6ed52-40ac-4ed5-abea-419d94505509",
      "name": "当点击\"执行工作流\"时",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -3080,
        360
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "43696041-99ea-4d24-b677-d025bb556544",
      "name": "获取 RSS 源列表",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Get feeds Url's  from Google Sheet",
      "position": [
        -2380,
        280
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $json[\"Rss Feeds\"] }}"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $json.Document }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "yTQwBHgpFHqp2Mxw",
          "name": "gSheets roman@ibb.media"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    },
    {
      "id": "02fc9382-dd56-4af0-8c1c-9f3c83461b05",
      "name": "读取 RSS",
      "type": "n8n-nodes-base.rssFeedRead",
      "notes": "This read RSS channel",
      "position": [
        -1900,
        480
      ],
      "parameters": {
        "url": "={{ $json[\"RSS URL\"] }}",
        "options": {
          "ignoreSSL": true
        }
      },
      "executeOnce": true,
      "notesInFlow": true,
      "typeVersion": 1.2
    },
    {
      "id": "c39a746a-639e-4d21-9dac-6974bb52a030",
      "name": "循环遍历 RSS 元素",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1340,
        -200
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "b7f5ad99-0ea3-45b6-ae0b-07458a4255b3",
      "name": "获取 URL 在 Sheets 中的行",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Check if the record with the link exists in Google Sheets",
      "position": [
        -1120,
        -180
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.link }}",
              "lookupColumn": "link"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Settings').item.json[\"Articles Sheet\"] }}"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Settings').item.json.Document }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "yTQwBHgpFHqp2Mxw",
          "name": "gSheets roman@ibb.media"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6,
      "alwaysOutputData": true
    },
    {
      "id": "05c8ff40-8232-4683-950a-37fa60d87eb2",
      "name": "将 HTML 转换为 Markdown",
      "type": "n8n-nodes-base.markdown",
      "notes": "Markdown is more friendly LLM format than HTML",
      "position": [
        -240,
        -200
      ],
      "parameters": {
        "html": "={{ $json.data }}",
        "options": {
          "ignore": "img,form",
          "blockElements": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "6708c44c-e1a5-4f2b-9780-c980c7a95053",
      "name": "将摘要附加到 Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        580,
        -40
      ],
      "parameters": {
        "columns": {
          "value": {
            "link": "={{ $('Loop Over Rss Elements').item.json.link }}",
            "title": "={{ $('Loop Over Rss Elements').item.json.title }}",
            "source": "={{ $('Loop Over Rss Elements').item.json[\"RSS NAME\"] }}",
            "pubDate": "={{ $('Loop Over Rss Elements').item.json.pubDate.toDateTime().format('yyyy-MM-dd HH:mm').toDateTime() }}",
            "ai summary": "={{ $json.text }}",
            "categories": "={{ $('Loop Over Rss Elements').item.json.categories.toJsonString() }}"
          },
          "schema": [
            {
              "id": "pubDate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "pubDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "source",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "source",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "link",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "categories",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "categories",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ai summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "ai summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "link"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "useAppend": true,
          "cellFormat": "RAW"
        },
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Settings').item.json[\"Articles Sheet\"] }}"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Settings').item.json.Document }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "yTQwBHgpFHqp2Mxw",
          "name": "gSheets roman@ibb.media"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "366e157b-9ff0-4913-b993-7d37c3252fe2",
      "name": "将 RSS 与源名称组合",
      "type": "n8n-nodes-base.set",
      "position": [
        -1660,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "72a6cb17-fefb-44c6-b2d5-348ce57e8270",
              "name": "RSS NAME",
              "type": "string",
              "value": "={{ $('Loop Over Items').item.json[\"RSS NAME\"] }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "29f5c69a-c6ea-4191-bff5-914044efb76e",
      "name": "检查文章是否存在",
      "type": "n8n-nodes-base.if",
      "notes": "We check if the object is empty",
      "position": [
        -900,
        -180
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f2fe5727-5ae3-40fe-86c5-e2ad6288303b",
              "operator": {
                "type": "object",
                "operation": "empty",
                "singleValue": true
              },
              "leftValue": "={{ $item(\"0\").$node[\"Get Row for URL is in Sheets\"].json }}",
              "rightValue": ""
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.2
    },
    {
      "id": "a3e91192-55c8-4384-8d2e-fc6cc7321c98",
      "name": "总结内容",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        -20,
        -200
      ],
      "parameters": {
        "text": "=Hi Gemma Summarize This:\n\n<basic_information>\n- Date: {{ $('Loop Over Rss Elements').item.json.isoDate }}\n- Title: {{ $('Loop Over Rss Elements').item.json.title }}\n- Author/Source: {{ $('Loop Over Rss Elements').item.json.creator }} / {{ $('Loop Over Rss Elements').item.json.link }}\n- Category: {{ $('Loop Over Rss Elements').item.json.categories.toJsonString() }}\n</basic_information>\n\n<content>\n{{ $json.data }}\n</content>\n\nResponse immediately without any introductory text, explanations, or commentary.",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You Are Gemma.\n<role>\nGemma is an expert at creating concise, valuable article summaries. She can process content from various domains and specializes in extracting key information and practical insights from any type of article.\n</role>\n\n<task>\nGemma create a structured summary format of the provided article, preserving key information and practical insights.\n</task>\n\n<steps>\n- Identify main content of sended by user.\n- Prepare summary, when writing use <writing_guidelines>.\n- Make quality control based on <quality_control>.\n- Output summary driectly in Markdown frmat following <structured_summary_format>. Check <output_formatting> for guidelines.\n</steps>\n\n<writing_guidelines>\nSHOULD DO:\n- Use simple, understandable language.\n- Maintain objectivity and accuracy.\n- Extract practical insights.\n- Emphasize specific data and numbers.\n- Prioritize actionable information.\n- Adjust detail level to article length.\n- Use bullet points for better readability.\n\nSHOULD AVOID:\n- Adding her own opinions beyond the article.\n- Repeating information in different sections.\n- Using jargon without explanation.\n- Omitting important caveats/limitations.\n- Exceeding 300 words in total summary.\n- Copying entire fragments verbatim.\n</writing_guidelines>\n\n<special_cases>\n- FOR TECHNICAL ARTICLES: Gemma should explain complex terms, highlight technical requirements, and note implementation difficulty level.\n- FOR BUSINESS ARTICLES: Gemma should focus on ROI and metrics, highlight potential costs/benefits, and note target audience.\n- FOR CASE STUDIES: Gemma should describe context and challenge, present applied solution, and highlight results and success metrics.\n- TONE AND STYLE: Gemma should maintain a professional but accessible tone that is concise and concrete, focused on reader value, and action-oriented.\n</special_cases>\n\n<quality_control>\nBefore finalizing, Gemma should check:\n- Does the summary capture the essence of the article?\n- Are all sections filled?\n- Is the information accurate and verified?\n- Is the length appropriate?\n- Does the summary have practical value?\n</quality_control>\n\n<structured_summary_format>\n[1-5 sentences describing the main message of the article]\n\n## QUICK TAKEAWAYS\n\n- [3-5 most important conclusions in bullet format]\n\n## KEY POINTS\n\n- [Most important point 1]\n- [Most important point 2]\n- [Most important point 3]\n- [Most important point 4-5 if relevant]\n\n## PRACTICAL INSIGHTS\n\n- [Specific actions/recommendations]\n- [Tools/methods mentioned in the article]\n- [Metrics/numerical data if relevant]\n\n## PRACTICAL APPLICATION\n\n[How this information can be applied in business/life/relevant field]\n</structured_summary_format>\n\n<output_formatting>\nResponse immediately without any introductory text, explanations, or commentary.\nOutput formatting is Markdown.\nDo not start with block indicators (``` ```)\nYOU CAN NOT USE :\n- \"Here's a breakdown\", \n- \"Here's the summary\",\n- \"Okay, here's a breakdown of the provided text, categorized and summarized for clarity\",\n- or any other preamble. Go directly to the structured summary format.\n</output_formatting>"
            }
          ]
        },
        "promptType": "define"
      },
      "retryOnFail": true,
      "typeVersion": 1.7
    },
    {
      "id": "6edc03ae-3932-4b6d-b8f1-98cb2e51f4cb",
      "name": "格式化输出",
      "type": "n8n-nodes-base.set",
      "position": [
        320,
        -200
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "52023808-641d-4f4d-9c8f-b51c9b3bbbd1",
              "name": "text",
              "type": "string",
              "value": "={{ $json.text.replace(/<think>[\\s\\S]*?<\\/think>/g, '') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "02eb922d-ae5c-4029-a01a-3a279989fa1c",
      "name": "定时触发器",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -3080,
        180
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "131b0ae1-bc12-48d8-a20d-bbffbf9b6bee",
      "name": "遍历项目",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -2100,
        280
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "28c1347b-e54e-405e-ab0a-da6a422187da",
      "name": "过滤最近 X 天",
      "type": "n8n-nodes-base.filter",
      "notes": "This filter only news from last x days",
      "position": [
        -1740,
        -200
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "516c4ec9-fc16-4687-a376-86a79115afc8",
              "operator": {
                "type": "dateTime",
                "operation": "after"
              },
              "leftValue": "={{ $json.pubDate }}",
              "rightValue": "={{ $('Settings').item.json['Current Time'].toDateTime().minus($('Settings').item.json['Last X Days'],'days').startOf('day') }}"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.2
    },
    {
      "id": "852a3623-87a1-4a96-99f4-eb8303ab7c2c",
      "name": "设置",
      "type": "n8n-nodes-base.set",
      "notes": "Set Here Your Gogle Sheets URLs and Last x Days Filter",
      "position": [
        -2640,
        280
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "93e02cc9-f9c9-4167-ad2c-688433aa9b36",
              "name": "Document",
              "type": "string",
              "value": "https://docs.google.com/spreadsheets/d/1i1p_DPymm8QeZrCLxs-Skz8BMSutKpUW4khzpiNBcYc/edit?gid=0#gid=0"
            },
            {
              "id": "c95234c3-baff-4dd6-a3ec-3a97a10e44c1",
              "name": "Articles Sheet",
              "type": "string",
              "value": "https://docs.google.com/spreadsheets/d/1i1p_DPymm8QeZrCLxs-Skz8BMSutKpUW4khzpiNBcYc/edit?gid=0#gid=0"
            },
            {
              "id": "c94d9441-3b2b-421b-bb57-cfa041b132d6",
              "name": "Rss Feeds",
              "type": "string",
              "value": "https://docs.google.com/spreadsheets/d/1i1p_DPymm8QeZrCLxs-Skz8BMSutKpUW4khzpiNBcYc/edit?gid=255338052#gid=255338052"
            },
            {
              "id": "94b40b88-6c7f-4bdf-8896-c8b9a4f6621f",
              "name": "Current Time",
              "type": "string",
              "value": "={{ \n  $workflow.trigger === 'Schedule Trigger' ? \n  $('Schedule Trigger').item.json.timestamp : \n  $now \n}}"
            },
            {
              "id": "eba798d1-5a87-4446-bdc4-63e8a27bc510",
              "name": "Last X Days",
              "type": "number",
              "value": 31
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 3.4
    },
    {
      "id": "7f3236e0-025d-496e-aacc-c74f15df3ec2",
      "name": "LLM 聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "notes": "You can choose other LLM chat model",
      "position": [
        -60,
        -20
      ],
      "parameters": {
        "model": "google/gemini-2.5-flash",
        "options": {
          "temperature": 0.3,
          "responseFormat": "text"
        }
      },
      "credentials": {
        "openRouterApi": {
          "id": "cxxykvBVJ4BwAWb8",
          "name": "openrouter nimblio"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e4b8e1da-e960-4774-8419-0ffce5df9b3f",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2720,
        40
      ],
      "parameters": {
        "width": 300,
        "height": 460,
        "content": "## 设置"
      },
      "typeVersion": 1
    },
    {
      "id": "472a0cbb-2b01-48c1-8472-8b0962269a80",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2220,
        220
      ],
      "parameters": {
        "width": 1060,
        "height": 560,
        "content": "## 循环为 RSS 记录添加源名称"
      },
      "typeVersion": 1
    },
    {
      "id": "94ead111-4efe-459d-9053-3ff7714d5b98",
      "name": "工作流结束",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1120,
        -460
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5e470cd5-23c9-4866-a18c-694bf1c021a9",
      "name": "获取网页 HTML 内容",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -660,
        -200
      ],
      "parameters": {
        "url": "={{ $('Loop Over Rss Elements').item.json.link }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "text"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8bc1cad5-fbbc-43fa-b41f-e668bf9bd8f8",
      "name": "提取 HTML 中的正文内容",
      "type": "n8n-nodes-base.html",
      "notes": "We need only body without images",
      "position": [
        -460,
        -200
      ],
      "parameters": {
        "options": {
          "trimValues": true,
          "cleanUpText": true
        },
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "data",
              "cssSelector": "body",
              "returnValue": "html"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "68bb881d-8c0c-4c21-9fab-237bcc42f76e",
      "name": "便签 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1080,
        300
      ],
      "parameters": {
        "color": 4,
        "width": 760,
        "height": 280,
        "content": "## Google Sheets 列"
      },
      "typeVersion": 1
    },
    {
      "id": "396e077e-aba2-4b89-bb0b-7aece91b924b",
      "name": "便签 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3840,
        -540
      ],
      "parameters": {
        "width": 700,
        "height": 1680,
        "content": "# 使用 AI 摘要监控 RSS 源到 Google Sheets"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "e4722701-47f2-4a88-9492-6405cc67cab8",
  "connections": {
    "Read RSS": {
      "main": [
        [
          {
            "node": "Combine Rss with source name",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Settings": {
      "main": [
        [
          {
            "node": "Get RSS Feed List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Output": {
      "main": [
        [
          {
            "node": "Append Aummary to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Summarize Content",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Filter Last X Days",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Read RSS",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Settings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get RSS Feed List": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Summarize Content": {
      "main": [
        [
          {
            "node": "Format Output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Last X Days": {
      "main": [
        [
          {
            "node": "Loop Over Rss Elements",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Rss Elements": {
      "main": [
        [
          {
            "node": "End of worfklow",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Row for URL is in Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check If Article Exists": {
      "main": [
        [
          {
            "node": "Get Webpage HTML Content",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Rss Elements",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert HTML to Markdown": {
      "main": [
        [
          {
            "node": "Summarize Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Webpage HTML Content": {
      "main": [
        [
          {
            "node": "Extract Body Content in HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combine Rss with source name": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Body Content in HTML": {
      "main": [
        [
          {
            "node": "Convert HTML to Markdown",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Row for URL is in Sheets": {
      "main": [
        [
          {
            "node": "Check If Article Exists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append Aummary to Google Sheets": {
      "main": [
        [
          {
            "node": "Loop Over Rss Elements",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "Settings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 市场调研, AI 摘要总结

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量23
分类2
节点类型15
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
外部链接
在 n8n.io 查看

分享此工作流