最近在折腾nas,在上面部署了一个Calibre-web当作图书馆。因为导入了很多从各处收集的资料,所以作者、作者分类这些信息很乱,为了能够批量的修改这些信息,写了一些脚本,有需要的可以自取。
1.电脑需要安装nodejs,nodejs需要安装axios
(使用 npm install axios 命令安装)。
2.用chrome浏览器打开Calibre-web页面,打开F12,进入【书籍列表】,修改一本书的信息
3.查看Network里的信息,提取相关信息
右键-> copy -> Copy as Node.js fetch,粘贴到文本中。把红框处的内容复制出来备用。需要赋值给运行代码里的 const headers
4.打开Payload,记下这些信息,需要赋值给运行代码里的 const body
5.查看Request url,需要赋值给运行代码里的 const baseUrl
6.在F12中,找到下面这个请求,把url复制到浏览器地址栏中。url中的search=&,在=和&中间可以输入需要过滤的内容,如果不需要,则直接复制url。
回车后,会看到匹配的书籍信息。
Ctrl+A, Ctrl+C,把内容都复制出来,到文本中。做下json格式化。我使用的是notepad++,有jsonFormat的插件,如果没有,也可以找在线网站,在线格式化。
搜索 "id" ,把所有的id数字提取出来,保存到本地的一个ids.txt中。这个文本的绝对路径要记住,需要替换运行脚本中的 const parametersFilePath。
7.在新建文本,把下面的代码复制粘贴。同时把上面几处的内容,替换到下面的脚本中。保存成run.js文件
const fs = require('fs');
const axios = require('axios');
// 替换请求 body 中的 bookid 字段并发送请求
async function sendRequestWithParameters(url, headers, body, parameters) {
for (const parameter of parameters) {
// 替换请求 body 中的 bookid 字段
const requestBody = { ...body, pk: parameter };
try {
const response = await axios.post(url, requestBody, { headers });
console.log(`Request for pk '${parameter}' sent successfully:`, response.data);
} catch (error) {
console.error(`Error sending request for pk '${parameter}':`, error.message);
}
}
}
// 从本地文件中读取参数
function readParametersFromFile(filePath) {
try {
const fileContent = fs.readFileSync(filePath, 'utf-8');
return fileContent.trim().split('\n').filter(Boolean); // 按行分割并过滤空行
} catch (error) {
console.error('Error reading parameters from file:', error.message);
return [];
}
}
// 示例参数
const baseurl = 'http://xxx.xxx.xxx.xxx:8083/ajax/editbooks/title';
const headers = {
"accept": "*/*",
"accept-language": "zh-CN,zh;q=0.9,zh-TW;q=0.8",
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"x-csrftoken": "IjRkODNmMTk0OTc3MTM3MmQwMGExNGYyZDZiNjVmMWFkZTQ5NGVmMzMi.Ze7RkQ.0-ZugZ8iP60ckWTUdFg3iSa6V8s",
"x-requested-with": "XMLHttpRequest",
"cookie": "_SSID=8X7BSUFzTS-83a-s1NSMzL_Mihj7_J5TtF7COGu7u1I; access_token=126.fe74b0f037daa99bb3963919955836f7.Y7aGpj_JSqxhksa-aQyK64dIf3aiYU3_J2xJY08.aoEbhw; synology_token=4978bf69-e7d9-49f9-a3b3-7c6f526469bb; stay_login=1; did=dTxWYC7sdbSAhxhjLovFnnM7uFJEKo7mEaDGF4F_PIZLYZmohY0PzwPCNkt-ixNp0S5rQkRIu28EVl6p-Ejfvw; _CrPoSt=cHJvdG9jb2w9aHR0cDo7IHBvcnQ9NTAwMDsgcGF0aG5hbWU9Lzs%3D; remember_token=1|6d26f6d6348dc2fe1dc2c8d3951165042b927561144282898e70c1c068fbe5e699d7b6f9573a3493417e4f9af91771855c621add479a8afcdb0ec13ecacebfe3; id=uTkE7zOWHGtHo3pnWQIfvxPILbBeES6MQbLkxmuF15kYFyhOdMV4peH3eGDpcu8eQoe8aRRm99ofR9ulQvztdY; ViewType=timeline; io=7r94WkHXvrSNj0XDAAEe; session=.eJwlzjFuBDEIQNG7uE5hDMawlxmBASWKlEgzu1WUu2eklP9X76cddeb13h7P85Vv7fiI9mjKlQh9rWHRx1BySelMNIkqwsTUc0xKBd4o0kcUmiwmddyuzrQZTZk1rIOJmxAPjA4OooWSNbEbk6TmloWwx_QCL88d1G7I68rzXwN37uus4_n9mV_3oBAsUNK1ANeI3g2oRrDzLLBIUspCbL9_kRk-0w.Ze7SUw.xuzb17BOLuH10s-jAuhO0orpN-Y",
"Referer": "http://xxx.xxx.xxx.xxx:8083/table?data=list&sort_param=stored",
"Referrer-Policy": "strict-origin-when-cross-origin"
};
const body = { "name":"title","value":"扫描文档",checkA:true, "checkB":true, "pk": 0 };
const parametersFilePath = 'd:/ids.txt'; // 参数文件路径
// 从文件中读取参数并调用函数发送请求
const parameters = readParametersFromFile(parametersFilePath);
if (parameters.length > 0) {
sendRequestWithParameters(baseurl, headers, body, parameters);
} else {
console.error('No parameters found in the file.');
}
8.windows下打开cmd,运行 node run.js 即可。
9.前面的请求有时效性,过一会就会失效,可以刷新页面,从新的请求中获取 const headers信息。