import axios from "axios"; /** * 获取易书下载的来源 * @param keyword 书名 * @returns {Promise} */ async function getYiBook(e, keyword) { const sendTemplate = { nickname: e.sender.card || this.e.user_id, user_id: e.user_id, }; // 下载字典(异步去执行) return axios .post("https://worker.zlib.app/api/search/", { headers: { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1660.14", referer: "https://search.zhelper.net/", }, keyword: keyword, page: 1, sensitive: false, }) .then(async resp => { return resp.data.data.map(item => { const { author, cover, extension, filesize, hash, id, pages, publisher, source, title, year, zlib_download, } = item; return { message: { type: "text", text: `<${title}>\n` + `作者:${author}\n` + `书籍类型:${extension}\n` + `出版年月:${year}\n` + `来源:${source}\n` + `出版社:${publisher}\n` + `文件大小:${(Number(filesize) / 1024 / 1024).toFixed(2)}MB\n` + `下载直链:https://worker.zlib.app/download/${item.id}`, }, ...sendTemplate, }; }); }); } /** * ZBook的下载网址 * @type {string[]} */ const zBookDownloadUrl = [ "https://cloudflare-ipfs.com/ipfs/", "https://dweb.link/ipfs/", "https://ipfs.io/ipfs/", "https://gateway.pinata.cloud/ipfs/", "https://ipfs.best-practice.se/ipfs/", "https://ipfs.joaoleitao.org/ipfs/", ]; /** * 获取ZBook的数据 * @returns {Promise} */ async function getZBook(e, keyword) { const sendTemplate = { nickname: e.sender.card || this.e.user_id, user_id: e.user_id, }; return axios .get(`https://zbook.lol/search?title=${encodeURIComponent(keyword)}&limit=10`) .then(resp => { return resp.data.books.map(item => { const { id, title, author, publisher, extension, filesize, language, year, pages, isbn, ipfs_cid, cover, } = item; const bookDownloadUrls = zBookDownloadUrl.map( url => { const filename = `${title}_[${language}]${author}` return `${url}${ipfs_cid}?filename=${encodeURIComponent( filename )}.${extension}` } ); return { message: { type: "text", text: `${id}: <${title}>\n` + `作者:${author}\n` + `书籍类型:${extension}\n` + `出版年月:${year}\n` + `语言:${language}\n` + `页数:${pages}\n` + `ISBN:${isbn || "暂无"}\n` + `出版社:${publisher}\n` + `文件大小:${(Number(filesize) / 1024 / 1024).toFixed(2)}MB\n\n` + `其他下载直链:${bookDownloadUrls.join("\n\n")}`, }, ...sendTemplate, }; }); }); } /** * 获取ZHelper的数据 * @param e * @param keyword * @returns {Promise} */ async function getZHelper(e, keyword) { const LIMIT = 5; const sendTemplate = { nickname: e.sender.card || e.user_id, user_id: e.user_id, }; const anna = axios .post("https://anna.bookpan.net/api/search/", { headers: { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1660.14", referer: "https://search.zhelper.net/", }, keyword: keyword, page: 1, sensitive: false, }) const slib2 = axios .post("https://slib2.ylibrary.org/api/search/", { headers: { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1660.14", referer: "https://search.zhelper.net/", }, keyword: keyword, page: 1, sensitive: false, }) // 组合数据 return Promise.allSettled([slib2, anna]).then(async resp => { // 解析第一个数据 const slib2Data = await resp[0].value.data.data.slice(0, LIMIT).map(item => { const { code, download_link, info } = item; const { name, url } = download_link?.[0]; // 数据组合 return { message: { type: "text", text: `标题: ${info}\n`+ `${name}: ${url}` }, ...sendTemplate, } }) // 解析第一个数据 const annaDataPromises = resp[1].value.data.data.slice(0, LIMIT).map(async (item) => { const { author, cover, extension, id, link, publisher, sizestring, source, title } = item; // 固定一个模板 let resBooks = `<${title}> 作者:${author} 书籍类型:${extension}\n` + `来源:${source}\n` + `出版社:${publisher}\n` + `文件大小:${sizestring}`; // 发送一个需要下载链接的请求 const downloadLink = await getDownloadLink(id); resBooks += `\n${downloadLink}`; return { message: { type: "text", text: resBooks }, ...sendTemplate, } }) // 合并数据 const annaData = await Promise.all(annaDataPromises); return [...slib2Data, ...annaData]; }) } async function getDownloadLink(id) { if (id === undefined || id === "") { return ""; } const resp = await axios.post("https://anna.bookpan.net/api/detail/", { headers: { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1660.14", referer: "https://search.zhelper.net/", }, id: id, source: "anna", }); const { download_link } = resp.data; const links = download_link.slice(0, 2).map((item, index) => { return `直链 #${index + 1}: ${item?.url}\n\n` }) return `\n${links}`; } export { getYiBook, getZBook, getZHelper };