青龙面板——百度贴吧全关注自动签到脚本
// 依赖
const axios = require("axios");
const FormData = require("form-data");
const cheerio = require("cheerio"); // 解析html;
const iconv = require("iconv-lite"); // 解决中文乱码
const cookieList = ["BDUSS=1jeldTVE9HMEJWaHB2UG5xa0phUzh4aW9zZjljT2V1bTZtd0puSVJXU1ptaXBrSVFBQUFBJCQAAAAAAAAAAAEAAAAdthFZT2~GvbWtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJkNA2SZDQNkeW;STOKEN=b0990788491410b926b28ba6a550e2a703a363e45146fd022dff5b68b348ac88; BAIDUID=F5BC2E0DEC258FD7EA3DCE8B97A65770:FG=1"];
let cookieNum = 0;
function run() {
// 是否设置环境变量
setTimeout(() => {
console.log(`\n开始获取环境变量${cookieNum + 1}\n\n`);
// TB_COOKIE:变量名
// process.env.TB_COOKIE: 获取环境变量
// if (process.env.TB_COOKIE) {
if (cookieList[cookieNum]) {
setTimeout(() => {
console.log("TB_COOKIE读取成功\n\n");
setTimeout(() => {
console.log(`\n%cHello 本脚本由龟龟制作,5秒后开始执行 🚀\n\n\n\n`, "color:#0dd8d8; background:#0b1021; font-size:1.5rem; padding:0.15rem 0.25rem; margin: 1rem auto; font-family: Rockwell; border: 2px solid #0dd8d8; border-radius: 4px;font-weight: bold; text-shadow: 1px 1px 1px #00af87bf;");
setTimeout(() => {
getMyLike();
}, 5000);
}, 1000);
}, 1000);
} else {
setTimeout(() => {
console.log("未读取到TB_COOKIE,请先配置环境变量\n\n");
setTimeout(() => {
console.log("脚本执行结束\n");
}, 1000);
}, 1000);
}
}, 1000);
}
run();
// axios调用接口
const service = axios.create({
baseURL: "https://tieba.baidu.com/",
});
// 请求拦截
service.interceptors.request.use(
(config) => {
config.headers["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8";
config.headers["Accept"] = "*/*";
config.headers["Connection"] = "keep-alive";
config.headers["Host"] = "tieba.baidu.com";
// config.headers["Cookie"] = process.env.TB_COOKIE;
config.headers["Cookie"] = cookieList[cookieNum];
return config;
},
(error) => {
// do something with request error
// for debug
console.log(error);
return Promise.reject(error);
}
);
// 保存所有关注的贴吧
let arr = [];
// 保存所有签到失败的吧
let errorArr = [];
// 获取关注的贴吧
function getMyLike(current = 1) {
service({
url: `f/like/mylike?pn=${current}`,
method: "get",
responseType: "arraybuffer",
responseEncoding: "utf8",
})
.then((response) => {
let { data } = response;
// 解码
let html = iconv.decode(data, "gbk");
// 解析html
const $ = cheerio.load(html);
// 获取当前页
const current = $(".pagination>.current").text();
// 获取当前页所有吧名
$("table tr:gt(0)").each(function () {
arr.push($(this).find("td:first").text());
});
// 当前页
if (current) {
console.log(`\n%c开始获取关注列表第${current}页内所有贴吧...\n`, "color: #f709bb; font-family: sans-serif; text-decoration: underline;");
setTimeout(() => {
getMyLike(Number(current) + 1);
}, 5000);
} else {
console.log(`\n%c所有关注的贴吧已获取完毕,即将开始执行签到...🚀\n\n`, "color:#0dd8d8; background:#0b1021; font-size:1.5rem; padding:0.15rem 0.25rem; margin: 1rem auto; font-family: Rockwell; border: 2px solid #0dd8d8; border-radius: 4px;font-weight: bold; text-shadow: 1px 1px 1px #00af87bf;");
setTimeout(() => {
// 执行签到
Promise.all(mapSignList(arr)).then((res) => {
setTimeout(() => {
let sinErrArr = errorArr.filter((item) => item.msg !== "贴吧目录出问题啦,请到贴吧签到吧反馈");
const sinArr = sinErrArr.map((item) => item.name);
if (sinArr.length) {
console.log("\n\n签到已执行完毕,即将开始为签到出错的吧重新签到\n\n");
setTimeout(() => {
Promise.all(mapSignList(sinArr)).then((res) => {
cookieNum += 1;
if (cookieNum === cookieList.length) {
console.log(`\n%c脚本已全部执行完毕,再见🚀...\n`, "font-weight: bold; color: #0dd8d8; text-decoration: underline;");
} else {
run();
}
});
}, 3000);
} else {
cookieNum += 1;
if (cookieNum === cookieList.length) {
console.log(`\n%c脚本已全部执行完毕,再见🚀...\n`, "font-weight: bold; color: #0dd8d8; text-decoration: underline;");
} else {
run();
}
}
}, 3000);
});
}, 2000);
}
})
.catch(function (error) {
console.log(error);
});
}
// 签到
function mapSignList(sinArr) {
let index = 0;
function nextSign() {
if (index >= sinArr.length) {
return Promise.resolve();
}
const item = sinArr[index++];
return new Promise((resolve, reject) => {
let data = new FormData();
data.append("ie", "utf-8");
data.append("kw", item);
service({
url: "sign/add",
method: "post",
data: data,
})
.then((response) => {
if (response.data.no == "0") {
console.log(item + " " + "签到成功\n");
resolve("签到成功");
} else {
console.log(item + " " + response.data.error + "\n");
if (response.data.error != "亲,你之前已经签过了") {
errorArr.push({
name: item,
msg: response.data.error,
});
}
resolve(response.data.error);
}
})
.catch(function (error) {
console.log(error);
reject(error);
});
}).then(() => {
return new Promise((resolve) => {
setTimeout(() => {
// 防止封ip,10秒执行一次签到
resolve(nextSign());
}, 10000);
});
});
}
return [nextSign()];
}
青龙面板——百度贴吧全关注自动签到脚本
http://localhost:8090//archives/qing-long-mian-ban-jiao-ben--bai-du-tie-ba-quan-guan-zhu-zi-dong-qian-dao