Données tendance GitHub vers Supabase (quotidien, hebdomadaire, mensuel)

Intermédiaire

Ceci est unEngineering, Multimodal AIworkflow d'automatisation du domainecontenant 12 nœuds.Utilise principalement des nœuds comme Set, SupabaseTool, Agent, ScheduleTrigger, LmChatOpenAi. Automatisation de la collecte des données tendance GitHub avec FireCrawl, GPT et Supabase

Prérequis
  • URL et Clé API Supabase
  • Clé API OpenAI
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "4WG3MooFcMpSGdlq",
  "meta": {
    "instanceId": "4dc97d9369798c1d4aa77b1cd537e868761188a85f69db17f36f47212fb2a168",
    "templateCredsSetupCompleted": true
  },
  "name": "GitHub Trending to Supabase (Daily, Weekly, Monthly)",
  "tags": [],
  "nodes": [
    {
      "id": "b758abe6-6889-4723-91bb-3140b3b4c5fb",
      "name": "Agent IA",
      "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": "Créer une ligne dans 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": "quotidien",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -800,
        320
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "40691357-cc3a-4394-a7f7-532f40b351d9",
      "name": "hebdomadaire",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -800,
        512
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7e66eea9-6840-4620-8fd4-81cd34be19c4",
      "name": "mensuel",
      "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": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        416
      ],
      "parameters": {
        "width": 672,
        "height": 400,
        "content": "# Run below sql to create table in supabase:  \n```sql\nCREATE TABLE public.githubtrending (\n  id bigint GENERATED ALWAYS AS IDENTITY NOT NULL,\n  created_at timestamp with time zone NOT NULL DEFAULT now(),\n  data_date date DEFAULT now(),\n  url text,\n  project_id text,\n  project_desc text,\n  code_language text,\n  stars bigint DEFAULT '0'::bigint,\n  type text,\n  CONSTRAINT githubtrending_pkey PRIMARY KEY (id)\n);\n```"
      },
      "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": {
    "733f7a6a-c56e-46ed-96cf-cc368859c954": {
      "main": [
        [
          {
            "node": "ac379357-4ae9-4617-9fd5-9c5d36c1a4b5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "69dc9a35-d23f-4858-ade6-625a15b4b189": {
      "main": [
        [
          {
            "node": "ac379357-4ae9-4617-9fd5-9c5d36c1a4b5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bca85759-c41d-43c7-9eb8-11e02ddba632": {
      "main": [
        [
          {
            "node": "ac379357-4ae9-4617-9fd5-9c5d36c1a4b5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ac379357-4ae9-4617-9fd5-9c5d36c1a4b5": {
      "main": [
        [
          {
            "node": "0145707f-6da7-4771-bf26-9226ee11d668",
            "type": "main",
            "index": 0
          },
          {
            "node": "b758abe6-6889-4723-91bb-3140b3b4c5fb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0de487de-b268-43c3-83ef-96b5bb931988": {
      "main": [
        [
          {
            "node": "733f7a6a-c56e-46ed-96cf-cc368859c954",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "40691357-cc3a-4394-a7f7-532f40b351d9": {
      "main": [
        [
          {
            "node": "69dc9a35-d23f-4858-ade6-625a15b4b189",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7e66eea9-6840-4620-8fd4-81cd34be19c4": {
      "main": [
        [
          {
            "node": "bca85759-c41d-43c7-9eb8-11e02ddba632",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b758abe6-6889-4723-91bb-3140b3b4c5fb": {
      "main": [
        []
      ]
    },
    "0145707f-6da7-4771-bf26-9226ee11d668": {
      "main": [
        [
          {
            "node": "b758abe6-6889-4723-91bb-3140b3b4c5fb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "57f0b1a1-1939-4f2a-8261-68f56a918462": {
      "ai_languageModel": [
        [
          {
            "node": "b758abe6-6889-4723-91bb-3140b3b4c5fb",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "37cb081c-e9d4-43b9-930e-345652284f64": {
      "ai_tool": [
        [
          {
            "node": "b758abe6-6889-4723-91bb-3140b3b4c5fb",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - Ingénierie, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds12
Catégorie2
Types de nœuds7
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Auteur
Cai Yongji

Cai Yongji

@caiyongji

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

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34