Browse Source

doc update, api gettask ready

master
filesite 8 months ago
parent
commit
9e3da7fd17
  1. 78
      README.md
  2. 8
      heroUnion.mjs
  3. 45
      router_api.mjs
  4. 34
      test/heroUnion.test.mjs

78
README.md

@ -9,6 +9,23 @@ Hero Union主要做两件事:
* 对外提供提交网页抓取任务和获取任务结果的接口供联盟成员使用,并支持任务完成回调通知 * 对外提供提交网页抓取任务和获取任务结果的接口供联盟成员使用,并支持任务完成回调通知
## 本文档目录
* [Hero Union 英雄联盟使用流程](#hero-union-英雄联盟使用流程)
1. [联盟成员使用流程](#联盟成员使用流程)
2. [联盟的爬虫工作流程](#联盟的爬虫工作流程)
* [Hero Union 联盟接口](#hero-union-联盟接口)
1. [爬虫状态上报接口](#爬虫状态上报接口)
2. [爬虫任务领取接口](#爬虫任务领取接口)
3. [爬虫任务完成回传接口](#爬虫任务完成回传接口)
4. [提交网页抓取任务接口](#提交网页抓取任务接口)
5. [查询网页抓取任务结果接口](#查询网页抓取任务结果接口)
6. [爬虫任务完成回调通知接口](#爬虫任务完成回调通知接口)
7. [Hero爬虫查询接口](#Hero爬虫查询接口)
8. [联盟状态查询接口](#联盟状态查询接口)
## Hero Union 英雄联盟使用流程 ## Hero Union 英雄联盟使用流程
### 联盟成员使用流程 ### 联盟成员使用流程
@ -51,6 +68,32 @@ Hero Union联盟网站:[Hero Union英雄联盟](https://herounion.filesite.io/
以下为联盟所有接口的详细文档: 以下为联盟所有接口的详细文档:
### 爬虫状态上报接口
* 接口网址:
```
https://herounion.filesite.io/api/onboard/
```
* 请求方法:**POST**
* 请求参数:
```
name
description
status: [idle, busy]
platforms: 爬虫支持的平台,可由爬虫定义,也可参考本文档底部“国内知名平台名称列表”
contracts: 支持的数据抓取合约,具体内容由爬虫定义
timestamp
country
lang
contact: 可选,爬虫提供方联系方式,将在英雄联盟网站展示,便于大家相互联系
```
其中country国家代码和lang语言代码参数值请参考下面标准:
* [country代码参考两位ISO CODES](https://countrycode.org/)
* [lang语言代码参考ISO 639-1 Code](https://www.loc.gov/standards/iso639-2/php/code_list.php)
### 爬虫任务领取接口 ### 爬虫任务领取接口
* 接口网址: * 接口网址:
@ -58,7 +101,14 @@ Hero Union联盟网站:[Hero Union英雄联盟](https://herounion.filesite.io/
https://herounion.filesite.io/api/gettask/ https://herounion.filesite.io/api/gettask/
``` ```
* 请求方法:**GET** * 请求方法:**GET**
* 请求参数:**无** * 请求参数:
```
platforms: 爬虫支持的平台
contracts: 爬虫支持的合约
country: 可选,爬虫所在国家
lang: 可选,爬虫支持的语言
data_mode: 可选,爬虫支持的返回数据格式
```
### 爬虫任务完成回传接口 ### 爬虫任务完成回传接口
@ -139,32 +189,6 @@ sign
``` ```
### 爬虫状态上报接口
* 接口网址:
```
https://herounion.filesite.io/api/onboard/
```
* 请求方法:**POST**
* 请求参数:
```
name
description
status: [idle, busy]
platforms: 爬虫支持的平台,可由爬虫定义,也可参考本文档底部“国内知名平台名称列表”
contracts: 支持的数据抓取合约,具体内容由爬虫定义
timestamp
country
lang
contact: 可选,爬虫提供方联系方式,将在英雄联盟网站展示,便于大家相互联系
```
其中country国家代码和lang语言代码参数值请参考下面标准:
* [country代码参考两位ISO CODES](https://countrycode.org/)
* [lang语言代码参考ISO 639-1 Code](https://www.loc.gov/standards/iso639-2/php/code_list.php)
### Hero爬虫查询接口 ### Hero爬虫查询接口
* 接口网址: * 接口网址:

8
heroUnion.mjs

@ -198,15 +198,15 @@ class HeroUnion {
} }
//参数均可选,获取 1 个待处理的任务 //参数均可选,获取 1 个待处理的任务
getWaitingTask(platform, contract, country, lang, data_mode) { getWaitingTask(platforms, contracts, country, lang, data_mode) {
let searchResult = null; let searchResult = null;
let taskIndex = this.tasks.findIndex(function(item) { let taskIndex = this.tasks.findIndex(function(item) {
if (typeof(platform) != 'undefined' && platform && item.platform != platform) { if (typeof(platforms) != 'undefined' && platforms && platforms.indexOf(item.platform) == -1) {
return false; return false;
} }
if (typeof(contract) != 'undefined' && contract && item.contract != contract) { if (typeof(contracts) != 'undefined' && contracts && contracts.indexOf(item.contract) == -1) {
return false; return false;
} }
@ -218,7 +218,7 @@ class HeroUnion {
return false; return false;
} }
if (typeof(data_mode) != 'undefined' && data_mode && task.data_mode != data_mode) { if (typeof(data_mode) != 'undefined' && data_mode && item.data_mode != data_mode) {
return false; return false;
} }

45
router_api.mjs

@ -168,15 +168,48 @@ router.get('/querytask/', async (req, res) => {
* hero爬虫从联盟获取等待中的数据抓取任务 * hero爬虫从联盟获取等待中的数据抓取任务
* *
* 参数 * 参数
* platform: 爬虫支持的平台 * platforms: 爬虫支持的平台
* contract爬虫支持的合约 * contracts: 爬虫支持的合约
* country爬虫所在国家 * country: 爬虫所在国家
* lang爬虫支持的语言 * lang: 爬虫支持的语言
* data_mode爬虫支持的返回数据格式 * data_mode: 爬虫支持的返回数据格式
**/ **/
router.get('/gettask/', async (req, res) => { router.get('/gettask/', async (req, res) => {
let platforms = req.query.platforms,
contracts = req.query.contracts,
country = req.query.country ? req.query.country : 'cn',
lang = req.query.lang ? req.query.lang : 'zh',
data_mode = req.query.data_mode ? req.query.data_mode : 'json';
return res.send('api/gettask/'); let data = {code: 0, message: ''};
//参数检查
if (!platforms || !contracts) {
data.message = '必选参数platforms、contracts不能为空';
}else if (common.isPlatformsOk(platforms) == false) {
data.message = '支持的平台platforms应为英文逗号间隔的3 - 100个英文字符串';
}else if (common.isContractsOk(contracts) == false) {
data.message = '支持的合约contracts应为英文逗号间隔的3 - 100个英文字符串';
}else if (country && common.isIosCountryCode(country) == false) {
data.message = '国家代码country请传小写的两位字母,参考两位ISO CODES:https://countrycode.org/';
}else if (lang && common.isIosLangCode(lang) == false) {
data.message = '语言代码lang请传小写的两位字母,参考ISO 639-1 Code:https://www.loc.gov/standards/iso639-2/php/code_list.php';
}else if (data_mode && data_mode != 'json' && data_mode != 'html') {
data.message = '数据格式data_mode可选值:json, html';
}
//获取等待中的任务
if (!data.message) {
data.task = heroUnion.getWaitingTask(platforms, contracts, country, lang, data_mode);
if (data.task) {
data.code = 1;
data.message = '获取待处理任务完成';
}else {
data.message = '暂时没有跟你支持的平台、合约匹配的待处理任务';
}
}
return res.status(200).json(data);
}); });
/** /**

34
test/heroUnion.test.mjs

@ -133,6 +133,40 @@ test('HeroUnion task query test', async (t) => {
assert.ok(response2.data.task); assert.ok(response2.data.task);
}); });
test('HeroUnion get waiting task test', async (t) => {
//case 1
let params = {
platforms: 'douyin,kuaishou,xigua,bilibili',
contracts: 'tajiantv',
data_mode: 'json',
country: 'cn',
lang: 'zh'
};
let api = 'http://127.0.0.1:8080/api/gettask/';
let queryOption = axiosConfig;
queryOption.method = 'get';
queryOption.url = api;
queryOption.params = params;
const response = await axios(queryOption);
console.log(response.data);
assert.equal(response.status, 200);
assert.equal(response.data.code, 1);
assert.ok(response.data.task);
//case 2
params.platforms = 'youku';
const response2 = await axios(queryOption);
console.log(response2.data);
assert.equal(response2.status, 200);
assert.equal(response2.data.code, 0);
assert.ifError(response2.data.task);
});
test('HeroUnion stats test', async (t) => { test('HeroUnion stats test', async (t) => {
let api = 'http://127.0.0.1:8080/api/stats/'; let api = 'http://127.0.0.1:8080/api/stats/';

Loading…
Cancel
Save