|
|
|
@ -27,19 +27,142 @@ class HeroUnion {
@@ -27,19 +27,142 @@ class HeroUnion {
|
|
|
|
|
//构造函数,设置默认配置
|
|
|
|
|
constructor() { |
|
|
|
|
this.stats = {}; |
|
|
|
|
this.tasks = []; |
|
|
|
|
this.taskStatus = { |
|
|
|
|
'total': 0, |
|
|
|
|
'waiting': 0, |
|
|
|
|
'running': 0, |
|
|
|
|
'done': 0, |
|
|
|
|
'failed': 0 |
|
|
|
|
}; |
|
|
|
|
this.statusCode = { |
|
|
|
|
'waiting': '待处理', |
|
|
|
|
'running': '处理中', |
|
|
|
|
'done': '完成', |
|
|
|
|
'failed': '失败' |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
this.supportedPlatforms = { |
|
|
|
|
'douyin': true, |
|
|
|
|
'kuaishou': true, |
|
|
|
|
'xigua': true, |
|
|
|
|
'bilibili': true |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//公用方法
|
|
|
|
|
getTimestamp() { |
|
|
|
|
return Math.floor(Date.now()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
getTimestampInSeconds() { |
|
|
|
|
return Math.floor(Date.now() / 1000); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//--任务相关功能--
|
|
|
|
|
|
|
|
|
|
//根据任务提交者ID和时间戳生成任务ID编号
|
|
|
|
|
generateTaskId(uuid) { |
|
|
|
|
let timestamp = this.getTimestamp(); |
|
|
|
|
return `${uuid}_${timestamp}`; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
isSupportedPlatform(platform) { |
|
|
|
|
return typeof(this.supportedPlatforms[platform]) != 'undefined' && this.supportedPlatforms[platform]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//提交新任务
|
|
|
|
|
createTask() { |
|
|
|
|
/** |
|
|
|
|
* { |
|
|
|
|
* id: '', |
|
|
|
|
* status: '', |
|
|
|
|
* uuid: '', |
|
|
|
|
* country: '', |
|
|
|
|
* lang: '', |
|
|
|
|
* url: '', |
|
|
|
|
* platform: '', |
|
|
|
|
* data_mode: '', |
|
|
|
|
* notify_url: '', |
|
|
|
|
* } |
|
|
|
|
**/ |
|
|
|
|
createTask(uuid, url, platform, data_mode, notify_url, country, lang) { |
|
|
|
|
let task = { |
|
|
|
|
id: this.generateTaskId(uuid), |
|
|
|
|
status: 'waiting', |
|
|
|
|
|
|
|
|
|
//必选
|
|
|
|
|
uuid: uuid, |
|
|
|
|
url: url, |
|
|
|
|
platform: platform, |
|
|
|
|
|
|
|
|
|
//可选
|
|
|
|
|
data_mode: 'default', |
|
|
|
|
country: 'china', |
|
|
|
|
lang: 'zh-CN', |
|
|
|
|
notify_url: '' |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if (typeof(data_mode) != 'undefined' && data_mode) { |
|
|
|
|
task.data_mode = data_mode; |
|
|
|
|
} |
|
|
|
|
if (typeof(notify_url) != 'undefined' && notify_url) { |
|
|
|
|
task.notify_url = notify_url; |
|
|
|
|
} |
|
|
|
|
if (typeof(country) != 'undefined' && country) { |
|
|
|
|
task.country = country; |
|
|
|
|
} |
|
|
|
|
if (typeof(lang) != 'undefined' && lang) { |
|
|
|
|
task.lang = lang; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.tasks.push(task); |
|
|
|
|
this.taskStatus.total ++; |
|
|
|
|
this.taskStatus.waiting ++; |
|
|
|
|
|
|
|
|
|
return task; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//获取 1 个待处理的任务
|
|
|
|
|
getWaitingTask() { |
|
|
|
|
//参数均可选,获取 1 个待处理的任务
|
|
|
|
|
getWaitingTask(platform, country, lang, data_mode) { |
|
|
|
|
let searchResult = null; |
|
|
|
|
|
|
|
|
|
for (const task of this.tasks) { |
|
|
|
|
if (task.status == 'waiting') { |
|
|
|
|
if (typeof(platform) != 'undefined' && platform) { |
|
|
|
|
if (platform == task.platform) { |
|
|
|
|
searchResult = task; |
|
|
|
|
}else { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (typeof(country) != 'undefined' && country) { |
|
|
|
|
if (country == task.country) { |
|
|
|
|
searchResult = task; |
|
|
|
|
}else { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (typeof(lang) != 'undefined' && lang) { |
|
|
|
|
if (lang == task.lang) { |
|
|
|
|
searchResult = task; |
|
|
|
|
}else { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (typeof(data_mode) != 'undefined' && data_mode) { |
|
|
|
|
if (data_mode == task.data_mode) { |
|
|
|
|
searchResult = task; |
|
|
|
|
}else { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return searchResult; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//保存任务处理结果
|
|
|
|
|