import { fetch } from "bun" import fs from "node:fs" import path from "node:path" const output = path.resolve(__dirname, "../dist/zzzmh") let totalPage = 1 async function downImageByPage(current: number) { const res = await (await fetch("https://api.zzzmh.cn/v2/bz/v3/getData", { method: "POST", headers: { 'Content-Type': 'application/json;charset=utf-8', referer: "https://bz.zzzmh.cn/" }, body: `{ "size": 24, "current": ${current}, "sort": 0, "category": 0, "resolution": 0, "color": 0, "categoryId": 0, "ratio": 0 }` })).json() totalPage = res.data.totalPage for (let i = 0; i < res.data.list.length; i++) { const item = res.data.list[i]; console.log(`正在下载第${i + 1}张图片`); await (() => { return new Promise((resolve) => { setTimeout(() => { resolve(1) }, Math.random() * 2000 + 500); }) })(); const stream = await (await fetch("https://api.zzzmh.cn/v2/bz/v3/getUrl/" + item.i + (item.t == 2 ? "21" : "11"))).arrayBuffer() const p = path.resolve(output, "page-" + current + "/" + item.i + ".png") if (!await checkExist(path.resolve(output, "page-" + current))) { fs.mkdirSync(path.resolve(output, "page-" + current), { recursive: true }) } const isExist = await checkExist(p) if (!isExist) { fs.writeFileSync(p, Buffer.from(stream!), { flag: "w" }) } else { console.log("文件已存在,跳过下载", item.i + ".png"); } } } function checkExist(path: string) { return new Promise((resolve, reject) => { fs.access(path, fs.constants.F_OK, (err) => { if (err) { resolve(false) } else { resolve(true) } }) }) } downImageByPage(2)