8
n8n 中文网amn8n.com

源发现 - 自动搜索更及时的信息源

高级

这是一个Market Research, AI Summarization领域的自动化工作流,包含 68 个节点。主要使用 Set, Code, Limit, Merge, Filter 等节点。 多平台源发现系统,集成 SerpAPI、DuckDuckGo、GitHub、Reddit 和 Bluesky

前置要求
  • 可能需要目标 API 的认证凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "l3q1m2TZDbwizwGn",
  "meta": {
    "instanceId": "c8661626eeda758e004fa6cdc30e89de83810c1ff0923b0bb91a200abd0100f3",
    "templateCredsSetupCompleted": true
  },
  "name": "源发现 - 自动搜索更及时的信息源",
  "tags": [
    {
      "id": "7Ebg06QToXQ2UrOO",
      "name": "WHITE LABEL",
      "createdAt": "2025-07-17T18:04:33.197Z",
      "updatedAt": "2025-07-17T18:04:33.197Z"
    },
    {
      "id": "JK3I68rY6cIlUP5Z",
      "name": "V1.0",
      "createdAt": "2025-06-20T18:01:10.400Z",
      "updatedAt": "2025-06-20T18:01:10.400Z"
    },
    {
      "id": "QJOKfP6e64mUtezh",
      "name": "Source Discovery",
      "createdAt": "2025-07-11T23:43:47.597Z",
      "updatedAt": "2025-08-06T20:59:12.981Z"
    },
    {
      "id": "nEQ2nHALSQN4jgJ0",
      "name": "Free",
      "createdAt": "2025-06-25T21:55:38.353Z",
      "updatedAt": "2025-06-25T21:55:38.353Z"
    }
  ],
  "nodes": [
    {
      "id": "595e8cac-a963-4776-9d8d-e0fda9fadc73",
      "name": "便签17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        -288
      ],
      "parameters": {
        "color": 5,
        "width": 1580,
        "height": 760,
        "content": "## 使用 DuckDuckGo 和 Bluesky 进行搜索查询"
      },
      "typeVersion": 1
    },
    {
      "id": "5d5fb335-068e-4262-8242-aedf5fd3d211",
      "name": "过滤字段",
      "type": "n8n-nodes-base.set",
      "position": [
        336,
        48
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "e2ffe594-180d-4e1d-b869-8056ac67015d",
              "name": "title",
              "type": "string",
              "value": "={{ $json.title }}"
            },
            {
              "id": "87c5a171-9ab9-4043-a72a-32aec218fe63",
              "name": "pubDate",
              "type": "string",
              "value": "={{ $json.date }}"
            },
            {
              "id": "978b05c9-6e6b-4a18-bc06-4de785b19413",
              "name": "link",
              "type": "string",
              "value": "={{ $json.url }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "52a92dde-ed73-4740-be96-1b09ba03c328",
      "name": "DuckDuckGo",
      "type": "n8n-nodes-duckduckgo-search.duckDuckGo",
      "position": [
        128,
        48
      ],
      "parameters": {
        "newsQuery": "={{ $json.search_themes }}",
        "operation": "searchNews",
        "cacheSettings": {
          "cacheTTL": 300,
          "enableCache": true
        },
        "proxySettings": {},
        "newsSearchOptions": {
          "region": "wt-wt",
          "maxResults": 100,
          "safeSearch": 0
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f138753e-87a4-488f-b76c-0fca466b4402",
      "name": "遍历项目(搜索)",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -32,
        -128
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "1c6dd5b2-5fde-4dd6-a0ce-9343a50dc51f",
      "name": "拆分输出",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -848,
        720
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "search_themes"
      },
      "typeVersion": 1
    },
    {
      "id": "5440ef06-7711-47cc-a758-24391be05585",
      "name": "Bluesky 搜索",
      "type": "n8n-nodes-bluesky-enhanced.bluesky",
      "position": [
        128,
        208
      ],
      "parameters": {
        "q": "={{ $json.search_themes }}",
        "limit": 10,
        "resource": "search",
        "operation": "searchPosts"
      },
      "credentials": {
        "blueskyApi": {
          "id": "extLnOXNko6WCgUR",
          "name": "Blank Bluesky Credentials"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "38c87790-9d0c-43eb-8f83-576bf2d5bd62",
      "name": "编辑字段(Bluesky)",
      "type": "n8n-nodes-base.set",
      "position": [
        304,
        208
      ],
      "parameters": {
        "options": {
          "ignoreConversionErrors": true
        },
        "assignments": {
          "assignments": [
            {
              "id": "17a6bee3-c6f1-4e27-b170-31557516a29f",
              "name": "title",
              "type": "string",
              "value": "=Bluesky Search - {{ $json.author.displayName }} - {{ $json.embed.external.title }}"
            },
            {
              "id": "e0ee92e7-0dca-4b15-9570-4f0c599872b7",
              "name": "pubDate",
              "type": "string",
              "value": "={{ $json.indexedAt }}"
            },
            {
              "id": "f9f1da0c-79fe-4c59-9eca-9f058bf7128c",
              "name": "link",
              "type": "string",
              "value": "={{ $json.embed.external.uri }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4fb13374-aa77-4d91-a1a3-c17259f4f515",
      "name": "移除空链接元素",
      "type": "n8n-nodes-base.filter",
      "position": [
        480,
        240
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "30d4f694-9378-42b4-b1d5-cbc38fb3e7fe",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.link }}",
              "rightValue": "={{ $today.minus({ days: 0 }) }}"
            }
          ]
        }
      },
      "typeVersion": 2.2,
      "alwaysOutputData": true
    },
    {
      "id": "0a5c2591-6bca-4d42-9810-522c0457cc3a",
      "name": "合并1",
      "type": "n8n-nodes-base.merge",
      "position": [
        704,
        256
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "8c29882d-1613-4187-9bfc-f14e8a15bed2",
      "name": "Google_news 搜索",
      "type": "n8n-nodes-serpapi.serpApi",
      "position": [
        240,
        864
      ],
      "parameters": {
        "q": "={{ $json.search_themes }}",
        "operation": "google_news",
        "requestOptions": {},
        "additionalFields": {}
      },
      "credentials": {
        "serpApi": {
          "id": "VsA9ILHrt3wF6xP8",
          "name": "Blank SerpApi account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "eeb3a274-3690-4f26-94fd-99c6cc899d5e",
      "name": "循环过滤字段",
      "type": "n8n-nodes-base.set",
      "position": [
        816,
        864
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "e2ffe594-180d-4e1d-b869-8056ac67015d",
              "name": "title",
              "type": "string",
              "value": "={{ $json.title }}"
            },
            {
              "id": "87c5a171-9ab9-4043-a72a-32aec218fe63",
              "name": "pubDate",
              "type": "string",
              "value": "={{ $json.date }}"
            },
            {
              "id": "978b05c9-6e6b-4a18-bc06-4de785b19413",
              "name": "link",
              "type": "string",
              "value": "={{ $json.link }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "283558c4-2779-4b3b-94b7-48f886a200cb",
      "name": "拆分新闻结果",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        432,
        864
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "news_results"
      },
      "typeVersion": 1
    },
    {
      "id": "275508f1-ef16-40e3-a67f-5f568f65a5fa",
      "name": "便签27",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        512
      ],
      "parameters": {
        "color": 5,
        "width": 1580,
        "height": 720,
        "content": "## 使用 SerpAPI 进行搜索查询"
      },
      "typeVersion": 1
    },
    {
      "id": "3686c81a-a017-4f77-90a4-11c0b706bdeb",
      "name": "调度",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -2848,
        992
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1,
                2,
                5,
                3,
                4
              ],
              "triggerAtHour": 12
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3e18e79b-47f4-4fb4-8a73-a83243cb36ab",
      "name": "便签12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2016,
        -368
      ],
      "parameters": {
        "color": 7,
        "width": 1060,
        "height": 796,
        "content": "## 源发现 - 自动搜索更及时的信息源"
      },
      "typeVersion": 1
    },
    {
      "id": "8e9216fd-ef99-454a-b51c-2f1907e387ec",
      "name": "便签30",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1200,
        -304
      ],
      "parameters": {
        "color": 7,
        "width": 150,
        "content": "![Hybroht](https://hybroht.com/assets/favicon.png \"Hybroht Logo\")"
      },
      "typeVersion": 1
    },
    {
      "id": "0897ce2a-b17a-4123-8a61-634ccd48731f",
      "name": "合并",
      "type": "n8n-nodes-base.merge",
      "position": [
        1728,
        768
      ],
      "parameters": {
        "numberInputs": 4
      },
      "typeVersion": 3.1
    },
    {
      "id": "75edbbce-fa43-49b8-b284-62e84c2b567d",
      "name": "移除重复项",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        2240,
        784
      ],
      "parameters": {
        "compare": "allFieldsExcept",
        "options": {},
        "fieldsToExclude": "pubDate"
      },
      "typeVersion": 2
    },
    {
      "id": "5d35a167-b63f-4469-8cd9-47a4b5474525",
      "name": "移除空值",
      "type": "n8n-nodes-base.filter",
      "position": [
        2016,
        784
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "2df9ef75-ea55-4e5b-a78d-e37de85fe8ca",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.link }}",
              "rightValue": ""
            },
            {
              "id": "f74c0863-d9c3-465a-b6e9-f5616d25dec2",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.title }}",
              "rightValue": "^(?:\\s*\\S+\\s+){0,2}\\s*\\S+\\s*$"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "389bf473-c8a0-46b9-a63d-e3fd9544a9de",
      "name": "移除现有内容",
      "type": "n8n-nodes-base.filter",
      "position": [
        2720,
        784
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "30d4f694-9378-42b4-b1d5-cbc38fb3e7fe",
              "operator": {
                "type": "string",
                "operation": "notContains"
              },
              "leftValue": "={{ $('Configure Workflow Args (Prep)').item.json.existing_sources }}",
              "rightValue": "={{ $json.baseUrl }}"
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "5a2b70aa-8e85-41e9-98b1-d075af479380",
      "name": "获取基础 URL",
      "type": "n8n-nodes-base.code",
      "position": [
        2480,
        784
      ],
      "parameters": {
        "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfunction getBaseUrl(url) {\n    const protocolEndIndex = url.indexOf(\"://\") + 3; // Find the end of the protocol\n    const pathStartIndex = url.indexOf(\"/\", protocolEndIndex); // Find the start of the path\n    return pathStartIndex === -1 ? url : url.substring(0, pathStartIndex); // Return base URL\n}\n\nfor (const item of $input.all()) {\n  const inputUrl = item.json.link;\n  const baseUrl = getBaseUrl(inputUrl);\n  item.json.baseUrl = baseUrl;\n}\n\nreturn $input.all();"
      },
      "typeVersion": 2
    },
    {
      "id": "290c077d-d5ff-40dd-9dae-8ad48a713d3d",
      "name": "保留剩余来源",
      "type": "n8n-nodes-base.set",
      "notes": "If you don't want to use the Global Variables Node, you can use this one as a replacement.",
      "position": [
        2960,
        784
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "696da287-5535-4487-b69f-65d01bffeaa8",
              "name": "baseUrl",
              "type": "string",
              "value": "={{ $json.baseUrl }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9cd4fa0d-493c-4b54-8467-e4ad05b31bab",
      "name": "移除重复 URL",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        3184,
        784
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "id": "029b2480-e2c7-4dd5-835e-6e7c65c9c4c9",
      "name": "配置工作流参数",
      "type": "n8n-nodes-globals.globalConstants",
      "notes": "This is useful to quickly setting variables for new workflow variants. Additionally:\n- It helps avoid leaving important information in a node when creating new templates to share.\n- Easier to add new variables.",
      "position": [
        -2608,
        992
      ],
      "parameters": {},
      "credentials": {
        "globalConstantsApi": {
          "id": "IL1NFgjnFjgv1gvg",
          "name": "Global Constants for News Curator - V3"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a450289d-d558-4494-b356-6bd3a38f14d1",
      "name": "编辑字段",
      "type": "n8n-nodes-base.set",
      "position": [
        -2416,
        992
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "22f11d71-307d-4c6a-9594-7ffbfaac5ccb",
              "name": "rss_feeds",
              "type": "array",
              "value": "={{ $json.constants.rss_feeds }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "1ce72ec2-d1e6-485b-9e12-df1f68f73e81",
      "name": "聚合",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        -1584,
        992
      ],
      "parameters": {
        "options": {
          "mergeLists": false
        },
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "renameField": true,
              "outputFieldName": "existing_sources_to_add",
              "fieldToAggregate": "baseUrl"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8845c095-5f3c-424b-8ff7-a7cd293d80a9",
      "name": "获取来源的基础 URL",
      "type": "n8n-nodes-base.code",
      "position": [
        -2016,
        992
      ],
      "parameters": {
        "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfunction getBaseUrl(url) {\n    const protocolEndIndex = url.indexOf(\"://\") + 3; // Find the end of the protocol\n    const pathStartIndex = url.indexOf(\"/\", protocolEndIndex); // Find the start of the path\n    return pathStartIndex === -1 ? url : url.substring(0, pathStartIndex); // Return base URL\n}\n\nfor (const item of $input.all()) {\n  const inputUrl = item.json.link;\n  const baseUrl = getBaseUrl(inputUrl);\n  item.json.baseUrl = baseUrl;\n}\n\nreturn $input.all();"
      },
      "typeVersion": 2
    },
    {
      "id": "24d32321-760c-4ad3-b3eb-ab9cdc64f5c1",
      "name": "拆分订阅源列表",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -2224,
        992
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "rss_feeds"
      },
      "typeVersion": 1
    },
    {
      "id": "095564ab-1b05-42d7-9de7-d912b10a9894",
      "name": "移除重复来源",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        -1792,
        992
      ],
      "parameters": {
        "compare": "selectedFields",
        "options": {},
        "fieldsToCompare": "baseUrl"
      },
      "typeVersion": 2
    },
    {
      "id": "917060f7-0fbd-490e-bfbd-1194161e924d",
      "name": "当点击\"执行工作流\"时",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1680,
        576
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "29b46bc4-0a18-4e7a-99c3-3fdf5a3fde7c",
      "name": "配置工作流参数(准备)",
      "type": "n8n-nodes-base.set",
      "notes": "If you don't want to use the Global Variables Node, you can use this one as a replacement.",
      "position": [
        -1072,
        720
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "696da287-5535-4487-b69f-65d01bffeaa8",
              "name": "search_themes",
              "type": "array",
              "value": "={{ $json.search_themes }}"
            },
            {
              "id": "f72affa2-1b85-4207-b245-fee0e47cd526",
              "name": "existing_sources",
              "type": "array",
              "value": "={{ $json.existing_sources }}"
            },
            {
              "id": "94eb38bc-2861-4292-96cd-e40c2661c501",
              "name": "sources_to_ignore",
              "type": "array",
              "value": "={{ $json.sources_to_ignore }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "fa48b9d1-79af-4fc8-b7e3-d9654f03e4c3",
      "name": "配置工作流参数(手动)",
      "type": "n8n-nodes-base.set",
      "notes": "If you don't want to use the Global Variables Node, you can use this one as a replacement.",
      "position": [
        -1424,
        576
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "696da287-5535-4487-b69f-65d01bffeaa8",
              "name": "search_themes",
              "type": "array",
              "value": "=[\n\"technology\"\n]"
            },
            {
              "id": "f72affa2-1b85-4207-b245-fee0e47cd526",
              "name": "existing_sources",
              "type": "array",
              "value": "=[]"
            },
            {
              "id": "0867ad11-9a76-4398-a582-455c1ddf92b2",
              "name": "sources_to_ignore",
              "type": "array",
              "value": "[]"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "122a5da7-bdf6-4473-8e18-31fb7dbc82df",
      "name": "添加其他字段",
      "type": "n8n-nodes-base.set",
      "notes": "If you don't want to use the Global Variables Node, you can use this one as a replacement.",
      "position": [
        -1360,
        992
      ],
      "parameters": {
        "options": {
          "ignoreConversionErrors": false
        },
        "assignments": {
          "assignments": [
            {
              "id": "696da287-5535-4487-b69f-65d01bffeaa8",
              "name": "search_themes",
              "type": "array",
              "value": "={{ $('Configure Workflow Args').item.json.constants.search_themes }}"
            },
            {
              "id": "f72affa2-1b85-4207-b245-fee0e47cd526",
              "name": "existing_sources",
              "type": "array",
              "value": "={{ $json.existing_sources_to_add.concat($('Configure Workflow Args').item.json.constants.existing_sources || []) }}"
            },
            {
              "id": "002f4fbe-810f-4384-9552-3a5eaac39ce1",
              "name": "sources_to_ignore",
              "type": "array",
              "value": "={{ $('Configure Workflow Args').item.json.constants.sources_to_ignore  || []  }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "1b3d4954-d6f3-426a-8c69-6561d711b3ad",
      "name": "HTTP 请求",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -448,
        2256
      ],
      "parameters": {
        "url": "https://api.github.com/search/repositories",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          },
          "pagination": {
            "pagination": {
              "parameters": {
                "parameters": [
                  {
                    "name": "q",
                    "value": "=awesome links for {{ $json.search_themes }}"
                  },
                  {
                    "name": "per_page",
                    "value": "10"
                  },
                  {
                    "name": "page",
                    "value": "0"
                  }
                ]
              },
              "maxRequests": 1,
              "requestInterval": 1000,
              "limitPagesFetched": true
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8cf3f2e7-44e6-4362-ae80-434c95d7b83c",
      "name": "抓取 README",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        272,
        2256
      ],
      "parameters": {
        "url": "={{ $json.body.download_url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "6a4c9a07-ab2b-4e30-a97b-c1b7a7d75e15",
      "name": "拆分仓库列表",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -256,
        2480
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "body.items"
      },
      "typeVersion": 1
    },
    {
      "id": "785dc6c0-8c80-49a4-a5a3-024db6b4a52d",
      "name": "HTTP 请求 README",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        80,
        2464
      ],
      "parameters": {
        "url": "={{ $json.readme_url }}",
        "options": {
          "timeout": 10000,
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "id": "34cc92b1-32f1-499f-92bb-6c27c3fd08cc",
      "name": "添加 README 字段",
      "type": "n8n-nodes-base.set",
      "notes": "If you don't want to use the Global Variables Node, you can use this one as a replacement.",
      "position": [
        -80,
        2256
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "eeb1567e-1d5b-4939-bdf6-7470bac068e0",
              "name": "readme_url",
              "type": "string",
              "value": "={{ $json.url }}/readme"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "5e849da5-3c8b-4922-803e-679eea498f58",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        2032
      ],
      "parameters": {
        "color": 5,
        "width": 1996,
        "height": 720,
        "content": "## 使用 Github 进行搜索查询(带链接的仓库)"
      },
      "typeVersion": 1
    },
    {
      "id": "5f29ba9d-b1ee-439d-91ad-c7ce7da11731",
      "name": "移除忽略的来源",
      "type": "n8n-nodes-base.filter",
      "position": [
        3408,
        784
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "30d4f694-9378-42b4-b1d5-cbc38fb3e7fe",
              "operator": {
                "type": "string",
                "operation": "notContains"
              },
              "leftValue": "={{ $('Configure Workflow Args (Prep)').item.json.sources_to_ignore }}",
              "rightValue": "={{ $json.baseUrl }}"
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "be4e1de2-c8e3-4565-a6a1-355617aa9705",
      "name": "获取 Subreddit 列表",
      "type": "n8n-nodes-base.reddit",
      "position": [
        -432,
        1488
      ],
      "parameters": {
        "limit": 1,
        "filters": {
          "keyword": "={{ $json.search_themes }}",
          "trending": false
        },
        "resource": "subreddit",
        "operation": "getAll"
      },
      "typeVersion": 1
    },
    {
      "id": "fa4271b2-8117-470b-bc4a-34f2deaecebb",
      "name": "RSS 读取",
      "type": "n8n-nodes-base.rssFeedRead",
      "onError": "continueErrorOutput",
      "position": [
        -16,
        1648
      ],
      "parameters": {
        "url": "={{ $json.reddit_rss }}",
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "48a46aef-477c-42c4-862b-90bec4c738f4",
      "name": "准备 Reddit RSS",
      "type": "n8n-nodes-base.set",
      "notes": "If you don't want to use the Global Variables Node, you can use this one as a replacement.",
      "position": [
        -224,
        1648
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "eeb1567e-1d5b-4939-bdf6-7470bac068e0",
              "name": "reddit_rss",
              "type": "string",
              "value": "=https://www.reddit.com/r/{{ $json.name }}/.rss"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "af47dcec-2aa6-4af5-8bcb-a8e3d99f4c42",
      "name": "从帖子中抓取链接",
      "type": "n8n-nodes-base.code",
      "position": [
        160,
        1520
      ],
      "parameters": {
        "jsCode": "function extractLinks(text) {\n    const urlPattern = /https?:\\/\\/[^\\s\"'>]+/g; // Regular expression to match URLs\n    return text.match(urlPattern) || []; // Return an array of matched URLs or an empty array\n}\n\n// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n  const inputString = item.json.content;\n  const links = extractLinks(inputString);\n  item.json.sources = links;\n}\n\nreturn $input.all();"
      },
      "typeVersion": 2
    },
    {
      "id": "cefb0d33-79fe-4275-8e0d-d96da2b1c82d",
      "name": "获取 Reddit 来源的基础 URL",
      "type": "n8n-nodes-base.code",
      "position": [
        528,
        1520
      ],
      "parameters": {
        "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfunction getBaseUrl(url) {\n    const protocolEndIndex = url.indexOf(\"://\") + 3; // Find the end of the protocol\n    const pathStartIndex = url.indexOf(\"/\", protocolEndIndex); // Find the start of the path\n    return pathStartIndex === -1 ? url : url.substring(0, pathStartIndex); // Return base URL\n}\n\nfor (const item of $input.all()) {\n  const inputUrl = item.json.sources;\n  const baseUrl = getBaseUrl(inputUrl);\n  item.json.baseUrl = baseUrl;\n}\n\nreturn $input.all();"
      },
      "typeVersion": 2
    },
    {
      "id": "a22a8928-c9a6-47b0-88ba-602f3847008e",
      "name": "移除重复的 Reddit 来源",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        720,
        1520
      ],
      "parameters": {
        "compare": "selectedFields",
        "options": {},
        "fieldsToCompare": "baseUrl"
      },
      "typeVersion": 2
    },
    {
      "id": "c4c16192-2b42-446e-b2d4-0dbb6884c880",
      "name": "准备 Reddit 来源结果",
      "type": "n8n-nodes-base.set",
      "notes": "If you don't want to use the Global Variables Node, you can use this one as a replacement.",
      "position": [
        944,
        1360
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "eeb1567e-1d5b-4939-bdf6-7470bac068e0",
              "name": "title",
              "type": "string",
              "value": "={{ $json.sources }}"
            },
            {
              "id": "c7fa4b82-1c6c-4175-a95a-fb7331dc0ed3",
              "name": "pubDate",
              "type": "string",
              "value": "={{ $today }}"
            },
            {
              "id": "34d8eb5d-01d0-477c-bda0-8bd63dd262ec",
              "name": "link",
              "type": "string",
              "value": "={{ $json.baseUrl }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "0fe69cac-6370-49fa-a33c-2caa51977495",
      "name": "便签28",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        1264
      ],
      "parameters": {
        "color": 5,
        "width": 1580,
        "height": 720,
        "content": "## 使用 Reddit 进行搜索查询"
      },
      "typeVersion": 1
    },
    {
      "id": "5e0beb0f-120d-41f8-9eb2-83fc49a2f68a",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1600,
        400
      ],
      "parameters": {
        "color": 5,
        "width": 2000,
        "height": 816,
        "content": "## 现有和不良来源的过滤步骤"
      },
      "typeVersion": 1
    },
    {
      "id": "947716d4-6731-42ae-b1f5-79caf1a2f34d",
      "name": "Mistral Cloud Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatMistralCloud",
      "position": [
        4448,
        1056
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "mistralCloudApi": {
          "id": "i9fED0hhcQnPZBi6",
          "name": "Blank Account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c3677e5d-5e14-47c6-96f0-f496787ed0d1",
      "name": "限制",
      "type": "n8n-nodes-base.limit",
      "position": [
        3744,
        784
      ],
      "parameters": {
        "maxItems": 36
      },
      "typeVersion": 1
    },
    {
      "id": "ccbc3f13-20a9-465c-97a4-e607a80049de",
      "name": "HTTP 请求获取 URL 内容",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        3968,
        784
      ],
      "parameters": {
        "url": "={{ $json.baseUrl }}",
        "options": {
          "timeout": 2100
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "21479b32-a984-48cc-93ae-301667edff76",
      "name": "移除错误",
      "type": "n8n-nodes-base.filter",
      "position": [
        464,
        2448
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "30d4f694-9378-42b4-b1d5-cbc38fb3e7fe",
              "operator": {
                "type": "string",
                "operation": "notExists",
                "singleValue": true
              },
              "leftValue": "={{ $json.error }}",
              "rightValue": "={{ $json.baseUrl }}"
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "f837603e-a1d6-4785-9a22-1ab9f3a64721",
      "name": "从 README 抓取链接",
      "type": "n8n-nodes-base.code",
      "position": [
        656,
        2256
      ],
      "parameters": {
        "jsCode": "function extractLinks(text) {\n    const urlPattern = /https?:\\/\\/[^\\s\"'>)(]+/g; // Regular expression to match URLs\n    return text.match(urlPattern) || []; // Return an array of matched URLs or an empty array\n}\n\n// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n  const inputString = item.json.data;\n  const links = extractLinks(inputString);\n  item.json.sources = links;\n}\n\nreturn $input.all();"
      },
      "typeVersion": 2
    },
    {
      "id": "b17bdf65-36cb-4df3-802e-7af4e2316e6c",
      "name": "拆分来源",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        352,
        1520
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "sources"
      },
      "typeVersion": 1
    },
    {
      "id": "45b44c9a-e28b-42d6-a1b6-6cb34461408c",
      "name": "拆分 Github 来源",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        848,
        2448
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "sources"
      },
      "typeVersion": 1
    },
    {
      "id": "9f31d625-6952-4bfc-8e9f-3a014ddb7dce",
      "name": "获取 Github 来源的基础 URL",
      "type": "n8n-nodes-base.code",
      "position": [
        1040,
        2256
      ],
      "parameters": {
        "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfunction getBaseUrl(url) {\n    const protocolEndIndex = url.indexOf(\"://\") + 3; // Find the end of the protocol\n    const pathStartIndex = url.indexOf(\"/\", protocolEndIndex); // Find the start of the path\n    return pathStartIndex === -1 ? url : url.substring(0, pathStartIndex); // Return base URL\n}\n\nfor (const item of $input.all()) {\n  const inputUrl = item.json.sources;\n  const baseUrl = getBaseUrl(inputUrl);\n  item.json.baseUrl = baseUrl;\n}\n\nreturn $input.all();"
      },
      "typeVersion": 2
    },
    {
      "id": "38a532cf-c6ae-4294-9f44-67c9bc90db0d",
      "name": "准备 Github 来源结果",
      "type": "n8n-nodes-base.set",
      "notes": "If you don't want to use the Global Variables Node, you can use this one as a replacement.",
      "position": [
        1264,
        2144
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "eeb1567e-1d5b-4939-bdf6-7470bac068e0",
              "name": "title",
              "type": "string",
              "value": "={{ $json.sources }}"
            },
            {
              "id": "c7fa4b82-1c6c-4175-a95a-fb7331dc0ed3",
              "name": "pubDate",
              "type": "string",
              "value": "={{ $today }}"
            },
            {
              "id": "34d8eb5d-01d0-477c-bda0-8bd63dd262ec",
              "name": "link",
              "type": "string",
              "value": "={{ $json.baseUrl }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "cac06128-2f90-4999-b87e-f936412f229b",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3664,
        464
      ],
      "parameters": {
        "width": 1168,
        "height": 752,
        "content": "## 最终步骤:来源选择"
      },
      "typeVersion": 1
    },
    {
      "id": "9101a285-bf16-48ea-828e-1bae09adc92f",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2912,
        480
      ],
      "parameters": {
        "color": 4,
        "width": 2256,
        "height": 720,
        "content": "## 设置和启动"
      },
      "typeVersion": 1
    },
    {
      "id": "fc39ad99-56cf-4b2d-a7e4-bdcc858f1dfa",
      "name": "信息提取器",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "onError": "continueErrorOutput",
      "position": [
        4448,
        784
      ],
      "parameters": {
        "text": "=Check this link: {{ $('Limit').item.json.baseUrl }}.\nCheck its content: \"\"\"{{ $json.data }}\"\"\"\n\nFollow the provided JSON schema for your response.",
        "options": {
          "systemPromptTemplate": "You are an expert extraction algorithm.\nOnly extract relevant information from the text.\nIf you do not know the value of an attribute asked to extract, you may omit the attribute's value."
        },
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"data\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"url\": {\n              \"type\": \"string\",\n              \"description\": \"The link to the website.\"\n          },\n          \"relevance\": {\n              \"type\": \"boolean\",\n              \"description\": \"If the website content is relevant or not.\"\n          },\n          \"updated\": {\n              \"type\": \"string\",\n              \"description\": \"How recent are the updates in the website content.\"\n          },\n          \"accessible\": {\n              \"type\": \"boolean\",\n              \"description\": \"If it was possible to access the website content through the tool.\"\n          }\n        },\n        \"required\": [\"url\", \"relevance\", \"updated\", \"accessible\"],\n        \"additionalProperties\": false\n      }\n    }\n  },\n  \"required\": [\"data\"],\n  \"additionalProperties\": false\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "be2fae8c-8636-4afe-b874-73b4396cb1c0",
      "name": "便签38",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2656,
        672
      ],
      "parameters": {
        "color": 7,
        "width": 736,
        "height": 260,
        "content": "**配置工作流参数**:"
      },
      "typeVersion": 1
    },
    {
      "id": "e1498796-014a-4cad-9d65-01e643b30332",
      "name": "便签32",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2432,
        -368
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 796,
        "content": "### 信息 - 使用的 n8n 设置"
      },
      "typeVersion": 1
    },
    {
      "id": "cb82e1aa-c564-4083-8ad5-c5b0d6abbaf5",
      "name": "遍历项目(搜索)2",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -144,
        736
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "d54066cf-ddd5-4982-a19c-50e99ae306d2",
      "name": "移除空链接元素 2",
      "type": "n8n-nodes-base.filter",
      "notes": "This is happening to SerpAPI results for some reason.",
      "position": [
        624,
        864
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "30d4f694-9378-42b4-b1d5-cbc38fb3e7fe",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.link }}",
              "rightValue": "={{ $today.minus({ days: 0 }) }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "300f2a46-8da8-4a9b-b8e6-68ff173cbcd3",
      "name": "代码(限制字符数)",
      "type": "n8n-nodes-base.code",
      "position": [
        4208,
        784
      ],
      "parameters": {
        "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n  // Check if item.json.data exists and is a string\n  if (item.json.data && typeof item.json.data === 'string') {\n    item.json.data = item.json.data.substring(0, 1500);\n  } else {\n    // Optionally, you can set a default value or handle the case where data is undefined\n    item.json.data = ''; // or any default value you prefer\n  }\n}\n\nreturn $input.all();"
      },
      "typeVersion": 2
    },
    {
      "id": "dc195b6c-65f6-4c32-9ccb-63562b8312a0",
      "name": "便签31",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2112,
        1424
      ],
      "parameters": {
        "color": 3,
        "width": 680,
        "height": 528,
        "content": "## 工作流参数示例"
      },
      "typeVersion": 1
    },
    {
      "id": "79dd95d9-7890-4aa5-b1d6-2ae8294fb391",
      "name": "便签7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1120,
        112
      ],
      "parameters": {
        "color": 7,
        "width": 440,
        "height": 344,
        "content": "### 备注"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {
    "Schedule": [
      {
        "json": {
          "Hour": "14",
          "Year": "2025",
          "Month": "August",
          "Minute": "38",
          "Second": "15",
          "Timezone": "America/New_York (UTC-04:00)",
          "timestamp": "2025-08-06T14:38:15.844-04:00",
          "Day of week": "Wednesday",
          "Day of month": "06",
          "Readable date": "August 6th 2025, 2:38:15 pm",
          "Readable time": "2:38:15 pm"
        }
      }
    ]
  },
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "5932dc5c-2b85-401d-9e79-c8311414d0b1",
  "connections": {
    "Limit": {
      "main": [
        [
          {
            "node": "HTTP Request to get URL Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Remove Empty",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge1": {
      "main": [
        [
          {
            "node": "Loop Over Items (Search)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS Read": {
      "main": [
        [
          {
            "node": "Grab Links from Threads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule": {
      "main": [
        [
          {
            "node": "Configure Workflow Args",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Add Other Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Loop Over Items (Search)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Loop Over Items (Search) 2",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get list of Subreddits",
            "type": "main",
            "index": 0
          },
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "DuckDuckGo": {
      "main": [
        [
          {
            "node": "Filter Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Split Out Feed List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Base URL": {
      "main": [
        [
          {
            "node": "Remove Existing Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Grab READMEs": {
      "main": [
        [
          {
            "node": "Remove Errors",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Split Out Repo List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Empty": {
      "main": [
        [
          {
            "node": "Remove Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Fields": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Errors": {
      "main": [
        [
          {
            "node": "Grab Links from README",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Bluesky Search": {
      "main": [
        [
          {
            "node": "Edit Fields (Bluesky)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Other Fields": {
      "main": [
        [
          {
            "node": "Configure Workflow Args (Prep)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add README field": {
      "main": [
        [
          {
            "node": "HTTP Request the READMEs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicates": {
      "main": [
        [
          {
            "node": "Get Base URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out Sources": {
      "main": [
        [
          {
            "node": "Get Base URL of Reddit Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google_news search": {
      "main": [
        [
          {
            "node": "Split Out News Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Reddit RSS": {
      "main": [
        [
          {
            "node": "RSS Read",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out Feed List": {
      "main": [
        [
          {
            "node": "Get Base URL of Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out Repo List": {
      "main": [
        [
          {
            "node": "Add README field",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields (Bluesky)": {
      "main": [
        [
          {
            "node": "Remove Elements with Empty Links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Fields for Loop": {
      "main": [
        [
          {
            "node": "Loop Over Items (Search) 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get list of Subreddits": {
      "main": [
        [
          {
            "node": "Prepare Reddit RSS",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Grab Links from README": {
      "main": [
        [
          {
            "node": "Split Out Github Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicates Urls": {
      "main": [
        [
          {
            "node": "Remove Ignored Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Ignored Sources": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out News Results": {
      "main": [
        [
          {
            "node": "Remove Elements with Empty Links 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Configure Workflow Args": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Base URL of Sources": {
      "main": [
        [
          {
            "node": "Remove Duplicates Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Grab Links from Threads": {
      "main": [
        [
          {
            "node": "Split Out Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Leave Remaining Sources": {
      "main": [
        [
          {
            "node": "Remove Duplicates Urls",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Existing Content": {
      "main": [
        [
          {
            "node": "Leave Remaining Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request the READMEs": {
      "main": [
        [
          {
            "node": "Grab READMEs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items (Search)": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "DuckDuckGo",
            "type": "main",
            "index": 0
          },
          {
            "node": "Bluesky Search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mistral Cloud Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Information Extractor",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Split Out Github Sources": {
      "main": [
        [
          {
            "node": "Get Base URL of Github Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicates Sources": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items (Search) 2": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ],
        [
          {
            "node": "Google_news search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Github Source Results": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 3
          }
        ]
      ]
    },
    "Prepare Reddit Source Results": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Configure Workflow Args (Prep)": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Base URL of Github Sources": {
      "main": [
        [
          {
            "node": "Prepare Github Source Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Base URL of Reddit Sources": {
      "main": [
        [
          {
            "node": "Remove Duplicates Reddit Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code (Limiting number of Chars)": {
      "main": [
        [
          {
            "node": "Information Extractor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request to get URL Content": {
      "main": [
        [
          {
            "node": "Code (Limiting number of Chars)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Configure Workflow Args (Manual)": {
      "main": [
        [
          {
            "node": "Configure Workflow Args (Prep)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicates Reddit Sources": {
      "main": [
        [
          {
            "node": "Prepare Reddit Source Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Elements with Empty Links": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Remove Elements with Empty Links 2": {
      "main": [
        [
          {
            "node": "Filter Fields for Loop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "Configure Workflow Args (Manual)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

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

需要付费吗?

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

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

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

作者
Hybroht

Hybroht

@hybroht

Company dedicated to delivering tailored software solutions and data-driven experiences through effective technology. We develop workflows leveraging AI agents to maximize the productive benefits of artificial intelligence.

外部链接
在 n8n.io 查看

分享此工作流