rc-plugin/utils/books.js
RrOrange 0e166c5a1e 🐞 fix: 删除没必要的功能 & 更新搜书功能
作者被勒索更新了,没办法,非要更新这个搜书,顺便删点垃圾功能,增强一下哔哩哔哩总结
2023-07-03 00:39:18 +08:00

235 lines
7.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import axios from "axios";
/**
* 获取易书下载的来源
* @param keyword 书名
* @returns {Promise<Array>}
*/
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<Array>}
*/
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<Array>}
*/
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}>\n` +
`作者:${author}\n` +
`书籍类型:${extension}\n` +
`来源:${source}\n` +
`出版社:${publisher}\n` +
`文件大小:${sizestring}`;
// 发送一个需要下载链接的请求
const downloadLink = await getDownloadLink(id);
resBooks += 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}: ${item?.url}\n`
})
return `\n${links}`;
}
export { getYiBook, getZBook, getZHelper };