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)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
GPT-4.1, Outlook 및 Mem.ai를 사용한 Microsoft Teams 회의 분석 자동화
GPT-4.1, Outlook 및 Mem.ai를 사용한 자동화된 Microsoft Teams 회의 분석
If
Set
Code
+
If
Set
Code
61 노드Wayne Simpson
인사
시각화 참조 라이브러리에서 n8n 노드를 탐색
可视化 참조 라이브러리에서 n8n 노드를 탐색
If
Ftp
Set
+
If
Ftp
Set
113 노드I versus AI
기타
WordPress 블로그 자동화 프로페셔널 에디션(심층 연구) v2.1 마켓
GPT-4o, Perplexity AI 및 다국어 지원을 사용한 SEO 최적화 블로그 생성 자동화
If
Set
Xml
+
If
Set
Xml
125 노드Daniel Ng
콘텐츠 제작
매일 스포츠 요약
Google Gemini, Kokoro TTS 및 FFmpeg를 사용하여 RSS 소스를 팟캐스트로 변환
If
Set
Code
+
If
Set
Code
34 노드Jonas
콘텐츠 제작
GitHub 동기화 대시보드 - V2
提交 기록과 롤백 기능을 갖춘 GitHub 워크플로우 버전 관리 대시보드
If
N8n
Set
+
If
N8n
Set
94 노드Eduard
데브옵스
Arunava의 다중 에이전트 지능형 Reddit 자동화
AI 브랜드 언급 및 Baserow 추적으로 Reddit 게시물 자동 댓글 작성
If
Set
Code
+
If
Set
Code
35 노드Arunava
소셜 미디어