1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| import dayjs from "dayjs"; import * as cheerio from "cheerio"; import {safeExecuteUserFunction,isValidTargetUrl} from "../../../middleware/guard.js"; const { helper: { api: { success }, }, } = Chan;
import collect from "../service/collect.js";
let CollectController = {
async getPages(req, res, next) { try { let arr = []; const { targetUrl, listTag, charset } = req.body; if (!isValidTargetUrl(targetUrl)) { return "不允许访问的目标地址"; } const data = await collect.common(targetUrl, charset); const $ = cheerio.load(data.toString(), { decodeEntities: false }); $(`${listTag}`).each(function () { arr.push($(this).attr("href")); }); res.json({ ...success, data: arr }); } catch (error) { next(error); } },
async getArticle(req, res, next) { try { const { taskUrl, titleTag, articleTag, parseData, charset } = req.body; const dataStr = await collect.common(taskUrl, charset); const $ = cheerio.load(dataStr.toString(), { decodeEntities: false }); const title = $(`${titleTag}`).text().trim(); let str = safeExecuteUserFunction(parseData)
let run = new Function(`data`, str);
let data = $(`${articleTag}`).html(); let dataend = run(data); res.json({ ...success, data: { title: title, article: dataend } }); } catch (error) { next(error); } },
async create(req, res, next) { try { const body = req.body; const data = await collect.create(body); res.json({ ...success, data: data }); } catch (err) { next(err); } },
async delete(req, res, next) { try { const { id } = req.query; const data = await collect.delete(id); res.json({ ...success, data: data }); } catch (err) { next(err); } },
async update(req, res, next) { try { const body = req.body; const data = await collect.update(body); res.json({ ...success, data: data }); } catch (err) { next(err); } },
async detail(req, res, next) { try { const { id } = req.query; const data = await collect.detail(id); res.json({ ...success, data: data }); } catch (err) { next(err); } },
async search(req, res, next) { try { const { cur, keyword, pageSize = 10 } = req.query; const data = await collect.search(keyword, cur, pageSize); data.list.forEach((ele) => { ele.createdAt = dayjs(ele.createdAt).format("YYYY-MM-DD HH:mm"); }); res.json({ ...success, data: data }); } catch (err) { next(err); } },
async list(req, res, next) { try { const { cur, pageSize = 10 } = req.query; let data = await collect.list(cur, pageSize); data.list.forEach((ele) => { ele.updatedAt = dayjs(ele.updatedAt).format("YYYY-MM-DD HH:mm"); }); res.json({ ...success, data: data }); } catch (err) { next(err); } } }
export default CollectController;
|