8
n8n 中文网amn8n.com

GitHub 趋势数据至 Supabase(每日、每周、每月)

中级

这是一个Engineering, Multimodal AI领域的自动化工作流,包含 12 个节点。主要使用 Set, SupabaseTool, Agent, ScheduleTrigger, LmChatOpenAi 等节点。 使用FireCrawl、GPT和Supabase自动化GitHub趋势数据收集

前置要求
  • Supabase URL 和 API Key
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "4WG3MooFcMpSGdlq",
  "meta": {
    "instanceId": "4dc97d9369798c1d4aa77b1cd537e868761188a85f69db17f36f47212fb2a168",
    "templateCredsSetupCompleted": true
  },
  "name": "GitHub 趋势数据至 Supabase(每日、每周、每月)",
  "tags": [],
  "nodes": [
    {
      "id": "b758abe6-6889-4723-91bb-3140b3b4c5fb",
      "name": "AI 代理",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        96,
        512
      ],
      "parameters": {
        "text": "=This is a Markdown text containing multiple projects:\n---\n{{ $json.data.markdown }}\nPlease extract all project information and insert it into Supabase.\nWhen storing the data, make sure to include the field \"type\" with the value from:\n{{ $('B_ALL').item.json.type }}\n,\nwhich will be one of: \"daily\", \"weekly\", or \"monthly\".\nnow, please extract all projects out and save to supabase.",
        "options": {
          "systemMessage": "You are a professional data extraction assistant.\nYour task is to extract all key information from the provided Markdown text, which contains multiple GitHub Trending projects.\n\nPlease follow these rules strictly:\n\t1.\tIdentify all projects:\nLocate each individual project in the text. Projects are typically separated by a horizontal divider ---.\n\t2.\tFor each project, extract the following fields:\n\t•\tname: The project name in the format \"username/repository\".\n\t•\turl: The GitHub URL of the project.\n\t•\tdescription: The project description.\n\t•\tlanguage: The main programming language of the project. If not provided, use an empty string \"\".\n\t•\tstars: The total number of stars. This must be a number, and all thousand separators (such as commas) must be removed. If not provided, set to 0.\n\t3.\tOutput format:\nYour output must be a JSON array only. Each element in the array must be a JSON object representing a single project.\n\t4.\tNo extra content:\nDo not include any extra text, explanations, or Markdown syntax (e.g., ```json) before or after the JSON array.\n\nExample output format:\n[\n{\n“name”: “user1/repo1”,\n“url”: “https://github.com/user1/repo1”,\n“description”: “This is the first project.”,\n“language”: “TypeScript”,\n“stars”: 12000\n},\n{\n“name”: “user2/repo2”,\n“url”: “https://github.com/user2/repo2”,\n“description”: “This is the second project.”,\n“language”: “Python”,\n“stars”: 5432\n}\n]\n"
        },
        "promptType": "define"
      },
      "executeOnce": false,
      "notesInFlow": false,
      "typeVersion": 2.2,
      "alwaysOutputData": false
    },
    {
      "id": "37cb081c-e9d4-43b9-930e-345652284f64",
      "name": "在 Supabase 中创建行",
      "type": "n8n-nodes-base.supabaseTool",
      "position": [
        232,
        736
      ],
      "parameters": {
        "tableId": "githubtrending",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "url",
              "fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues0_Field_Value', `github project url`, 'string') }}"
            },
            {
              "fieldId": "project_id",
              "fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues1_Field_Value', `github project id name like: ubicloud / ubicloud`, 'string') }}"
            },
            {
              "fieldId": "project_desc",
              "fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues2_Field_Value', `github project description`, 'string') }}"
            },
            {
              "fieldId": "code_language",
              "fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues3_Field_Value', `project main code language`, 'string') }}"
            },
            {
              "fieldId": "stars",
              "fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues4_Field_Value', `github stars`, 'string') }}"
            },
            {
              "fieldId": "type",
              "fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues5_Field_Value', `it should be one of daily, weekly, monthly`, 'string') }}"
            }
          ]
        }
      },
      "credentials": {
        "supabaseApi": {
          "id": "z3RM2DPoUvufetDy",
          "name": "Supabase account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "57f0b1a1-1939-4f2a-8261-68f56a918462",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        104,
        736
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "cKHFKOqinjSe6CNy",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "0de487de-b268-43c3-83ef-96b5bb931988",
      "name": "每日",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -800,
        320
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "40691357-cc3a-4394-a7f7-532f40b351d9",
      "name": "每周",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -800,
        512
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7e66eea9-6840-4620-8fd4-81cd34be19c4",
      "name": "每月",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -800,
        704
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "months"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "0145707f-6da7-4771-bf26-9226ee11d668",
      "name": "firecrawl",
      "type": "@mendable/n8n-nodes-firecrawl.firecrawl",
      "position": [
        -128,
        440
      ],
      "parameters": {
        "url": "=https://github.com/trending?since={{ $json.type }}",
        "operation": "scrape",
        "useCustomBody": true,
        "requestOptions": {},
        "additionalFields": {
          "customProperties": "{\"onlyMainContent\":true,\"excludeTags\":[\".Box .Box-header\"],\"includeTags\":[\"div[data-hpc]\"]}"
        }
      },
      "credentials": {
        "firecrawlApi": {
          "id": "2DUTgKK9MedK9fng",
          "name": "Firecrawl-local"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b8c5d470-e2a4-41ca-be24-e42790c3b5f3",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        416
      ],
      "parameters": {
        "width": 672,
        "height": 400,
        "content": "# 在 Supabase 中运行以下 SQL 创建表:"
      },
      "typeVersion": 1
    },
    {
      "id": "733f7a6a-c56e-46ed-96cf-cc368859c954",
      "name": "B1",
      "type": "n8n-nodes-base.set",
      "position": [
        -576,
        320
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "64eaadea-d7f3-4702-859e-1ef5172272ae",
              "name": "type",
              "type": "string",
              "value": "daily"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "69dc9a35-d23f-4858-ade6-625a15b4b189",
      "name": "B2",
      "type": "n8n-nodes-base.set",
      "position": [
        -576,
        512
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d5d776f5-466b-4bca-a2d3-49eaa52322b1",
              "name": "type",
              "type": "string",
              "value": "weekly"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "bca85759-c41d-43c7-9eb8-11e02ddba632",
      "name": "B3",
      "type": "n8n-nodes-base.set",
      "position": [
        -576,
        704
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "9f2e7822-ca0f-4fec-b68e-a803647ee115",
              "name": "type",
              "type": "string",
              "value": "monthly"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "ac379357-4ae9-4617-9fd5-9c5d36c1a4b5",
      "name": "B_ALL",
      "type": "n8n-nodes-base.set",
      "position": [
        -352,
        512
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "8fd79ceb-392b-4265-9b54-c2fef43be6fa",
              "name": "type",
              "type": "string",
              "value": "={{ $json.type }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    }
  ],
  "active": true,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "09ca306d-3fa0-46b2-804c-f02026ec2613",
  "connections": {
    "B1": {
      "main": [
        [
          {
            "node": "B_ALL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "B2": {
      "main": [
        [
          {
            "node": "B_ALL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "B3": {
      "main": [
        [
          {
            "node": "B_ALL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "B_ALL": {
      "main": [
        [
          {
            "node": "firecrawl",
            "type": "main",
            "index": 0
          },
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "daily": {
      "main": [
        [
          {
            "node": "B1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "weekly": {
      "main": [
        [
          {
            "node": "B2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "monthly": {
      "main": [
        [
          {
            "node": "B3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        []
      ]
    },
    "firecrawl": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Create a row in Supabase": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

中级 - 工程, 多模态 AI

需要付费吗?

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

工作流信息
难度等级
中级
节点数量12
分类2
节点类型7
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Cai Yongji

Cai Yongji

@caiyongji

AI startup/ indie developer/ solo founder/ super individual/ one-person business/ Google TFUG Organizer

外部链接
在 n8n.io 查看

分享此工作流