Implement full media crawler workflow with Flask backend and Vue frontend.
Add TMDB search and media detail pages, HDHive resource ingestion flow, unified error handling, Docker single-container runtime, and project docs/config updates for local deployment. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
505
docs/cms/[MEDIA]CMS入库115链接.json
Normal file
505
docs/cms/[MEDIA]CMS入库115链接.json
Normal file
@@ -0,0 +1,505 @@
|
||||
{
|
||||
"name": "[MEDIA]CMS入库115链接",
|
||||
"nodes": [
|
||||
{
|
||||
"parameters": {
|
||||
"workflowInputs": {
|
||||
"values": [
|
||||
{
|
||||
"name": "url"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"type": "n8n-nodes-base.executeWorkflowTrigger",
|
||||
"typeVersion": 1.1,
|
||||
"position": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"id": "fa49a99a-e52d-48ee-a126-c7ad2a128f35",
|
||||
"name": "When Executed by Another Workflow"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"operation": "get",
|
||||
"propertyName": "token",
|
||||
"key": "CMS_TOKEN",
|
||||
"keyType": "string",
|
||||
"options": {}
|
||||
},
|
||||
"type": "n8n-nodes-base.redis",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
224,
|
||||
-80
|
||||
],
|
||||
"id": "01719d30-77b8-411d-a7d7-0116ffde8725",
|
||||
"name": "Redis",
|
||||
"credentials": {
|
||||
"redis": {
|
||||
"id": "0auGFn4EkjXee2ul",
|
||||
"name": "Redis account"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"conditions": {
|
||||
"options": {
|
||||
"caseSensitive": true,
|
||||
"leftValue": "",
|
||||
"typeValidation": "strict",
|
||||
"version": 3
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"id": "166573d5-cf9c-43a1-9337-39acf4338cb7",
|
||||
"leftValue": "={{ $json.token }}",
|
||||
"rightValue": "",
|
||||
"operator": {
|
||||
"type": "string",
|
||||
"operation": "empty",
|
||||
"singleValue": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"combinator": "and"
|
||||
},
|
||||
"options": {}
|
||||
},
|
||||
"type": "n8n-nodes-base.if",
|
||||
"typeVersion": 2.3,
|
||||
"position": [
|
||||
432,
|
||||
-80
|
||||
],
|
||||
"id": "490b5aa2-2ba7-4037-af2a-f5407e51984e",
|
||||
"name": "If"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"workflowId": {
|
||||
"__rl": true,
|
||||
"value": "R9CpsJ3lkHFdx-Z3XMNnE",
|
||||
"mode": "list",
|
||||
"cachedResultUrl": "/workflow/R9CpsJ3lkHFdx-Z3XMNnE",
|
||||
"cachedResultName": "CMS获取Token"
|
||||
},
|
||||
"workflowInputs": {
|
||||
"mappingMode": "defineBelow",
|
||||
"value": {},
|
||||
"matchingColumns": [],
|
||||
"schema": [],
|
||||
"attemptToConvertTypes": false,
|
||||
"convertFieldsToString": true
|
||||
},
|
||||
"options": {}
|
||||
},
|
||||
"type": "n8n-nodes-base.executeWorkflow",
|
||||
"typeVersion": 1.3,
|
||||
"position": [
|
||||
640,
|
||||
-176
|
||||
],
|
||||
"id": "aa9f03a2-4640-4b23-bc83-4b679a308daa",
|
||||
"name": "Call 'CMS获取Token'"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"mode": "raw",
|
||||
"jsonOutput": "={\n \"token\": \"{{ $json.output }}\"\n}",
|
||||
"options": {}
|
||||
},
|
||||
"type": "n8n-nodes-base.set",
|
||||
"typeVersion": 3.4,
|
||||
"position": [
|
||||
848,
|
||||
-176
|
||||
],
|
||||
"id": "06971068-c7c4-414f-931c-e8cd4035e3c9",
|
||||
"name": "Edit Fields"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"numberInputs": 3
|
||||
},
|
||||
"type": "n8n-nodes-base.merge",
|
||||
"typeVersion": 3.2,
|
||||
"position": [
|
||||
976,
|
||||
-48
|
||||
],
|
||||
"id": "dc5ab1a6-e58c-4c7a-8d36-bf3c79465eb2",
|
||||
"name": "Merge"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nlet token = \"\";\nlet url = \"\";\nfor (const item of $input.all()) {\n if (\"token\" in item.json) {\n token = item.json.token;\n }\n if (\"url\" in item.json) {\n url = item.json.url;\n }\n}\n\nreturn {\n \"token\": token,\n \"url\": url\n};"
|
||||
},
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
1168,
|
||||
-32
|
||||
],
|
||||
"id": "a06796c0-0572-438e-a13f-12a216bc283b",
|
||||
"name": "Code in JavaScript"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"method": "POST",
|
||||
"url": "https://cms.rc707blog.top/api/cloud/add_share_down",
|
||||
"sendHeaders": true,
|
||||
"headerParameters": {
|
||||
"parameters": [
|
||||
{
|
||||
"name": "User-Agent",
|
||||
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0"
|
||||
},
|
||||
{
|
||||
"name": "Accept",
|
||||
"value": "application/json, text/plain, */*"
|
||||
},
|
||||
{
|
||||
"name": "Accept-Language",
|
||||
"value": "zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en-US;q=0.6,en;q=0.5"
|
||||
},
|
||||
{
|
||||
"name": "Accept-Encoding",
|
||||
"value": "gzip, deflate, br, zstd"
|
||||
},
|
||||
{
|
||||
"name": "Authorization",
|
||||
"value": "=Bearer {{ $json.token }}"
|
||||
},
|
||||
{
|
||||
"name": "Origin",
|
||||
"value": "https://cms.rc707blog.top"
|
||||
},
|
||||
{
|
||||
"name": "DNT",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "Alt-Used",
|
||||
"value": "cms.rc707blog.top"
|
||||
},
|
||||
{
|
||||
"name": "Connection",
|
||||
"value": "keep-alive"
|
||||
},
|
||||
{
|
||||
"name": "Referer",
|
||||
"value": "https://cms.rc707blog.top/incremental-sync"
|
||||
},
|
||||
{
|
||||
"name": "Priority",
|
||||
"value": "u=0"
|
||||
}
|
||||
]
|
||||
},
|
||||
"sendBody": true,
|
||||
"bodyParameters": {
|
||||
"parameters": [
|
||||
{
|
||||
"name": "url",
|
||||
"value": "={{ $json.url }}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {}
|
||||
},
|
||||
"type": "n8n-nodes-base.httpRequest",
|
||||
"typeVersion": 4.3,
|
||||
"position": [
|
||||
1376,
|
||||
-32
|
||||
],
|
||||
"id": "a57cdbfc-dfea-4516-88ae-559dba2d71d8",
|
||||
"name": "HTTP Request"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nlet success = $input.first().json.code === 200;\nreturn {\n \"output\": success\n};"
|
||||
},
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
2224,
|
||||
32
|
||||
],
|
||||
"id": "3161bf30-aa02-46a3-aa27-5e93f51083a6",
|
||||
"name": "Code in JavaScript1"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"conditions": {
|
||||
"options": {
|
||||
"caseSensitive": true,
|
||||
"leftValue": "",
|
||||
"typeValidation": "strict",
|
||||
"version": 3
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"id": "e738a07c-9884-4ca3-a8de-079818a95c90",
|
||||
"leftValue": "={{ $json.code }}",
|
||||
"rightValue": 200,
|
||||
"operator": {
|
||||
"type": "number",
|
||||
"operation": "notEquals"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f2ec4f79-1c9e-47be-a39c-48dfe19fbd7b",
|
||||
"leftValue": "={{ $json.msg }}",
|
||||
"rightValue": "提取分享链接失败",
|
||||
"operator": {
|
||||
"type": "string",
|
||||
"operation": "notEquals"
|
||||
}
|
||||
}
|
||||
],
|
||||
"combinator": "and"
|
||||
},
|
||||
"options": {}
|
||||
},
|
||||
"type": "n8n-nodes-base.if",
|
||||
"typeVersion": 2.3,
|
||||
"position": [
|
||||
1552,
|
||||
128
|
||||
],
|
||||
"id": "737632fb-47ed-4108-8bb2-560cb5daeb86",
|
||||
"name": "If1"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"operation": "delete",
|
||||
"key": "CMS_TOKEN"
|
||||
},
|
||||
"type": "n8n-nodes-base.redis",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
1776,
|
||||
112
|
||||
],
|
||||
"id": "8287fa40-9f93-49a4-87f3-8b653ac2785d",
|
||||
"name": "Redis1",
|
||||
"credentials": {
|
||||
"redis": {
|
||||
"id": "0auGFn4EkjXee2ul",
|
||||
"name": "Redis account"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"operation": "set",
|
||||
"key": "CMS_TOKEN",
|
||||
"value": "={{ $json.output }}",
|
||||
"keyType": "string",
|
||||
"expire": true,
|
||||
"ttl": 3600
|
||||
},
|
||||
"type": "n8n-nodes-base.redis",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
848,
|
||||
-336
|
||||
],
|
||||
"id": "1534f994-2207-402d-814a-5eda492e9437",
|
||||
"name": "Redis2",
|
||||
"credentials": {
|
||||
"redis": {
|
||||
"id": "0auGFn4EkjXee2ul",
|
||||
"name": "Redis account"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"parameters": {},
|
||||
"type": "n8n-nodes-base.merge",
|
||||
"typeVersion": 3.2,
|
||||
"position": [
|
||||
2000,
|
||||
32
|
||||
],
|
||||
"id": "72d832a4-f7ae-4d91-9d55-0dddd1f4c878",
|
||||
"name": "Merge1"
|
||||
}
|
||||
],
|
||||
"pinData": {
|
||||
"When Executed by Another Workflow": [
|
||||
{
|
||||
"json": {
|
||||
"url": "https://115cdn.com/s/swfl9s73zfr?password=0000"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"connections": {
|
||||
"When Executed by Another Workflow": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Redis",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"node": "Merge",
|
||||
"type": "main",
|
||||
"index": 2
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Redis": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "If",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"If": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Call 'CMS获取Token'",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"node": "Merge",
|
||||
"type": "main",
|
||||
"index": 1
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Call 'CMS获取Token'": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Edit Fields",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"node": "Redis2",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Edit Fields": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Merge",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Merge": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Code in JavaScript",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Code in JavaScript": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "HTTP Request",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"HTTP Request": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "If1",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"node": "Merge1",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"If1": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Redis1",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Code in JavaScript1": {
|
||||
"main": [
|
||||
[]
|
||||
]
|
||||
},
|
||||
"Redis1": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Merge1",
|
||||
"type": "main",
|
||||
"index": 1
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Merge1": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Code in JavaScript1",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"active": true,
|
||||
"settings": {
|
||||
"executionOrder": "v1",
|
||||
"binaryMode": "separate",
|
||||
"availableInMCP": false
|
||||
},
|
||||
"versionId": "b2e168e5-9970-4116-ac54-b2644ac5c4dc",
|
||||
"meta": {
|
||||
"templateCredsSetupCompleted": true,
|
||||
"instanceId": "66cf2dfa889c11bef16af6baad527d2d3bcad1ee4e7726db9de95c31e876ed5e"
|
||||
},
|
||||
"id": "pH51j4qlAcf_gNk2gYEgH",
|
||||
"tags": []
|
||||
}
|
||||
147
docs/cms/[MEDIA]CMS获取Token.json
Normal file
147
docs/cms/[MEDIA]CMS获取Token.json
Normal file
@@ -0,0 +1,147 @@
|
||||
{
|
||||
"name": "[MEDIA]CMS获取Token",
|
||||
"nodes": [
|
||||
{
|
||||
"parameters": {
|
||||
"inputSource": "passthrough"
|
||||
},
|
||||
"type": "n8n-nodes-base.executeWorkflowTrigger",
|
||||
"typeVersion": 1.1,
|
||||
"position": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"id": "8b0db7d2-9dfa-43f6-abc1-04751f022c67",
|
||||
"name": "When Executed by Another Workflow"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"method": "POST",
|
||||
"url": "https://cms.rc707blog.top/api/auth/login",
|
||||
"sendHeaders": true,
|
||||
"headerParameters": {
|
||||
"parameters": [
|
||||
{
|
||||
"name": "User-Agent",
|
||||
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0"
|
||||
},
|
||||
{
|
||||
"name": "Accept",
|
||||
"value": "application/json, text/plain, */*"
|
||||
},
|
||||
{
|
||||
"name": "Accept-Language",
|
||||
"value": "zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en-US;q=0.6,en;q=0.5"
|
||||
},
|
||||
{
|
||||
"name": "Accept-Encoding",
|
||||
"value": "gzip, deflate, br, zstd"
|
||||
},
|
||||
{
|
||||
"name": "Origin",
|
||||
"value": "https://cms.rc707blog.top"
|
||||
},
|
||||
{
|
||||
"name": "DNT",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "Alt-Used",
|
||||
"value": "cms.rc707blog.top"
|
||||
},
|
||||
{
|
||||
"name": "Connection",
|
||||
"value": "keep-alive"
|
||||
},
|
||||
{
|
||||
"name": "Referer",
|
||||
"value": "https://cms.rc707blog.top/login"
|
||||
},
|
||||
{
|
||||
"name": "Priority",
|
||||
"value": "u=0"
|
||||
},
|
||||
{
|
||||
"name": "TE",
|
||||
"value": "trailers"
|
||||
}
|
||||
]
|
||||
},
|
||||
"sendBody": true,
|
||||
"bodyParameters": {
|
||||
"parameters": [
|
||||
{
|
||||
"name": "username",
|
||||
"value": "rose_cat707"
|
||||
},
|
||||
{
|
||||
"name": "password",
|
||||
"value": "ro983364"
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {}
|
||||
},
|
||||
"type": "n8n-nodes-base.httpRequest",
|
||||
"typeVersion": 4.3,
|
||||
"position": [
|
||||
208,
|
||||
0
|
||||
],
|
||||
"id": "06e9804f-6bbd-43d7-a192-081394f9ee9e",
|
||||
"name": "HTTP Request"
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"mode": "raw",
|
||||
"jsonOutput": "={\n\"output\": \"{{ $json.data.token }}\"\n}",
|
||||
"options": {}
|
||||
},
|
||||
"type": "n8n-nodes-base.set",
|
||||
"typeVersion": 3.4,
|
||||
"position": [
|
||||
416,
|
||||
0
|
||||
],
|
||||
"id": "c93efa65-9381-403a-8d2c-3d3446e79bfa",
|
||||
"name": "Edit Fields"
|
||||
}
|
||||
],
|
||||
"pinData": {},
|
||||
"connections": {
|
||||
"When Executed by Another Workflow": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "HTTP Request",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"HTTP Request": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Edit Fields",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"active": true,
|
||||
"settings": {
|
||||
"executionOrder": "v1",
|
||||
"binaryMode": "separate",
|
||||
"availableInMCP": false
|
||||
},
|
||||
"versionId": "683c7ff7-4b28-454f-8215-98f5d6b055aa",
|
||||
"meta": {
|
||||
"instanceId": "66cf2dfa889c11bef16af6baad527d2d3bcad1ee4e7726db9de95c31e876ed5e"
|
||||
},
|
||||
"id": "R9CpsJ3lkHFdx-Z3XMNnE",
|
||||
"tags": []
|
||||
}
|
||||
Reference in New Issue
Block a user