8
n8n 한국어amn8n.com

GeekHack 업데이터

고급

이것은Social Media, Multimodal AI분야의자동화 워크플로우로, 17개의 노드를 포함합니다.주로 If, Code, Html, Merge, Postgres 등의 노드를 사용하며. 키보드 관심 검사기: GeekHack 포럼에서 Discord 알림, PostgreSQL 사용

사전 요구사항
  • PostgreSQL 데이터베이스 연결 정보
  • 대상 API의 인증 정보가 필요할 수 있음
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "H65aZTpWNSXT6jTw",
  "meta": {
    "instanceId": "a9e6ded6f8fcea15dc87f65feb8d5f51dfa160b74d19142a373eb976456ab01b",
    "templateCredsSetupCompleted": true
  },
  "name": "geekhack updater",
  "tags": [],
  "nodes": [
    {
      "id": "520a15d4-f80e-4ac7-b1dd-2bdf7a804079",
      "name": "스케줄 트리거",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -224,
        176
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7870a6cc-71d8-4e1e-ab03-4d92323d99b0",
      "name": "관심 확인 RSS",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        0,
        32
      ],
      "parameters": {
        "url": "https://geekhack.org/index.php?action=.xml;type=rss2;board=132.0;limit=50",
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "d0583fe2-84dd-4844-8d9f-9855a10d83e5",
      "name": "공동구매 RSS",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        0,
        224
      ],
      "parameters": {
        "url": "https://geekhack.org/index.php?action=.xml;type=rss2;board=70.0;limit=50",
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "ccf58428-11e7-414a-92ae-8f308c697855",
      "name": "병합",
      "type": "n8n-nodes-base.merge",
      "position": [
        224,
        176
      ],
      "parameters": {},
      "typeVersion": 3.2,
      "alwaysOutputData": false
    },
    {
      "id": "cf94de87-5fab-47f8-a853-2b71853f8ea3",
      "name": "새 스레드 필터링",
      "type": "n8n-nodes-base.code",
      "position": [
        448,
        176
      ],
      "parameters": {
        "jsCode": "// Filter to get only new threads (not replies)\nconst items = $input.all();\nconst newThreads = [];\n\nfor (const item of items) {\n  const title = item.json.title;\n  const link = item.json.link;\n  \n  // Check if title starts with \"Re:\" \n  // This is the most reliable indicator of a reply\n  if (!title.startsWith('Re:')) {\n    \n    // Extract topic ID for tracking\n    const topicMatch = link.match(/topic=(\\d+)/);\n    if (topicMatch) {\n      item.json.topicId = topicMatch[1];\n      newThreads.push(item);\n    }\n  }\n}\n\nreturn newThreads;"
      },
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "9f5d422a-880a-4734-9780-4e73afb133cf",
      "name": "처리 여부 확인",
      "type": "n8n-nodes-base.postgres",
      "position": [
        896,
        224
      ],
      "parameters": {
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "processed_threads",
          "cachedResultName": "processed_threads"
        },
        "where": {
          "values": [
            {
              "value": "={{ $json.topicId }}",
              "column": "topic_id"
            }
          ]
        },
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "options": {},
        "operation": "select",
        "returnAll": true
      },
      "credentials": {
        "postgres": {
          "id": "0wgjNQySpuUTurBY",
          "name": "Postgres account"
        }
      },
      "typeVersion": 2.6,
      "alwaysOutputData": true
    },
    {
      "id": "5a865d9e-ba33-4521-b126-196188a774d0",
      "name": "항목 업데이트",
      "type": "n8n-nodes-base.postgres",
      "position": [
        2016,
        128
      ],
      "parameters": {
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "processed_threads",
          "cachedResultName": "processed_threads"
        },
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "columns": {
          "value": {
            "title": "={{ $('Filter New Threads').item.json.title }}",
            "topic_id": "={{ $('Filter New Threads').item.json.topicId }}",
            "processed_at": "={{ $now }}"
          },
          "schema": [
            {
              "id": "topic_id",
              "type": "string",
              "display": true,
              "required": true,
              "displayName": "topic_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "processed_at",
              "type": "dateTime",
              "display": true,
              "required": false,
              "displayName": "processed_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "credentials": {
        "postgres": {
          "id": "0wgjNQySpuUTurBY",
          "name": "Postgres account"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "69a4700c-9b17-4a18-a031-1e94cf8156b5",
      "name": "항목 순환 처리",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        672,
        176
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "fc90716d-62c2-4f11-9d9d-5637356dbc04",
      "name": "조건문",
      "type": "n8n-nodes-base.if",
      "position": [
        896,
        32
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "5b12ea87-5ff8-4f49-930f-34d598ab8090",
              "operator": {
                "type": "boolean",
                "operation": "false",
                "singleValue": true
              },
              "leftValue": "={{ $json.isNotEmpty() }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "bfee66c4-e285-40ad-aa82-99d8e1d02083",
      "name": "GeekHack 페이지 가져오기",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1120,
        32
      ],
      "parameters": {
        "url": "={{ $('Filter New Threads').item.json.link }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (compatible; bot)"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d3ab519c-cdef-4734-bc14-e4305cbe34fe",
      "name": "이미지 추출",
      "type": "n8n-nodes-base.code",
      "position": [
        1568,
        32
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// Get the HTML content from current input\nconst htmlContent = $json.html; // Adjust this path based on your data structure\n\nif (!htmlContent) {\n  return {}; // Return empty if no HTML content\n}\n\n// Use regex to extract all img tags and their attributes\nconst imgRegex = /<img[^>]*>/gi;\nconst srcRegex = /src\\s*=\\s*[\"']([^\"']*)[\"']/i;\nconst altRegex = /alt\\s*=\\s*[\"']([^\"']*)[\"']/i;\nconst classRegex = /class\\s*=\\s*[\"']([^\"']*)[\"']/i;\nconst widthRegex = /width\\s*=\\s*[\"']?([^\"'\\s>]*)[\"']?/i;\nconst heightRegex = /height\\s*=\\s*[\"']?([^\"'\\s>]*)[\"']?/i;\n\n// Find all img tags\nconst imgTags = htmlContent.match(imgRegex) || [];\n\n// Extract image data\nconst images = imgTags.map((imgTag, index) => {\n  const srcMatch = imgTag.match(srcRegex);\n  const altMatch = imgTag.match(altRegex);\n  const classMatch = imgTag.match(classRegex);\n  const widthMatch = imgTag.match(widthRegex);\n  const heightMatch = imgTag.match(heightRegex);\n  \n  return {\n    index: index + 1,\n    src: srcMatch ? srcMatch[1] : '',\n    alt: altMatch ? altMatch[1] : '',\n    class: classMatch ? classMatch[1] : '',\n    width: widthMatch ? widthMatch[1] : '',\n    height: heightMatch ? heightMatch[1] : '',\n    fullTag: imgTag\n  };\n});\n\n// Filter out images without src\nconst validImages = images.filter(img => img.src);\n\n// Return the results as a single object\nreturn {\n  json: {\n    totalImages: validImages.length,\n    images: validImages\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "8e786f49-87a0-4bcd-b260-3514b9d1b5a5",
      "name": "작성자 메시지 추출",
      "type": "n8n-nodes-base.html",
      "position": [
        1344,
        32
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "html",
              "cssSelector": "=#msg_{{ $('Filter New Threads').item.json.link.split('#msg')[1] }}",
              "returnValue": "html"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fc206472-2dcf-41bd-8edc-3c56a46d4a0a",
      "name": "페이로드 생성",
      "type": "n8n-nodes-base.code",
      "position": [
        1792,
        32
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// Get the data from previous nodes\nconst threadData = $('Filter New Threads').item.json;\nconst images = $json.images || [];\n\n// Create the base embed with all metadata\nconst baseEmbed = {\n  title: threadData.title,\n  url: threadData.link,\n  color: 5814783,\n  footer: {\n    text: threadData.categories[0]\n  },\n  timestamp: threadData.isoDate\n};\n\n// Create embeds array\nconst embeds = [];\n\n// Limit to max 4 images\nconst maxImages = Math.min(images.length, 4);\n\nfor (let i = 0; i < maxImages; i++) {\n  if (i === 0) {\n    // First embed gets all the metadata + first image\n    embeds.push({\n      ...baseEmbed,\n      image: {\n        url: images[i].src\n      }\n    });\n  } else {\n    // Additional embeds only get URL and image (for multi-image merge)\n    embeds.push({\n      description: \"Additional images\",\n      url: threadData.link,\n      image: {\n        url: images[i].src\n      }\n    });\n  }\n}\n\n// If no images, create single embed without image\nif (images.length === 0) {\n  embeds.push(baseEmbed);\n}\n\n// Create final webhook payload\nconst webhookPayload = {\n  username: \"Geekhack Updates\",\n  embeds: embeds\n};\n\n// Return the payload for the next node\nreturn {\n  json: webhookPayload\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "32d3b8ca-4ff5-440c-ac58-86b591bdfe1f",
      "name": "테이블에 행 삽입",
      "type": "n8n-nodes-base.postgres",
      "position": [
        0,
        448
      ],
      "parameters": {
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "webhooks",
          "cachedResultName": "webhooks"
        },
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "columns": {
          "value": {
            "url": "={{ $json.URL }}",
            "created_at": "={{ $json.submittedAt }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "number",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "url",
              "type": "string",
              "display": true,
              "required": true,
              "displayName": "url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "created_at",
              "type": "dateTime",
              "display": true,
              "required": false,
              "displayName": "created_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "credentials": {
        "postgres": {
          "id": "0wgjNQySpuUTurBY",
          "name": "Postgres account"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "82930485-b5b4-4558-8db7-fe01a6992f45",
      "name": "양식 제출 시",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -224,
        448
      ],
      "webhookId": "57e5e953-b263-49da-8862-4271fc2ae549",
      "parameters": {
        "options": {},
        "formTitle": "Add new webhooks",
        "formFields": {
          "values": [
            {
              "fieldLabel": "URL"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "78bb0733-add4-4943-b6ed-c6a8fb5d6d0a",
      "name": "테이블에서 행 선택",
      "type": "n8n-nodes-base.postgres",
      "position": [
        2016,
        -64
      ],
      "parameters": {
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "webhooks",
          "cachedResultName": "webhooks"
        },
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "options": {},
        "operation": "select",
        "returnAll": true
      },
      "credentials": {
        "postgres": {
          "id": "0wgjNQySpuUTurBY",
          "name": "Postgres account"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "73e86751-764f-4ff0-a79c-2cb639fc634d",
      "name": "discord로 전송",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        2464,
        32
      ],
      "parameters": {
        "url": "={{ $json.url }}",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $('Create Payload').item.json }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.2
    },
    {
      "id": "038c2f22-c473-4455-86b9-366f2062caeb",
      "name": "디버그 도우미",
      "type": "n8n-nodes-base.debugHelper",
      "position": [
        2672,
        32
      ],
      "parameters": {
        "category": "doNothing"
      },
      "typeVersion": 1
    },
    {
      "id": "338cacb6-ca43-4a0a-b37d-845085dcd2df",
      "name": "SQL 출력 병합",
      "type": "n8n-nodes-base.merge",
      "position": [
        2240,
        32
      ],
      "parameters": {},
      "typeVersion": 3.2
    }
  ],
  "active": true,
  "pinData": {
    "On form submission": [
      {
        "json": {
          "URL": "https://example.com",
          "formMode": "test",
          "submittedAt": "2025-08-30T05:37:45.693-04:00"
        }
      }
    ]
  },
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "b4fcf226-0b73-437c-8ccf-a982dc4f0d2a",
  "connections": {
    "fc90716d-62c2-4f11-9d9d-5637356dbc04": {
      "main": [
        [
          {
            "node": "bfee66c4-e285-40ad-aa82-99d8e1d02083",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "ccf58428-11e7-414a-92ae-8f308c697855": {
      "main": [
        [
          {
            "node": "cf94de87-5fab-47f8-a853-2b71853f8ea3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5a865d9e-ba33-4521-b126-196188a774d0": {
      "main": [
        [
          {
            "node": "338cacb6-ca43-4a0a-b37d-845085dcd2df",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "fc206472-2dcf-41bd-8edc-3c56a46d4a0a": {
      "main": [
        [
          {
            "node": "78bb0733-add4-4943-b6ed-c6a8fb5d6d0a",
            "type": "main",
            "index": 0
          },
          {
            "node": "5a865d9e-ba33-4521-b126-196188a774d0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d3ab519c-cdef-4734-bc14-e4305cbe34fe": {
      "main": [
        [
          {
            "node": "fc206472-2dcf-41bd-8edc-3c56a46d4a0a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d0583fe2-84dd-4844-8d9f-9855a10d83e5": {
      "main": [
        [
          {
            "node": "ccf58428-11e7-414a-92ae-8f308c697855",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "69a4700c-9b17-4a18-a031-1e94cf8156b5": {
      "main": [
        [
          {
            "node": "fc90716d-62c2-4f11-9d9d-5637356dbc04",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "9f5d422a-880a-4734-9780-4e73afb133cf",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "73e86751-764f-4ff0-a79c-2cb639fc634d": {
      "main": [
        [
          {
            "node": "038c2f22-c473-4455-86b9-366f2062caeb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "520a15d4-f80e-4ac7-b1dd-2bdf7a804079": {
      "main": [
        [
          {
            "node": "7870a6cc-71d8-4e1e-ab03-4d92323d99b0",
            "type": "main",
            "index": 0
          },
          {
            "node": "d0583fe2-84dd-4844-8d9f-9855a10d83e5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bfee66c4-e285-40ad-aa82-99d8e1d02083": {
      "main": [
        [
          {
            "node": "8e786f49-87a0-4bcd-b260-3514b9d1b5a5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "338cacb6-ca43-4a0a-b37d-845085dcd2df": {
      "main": [
        [
          {
            "node": "73e86751-764f-4ff0-a79c-2cb639fc634d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9f5d422a-880a-4734-9780-4e73afb133cf": {
      "main": [
        [
          {
            "node": "69a4700c-9b17-4a18-a031-1e94cf8156b5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cf94de87-5fab-47f8-a853-2b71853f8ea3": {
      "main": [
        [
          {
            "node": "69a4700c-9b17-4a18-a031-1e94cf8156b5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "82930485-b5b4-4558-8db7-fe01a6992f45": {
      "main": [
        [
          {
            "node": "32d3b8ca-4ff5-440c-ac58-86b591bdfe1f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7870a6cc-71d8-4e1e-ab03-4d92323d99b0": {
      "main": [
        [
          {
            "node": "ccf58428-11e7-414a-92ae-8f308c697855",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8e786f49-87a0-4bcd-b260-3514b9d1b5a5": {
      "main": [
        [
          {
            "node": "d3ab519c-cdef-4734-bc14-e4305cbe34fe",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "78bb0733-add4-4943-b6ed-c6a8fb5d6d0a": {
      "main": [
        [
          {
            "node": "338cacb6-ca43-4a0a-b37d-845085dcd2df",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

고급 - 소셜 미디어, 멀티모달 AI

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
고급
노드 수17
카테고리2
노드 유형10
난이도 설명

고급 사용자를 위한 16+개 노드의 복잡한 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34