This workflow follows the HTTP Request → RSS Feed Read recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "WkAiNewsDigest01",
"name": "\u6bcf\u9031 AI \u65b0\u805e\u6458\u8981 (Weekly AI News Digest \u00b7 \u672c\u6a5f Ollama)",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 9 * * 1"
}
]
}
},
"id": "node-schedule",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
240,
400
]
},
{
"parameters": {
"url": "https://news.google.com/rss/search?q=AI&hl=zh-TW&gl=TW&ceid=TW:zh-Hant",
"options": {}
},
"id": "node-rss-google",
"name": "RSS Google News",
"type": "n8n-nodes-base.rssFeedRead",
"typeVersion": 1.1,
"position": [
480,
280
]
},
{
"parameters": {
"url": "https://tw.news.yahoo.com/rss/",
"options": {}
},
"id": "node-rss-yahoo",
"name": "RSS Yahoo News",
"type": "n8n-nodes-base.rssFeedRead",
"typeVersion": 1.1,
"position": [
480,
520
]
},
{
"parameters": {
"mode": "append",
"numberInputs": 2
},
"id": "node-merge",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"typeVersion": 3,
"position": [
720,
400
]
},
{
"parameters": {
"jsCode": "const seen = new Set();\nconst items = [];\nfor (const it of $input.all()) {\n const j = it.json;\n const title = (j.title || '').trim();\n const link = j.link || j.url || '';\n if (!title || seen.has(title)) continue;\n seen.add(title);\n items.push({ title, link });\n if (items.length >= 15) break;\n}\nconst newsText = items.map((n, i) => (i + 1) + '. ' + n.title + ' \u2014 ' + n.link).join('\\n');\nconst prompt = '\u4f60\u662f\u4e00\u4f4d\u79d1\u6280\u65b0\u805e\u7de8\u8f2f\u3002\u4ee5\u4e0b\u662f\u672c\u9031\u591a\u5247\u65b0\u805e\u6a19\u984c\u8207\u9023\u7d50\uff0c\u8acb\u7528\u7e41\u9ad4\u4e2d\u6587\u6574\u7406\u6210\u4e00\u4efd\u300c\u6bcf\u9031 AI \u65b0\u805e\u6458\u8981\u300d\uff1a\u6311\u51fa\u6700\u91cd\u8981\u7684 5-7 \u5247\uff0c\u6bcf\u5247\u7528\u4e00\u53e5\u8a71\u8aaa\u660e\u91cd\u9ede\uff0c\u6700\u5f8c\u518d\u7d66 2 \u53e5\u6574\u9ad4\u8da8\u52e2\u7e3d\u7d50\u3002\\n\\n' + newsText;\nreturn [{ json: { count: items.length, items, newsText, prompt } }];"
},
"id": "node-prepare",
"name": "Prepare News Text",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
940,
400
]
},
{
"parameters": {
"method": "POST",
"url": "http://host.docker.internal:11434/api/chat",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({ model: 'qwen2.5:latest', messages: [ { role: 'system', content: '\u4f60\u662f\u53f0\u7063\u4eba\uff0c\u4e00\u5f8b\u4f7f\u7528\u53f0\u7063\u7e41\u9ad4\u4e2d\u6587\u8207\u53f0\u7063\u6163\u7528\u8a9e\u56de\u8986\uff0c\u7d55\u5c0d\u4e0d\u8981\u51fa\u73fe\u4efb\u4f55\u7c21\u9ad4\u5b57\u6216\u4e2d\u570b\u7528\u8a9e\u3002' }, { role: 'user', content: $json.prompt } ], stream: false }) }}",
"options": {
"timeout": 180000
}
},
"id": "node-ollama",
"name": "Summarize with Ollama",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1160,
400
]
},
{
"parameters": {
"jsCode": "const data = $input.first().json;\nlet summary = '';\ntry { summary = (data.message && data.message.content) || (data.content && data.content[0] && data.content[0].text) || data.response || ''; } catch (e) {}\nif (!summary) summary = JSON.stringify(data);\nreturn [{ json: { summary } }];"
},
"id": "node-extract",
"name": "Extract Summary",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1380,
400
]
},
{
"parameters": {
"method": "POST",
"url": "https://discord.com/api/webhooks/REPLACE_WITH_YOUR_WEBHOOK_URL",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({ content: ('\ud83d\udcf0 \u6bcf\u9031 AI \u65b0\u805e\u6458\u8981\\n\\n' + ($json.summary || '')).slice(0, 1900) }) }}",
"options": {}
},
"id": "node-discord",
"name": "Send to Discord",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1600,
400
]
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "RSS Google News",
"type": "main",
"index": 0
},
{
"node": "RSS Yahoo News",
"type": "main",
"index": 0
}
]
]
},
"RSS Google News": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"RSS Yahoo News": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Prepare News Text",
"type": "main",
"index": 0
}
]
]
},
"Prepare News Text": {
"main": [
[
{
"node": "Summarize with Ollama",
"type": "main",
"index": 0
}
]
]
},
"Summarize with Ollama": {
"main": [
[
{
"node": "Extract Summary",
"type": "main",
"index": 0
}
]
]
},
"Extract Summary": {
"main": [
[
{
"node": "Send to Discord",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"tags": []
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
每週 AI 新聞摘要 (Weekly AI News Digest · 本機 Ollama). Uses rssFeedRead, httpRequest. Scheduled trigger; 8 nodes.
Source: https://github.com/YuriCrystal/n8n-marketing-flows/blob/main/templates/01-weekly-ai-news-digest.local-ollama.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Automatically fetch, rank, and summarize the top financial stories from curated RSS feeds each day, then deliver a concise AI-written digest to Telegram and log the run to Google Sheets. Runs on a dai
Stay on top of what’s happening in your community without drowning in endless RSS feeds.
Automatically collect, analyze, and store industry news articles with intelligent filtering and dual-database storage
整理多新聞來源的熱門議題. Uses rssFeedRead, httpRequest. Scheduled trigger; 8 nodes.
把 Google 新聞整理成一篇文章. Uses rssFeedRead, httpRequest. Scheduled trigger; 6 nodes.