自动化抖音点赞取消脚本批量处理
在数字化时代,社交媒体平台如抖音成为了我们日常生活中不可或缺的一部分。然而,随着时间的推移,我们可能会希望重新审视并管理自己的社交互动,比如取消之前给出的点赞。为此,我开发了一个简单的自动化脚本,旨在帮助用户批量取消抖音上的点赞,同时提供一个直观的反馈界面。
脚本功能
这个脚本通过定期发送请求到抖音的服务器,获取用户点赞的视频列表,并批量发送取消点赞的请求。它还提供了一个消息框,实时显示取消点赞的进度和总数。
技术实现
脚本主要使用了JavaScript的fetch API来与抖音的服务器进行交互,同时利用了localStorage来存储和获取密钥。通过Promise.all实现了并发请求,提高了取消点赞的效率。此外,使用setInterval函数每隔4秒自动执行一次取消点赞的操作。
脚本代码
js
// 从localStorage中获取密钥,并去除前缀'pub.'(如果存在)
let key = JSON.parse(localStorage.getItem('security-sdk/s_sdk_cert_key')).data.replace(/^pub\./, '');
let max_cursorTemp = 0; // 用于存储最大的游标值
let messageBox = undefined; // 用于存储消息框的DOM元素
var count = 0; // 用于统计总共取消了多少个点赞
// 异步函数,用于获取点赞列表并批量取消点赞
async function fetchAndCancelLikes(maxCursor = max_cursorTemp) {
try {
// 发送GET请求到抖音的接口,获取点赞列表
const response = await fetch(`https://www.douyin.com/aweme/v1/web/aweme/favorite?aid=6383&count=999&max_cursor=${max_cursorTemp}`, {
"referrerPolicy": "strict-origin-when-cross-origin",
"body": null,
"method": "GET",
"mode": "cors",
"credentials": "include"
});
const { aweme_list, max_cursor } = await response.json();
max_cursorTemp = max_cursor; // 更新最大游标值
// 如果响应中包含aweme_list,则提取出所有的aweme_id
if (aweme_list != null) {
const idsToCancel = aweme_list.map(({ aweme_id }) => aweme_id);
let currCount = 0;
// 使用Promise.all并发取消所有的点赞
await Promise.all(idsToCancel.map(id => {
cancelLike(id, key);
currCount++;
count++;
})).then(()=>{
// 取消点赞后,更新消息框
if(messageBox!=undefined){
document.body.removeChild(messageBox);
}
messageBox = showMessageBox(`本次执行取消${currCount}个点赞,共取消${count}个点赞,四秒后继续执行,如果不需要执行直接关闭浏览器,当前时间${new Date()}`);
});
}
} catch (error) {
// 如果请求失败,捕获错误并打印到控制台
console.error('Error fetching and canceling likes:', error);
}
}
// 异步函数,用于取消单个点赞
async function cancelLike(id, key) {
try {
// 发送POST请求到抖音的接口,用于取消点赞
await fetch("https://www.douyin.com/aweme/v1/web/commit/item/digg/?aid=6383", {
"headers": {
"accept": "application/json, text/plain, */*",
"accept-language": "zh-CN,zh;q=0.9",
"bd-ticket-guard-ree-public-key": key,
"content-type": "application/x-www-form-urlencoded; charset=UTF-8"
},
"referrer": "https://www.douyin.com/user/self?modal_id=7308336895358930212",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": `aweme_id=${id}&item_type=0&type=0`,
"method": "POST",
"mode": "cors",
"credentials": "include"
});
} catch (error) {
// 如果取消点赞失败,捕获错误(但不做处理)
}
}
// 设置定时器,每隔4秒执行一次fetchAndCancelLikes函数
setInterval(fetchAndCancelLikes, 4000);
// 函数,用于创建和显示一个消息框
function showMessageBox(mess) {
// 创建消息框DOM元素,并设置样式和文本内容
var messageBox = document.createElement('div');
messageBox.id = 'autoMessageBox';
messageBox.style.position = 'fixed';
messageBox.style.top = '50%';
messageBox.style.left = '50%';
messageBox.style.transform = 'translate(-50%, -50%)';
messageBox.style.padding = '20px';
messageBox.style.backgroundColor = '#3498db';
messageBox.style.color = 'white';
messageBox.style.borderRadius = '5px';
messageBox.style.zIndex = '1000';
messageBox.style.display = 'block';
messageBox.textContent = mess;
document.body.appendChild(messageBox);
return messageBox;
}