/** * Express router of api/ */ import express from 'express'; import common from './common.mjs'; import HeroUnion from './heroUnion.mjs'; //初始化爬虫联盟 const heroUnion = new HeroUnion(); heroUnion.init(); const router = express.Router(); router.get('/', async (req, res) => { const apiList = { "/api/": "查看所有API", "/api/stats/": "查看联盟状态", }; const data = { name: heroUnion.config.name, version: heroUnion.config.version, apis: apiList }; return res.status(200).json(data); }); router.post('/newtask/', async (req, res) => { return res.send('api/newtask/'); }); router.get('/gettask/', async (req, res) => { return res.send('api/gettask/'); }); router.post('/savetask/', async (req, res) => { return res.send('api/savetask/'); }); router.get('/querytask/', async (req, res) => { return res.send('api/querytask/'); }); /** * 参数列表 * name * description * status: [idle, busy] * timestamp * country * lang */ router.post('/onboard/', async (req, res) => { let bot_name = req.body.name, bot_desc = req.body.description, status = req.body.status, timestamp = req.body.timestamp, country = req.body.country, lang = req.body.lang; let data = { "code": 0, "message": "" }; //参数格式检查 if (!bot_name || !bot_desc || !status || !timestamp) { data.message = '必填参数name、description、status、timestamp不能为空'; }else if (common.isBotNameOk(bot_name) == false) { data.message = '爬虫名字必须是6 - 32位英文字母、下划线的组合'; }else if (typeof(bot_desc) != 'string' || bot_desc.length > 100) { data.message = '爬虫简介必须是100个字符以内的字符串'; }else if (common.isBotStatus(status) == false) { data.message = '爬虫状态status传参错误,其可选值:idle、busy'; }else if (common.isTimestampInSeconds(timestamp) == false) { data.message = '时间戳timestamp请传秒数'; }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'; } if (!data.message) { let bot = { name: bot_name.toLowerCase(), description: bot_desc, status: status, timestamp: timestamp, //如果没传则填充默认值 country: country ? country.toLowerCase() : 'cn', lang: lang ? lang.toLowerCase() : 'zh' }; heroUnion.heroOnboard(bot); data.code = 1; data.message = '欢迎上船,因为有你,联盟将更健壮!'; } return res.status(200).json(data); }); router.get('/stats/', async (req, res) => { return res.status(200).json(heroUnion.getStats()); }); export default router;