UNPKG

@cpany/plugin-hdu

Version:
35 lines (29 loc) 897 B
import { IProblem } from '@cpany/types'; import axios from 'axios'; import { parse } from 'node-html-parser'; import iconv from 'iconv-lite'; const problems = new Map<number, IProblem>(); export function addToCache(pid: number, problem: IProblem) { problems.set(pid, problem); } export async function getProblem(pid: number): Promise<IProblem> { if (problems.has(pid)) return problems.get(pid)!; const data = await axios .get(`https://acm.hdu.edu.cn/showproblem.php`, { params: { pid }, responseType: 'arraybuffer', timeout: 30 * 1000 }) .then((res) => iconv.decode(res.data, 'gbk')); const root = parse(data); const problem: IProblem = { type: 'hdu', id: pid, name: root.querySelector('h1').innerText, problemUrl: `https://acm.hdu.edu.cn/showproblem.php?pid=${pid}` }; problems.set(pid, problem); return problem; }