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など)は別途料金が発生する場合があります。
関連ワークフロー
Microsoft Teams会議分析をGPT-4.1、Outlook、Mem.aiを使用して自動化
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
DevOps
ArunavaのマルチエージェントインタリジャエントReddit自動化
AIによるブランドメンションとBaserowを使用してRedditの投稿に自動のにコメントを投稿
If
Set
Code
+
If
Set
Code
35 ノードArunava
ソーシャルメディア