Rules-For-Quantumult-X/Scripts/AdBlock/Other/Tieba.js

253 lines
8.7 KiB
JavaScript

const url = $request.url;
const method = $request.method;
const postMethod = "POST";
const notifyTitle = "贴吧json脚本错误";
console.log(`贴吧json-2023.06.12.2`);
let body = JSON.parse($response.body);
// 直接全局搜索 @Modify(
if (url.includes("tiebaads/commonbatch") && method === postMethod) {
// 看图模式下的广告
let adCmd = getUrlParamValue(url, "adcmd");
if (!adCmd) {
console.log(`url:${url}`);
$notification.post(notifyTitle, "贴吧-tiebaads/commonbatch", "adCmd参数不存在");
} else {
console.log(`commonbatch:${adCmd}`);
if (body.error_code === 0) {
if (!body.res.ad?.length) {
console.log('ad字段为空');
} else {
body.res.ad = [];
// 即使ad有内容 也不一定显示广告
// 因为如果服务器下发的数据少了一些字段同样是无广告的
console.log('成功');
}
} else {
console.log('error_code不为0:' + body.error_code);
}
}
} else if (url.includes('c/f/pb/picpage')) {
console.log(`picpage`);
const liveLength = body.recom_live_list?.length;
if (liveLength) {
console.log(`去除直播:${liveLength}`);
body.recom_live_list = [];
}
} else if (url.includes('c/s/sync')) {
// get post(贴吧使用了post)均可访问
console.log('贴吧-sync');
if ('floating_icon' in body) {
console.log('右下角悬浮icon');
if (body.floating_icon) {
if (body.floating_icon.homepage?.icon_url) {
console.log('homepage悬浮去除');
} else {
console.log('无需去除homepage悬浮');
}
if (body.floating_icon.pb?.icon_url) {
console.log('pb悬浮去除');
} else {
console.log('无需去除pb悬浮');
}
body.floating_icon = null;
} else {
console.log('无需修改floating_icon字段值');
}
} else {
console.log(`body:${$response.body}`);
$notification.post(notifyTitle, "贴吧-sync", "无floating_icon字段");
}
// 回帖栏的广告
if ('advertisement_config' in body) {
if (!body.advertisement_config?.advertisement_str) {
console.log('无需处理advertisement_config');
} else {
console.log(`advertisement_str:${body.advertisement_config.advertisement_str}`);
body.advertisement_config = null;
}
} else {
console.log(`body:${$response.body}`);
$notification.post(notifyTitle, "贴吧-sync", "无advertisement_config字段");
}
if ('config' in body) {
if (body.config?.switch) {
for (const item of body.config.switch) {
if (['platform_csj_init', 'platform_ks_init', 'platform_gdt_init'].includes(item.name)) {
item.type = '0';
// 禁止初始化穿山甲/广点通/快手
console.log(`禁止初始化${item.name}`);
}
}
}
} else {
console.log(`body:${$response.body}`);
$notification.post(notifyTitle, "贴吧-sync", "无config字段");
}
if ('screen_fill_data_result' in body) {
if (body.screen_fill_data_result.screen_fill_advertisement_bear_switch === "1") {
body.screen_fill_data_result.screen_fill_advertisement_bear_switch = '0';
console.log('开屏不展示小熊广告');
} else {
console.log('无需修改screen_fill_advertisement_bear_switch');
}
if (body.screen_fill_data_result.screen_fill_advertisement_plj_cpc_switch === "1") {
body.screen_fill_data_result.screen_fill_advertisement_plj_cpc_switch = '0';
console.log('开屏不展示序章CPC');
} else {
console.log('无需修改screen_fill_advertisement_plj_cpc_switch');
}
if (body.screen_fill_data_result.screen_fill_advertisement_plj_switch === "1") {
body.screen_fill_data_result.screen_fill_advertisement_plj_switch = '0';
console.log('开屏不展示序章');
} else {
console.log('无需修改screen_fill_advertisement_plj_switch');
}
} else {
console.log(`body:${$response.body}`);
$notification.post(notifyTitle, "贴吧-sync", "无screen_fill_data_result字段");
}
if ('ad_stlog_switch' in body) {
if (body.ad_stlog_switch === '1') {
body.ad_stlog_switch = '0';
console.log('修改ad_stlog_switch');
} else {
console.log('无需修改ad_stlog_switch');
}
} else {
console.log(`body:${$response.body}`);
$notification.post(notifyTitle, "贴吧-sync", "无ad_stlog_switch字段");
}
if ('lcs_strategy' in body) {
// 控制长连接开关 开启时帖子会走socket
if (body.lcs_strategy.conn_conf === '0') {
// 关闭
body.lcs_strategy.conn_conf = '1';
console.log('修改conn_conf');
} else {
console.log('无需修改conn_conf');
}
} else {
console.log(`body:${$response.body}`);
$notification.post(notifyTitle, "贴吧-sync", "无lcs_strategy字段");
}
} else if (url.includes("c/f/frs/page")) {
console.log('贴吧-FrsPage');
if (body.live_fuse_forum?.length) {
body.live_fuse_forum = [];
console.log(`去除吧头直播`);
} else {
console.log(`无需处理吧头直播`);
}
if (body.activityhead?.is_ad) {
body.activityhead = {};
console.log('去除吧内header图片广告');
} else {
console.log('无需处理activityhead');
}
body.thread_list = removeLive(body.thread_list);
removeGoodsInfo(body.forum?.banner_list?.app);
} else if (url.includes("c/f/frs/threadlist")) {
console.log('贴吧-threadlist');
removeGoodsInfo(body.banner_list?.app);
} else if (url.includes("c/f/pb/page")) {
console.log('贴吧-PbPage');
if (body.recom_ala_info?.live_id) {
console.log('帖子详情页推荐的直播广告去除');
body.recom_ala_info = null;
} else {
console.log('帖子详情页无直播广告');
}
if (body.post_list?.length) {
for (const post of body.post_list) {
if (post.outer_item) {
console.log('outer_item去除');
post.outer_item = null;
}
}
} else {
console.log('无需处理postList中的outer_item');
}
removeGoodsInfo(body.banner_list?.app);
const bannerGoodsInfoLength = body.banner_list?.pb_banner_ad?.goods_info?.length;
if (bannerGoodsInfoLength) {
console.log(`去除pb_banner_ad的goods_info:${bannerGoodsInfoLength}`)
body.banner_list.pb_banner_ad.goods_info = []
}
} else if (url.includes("c/f/excellent/personalized")) {
console.log('贴吧-personalized');
removeGoodsInfo(body.banner_list?.app);
body.thread_list = removeLive(body.thread_list);
if(body.live_answer){
console.log('去除推荐页上方的banner广告');
body.live_answer = null;
} else {
console.log('推荐页无banner广告');
}
} else if (url.includes("c/f/frs/generalTabList")) {
console.log('贴吧-generalTabList');
removeGoodsInfo(body.app_list);
} else {
$notification.post(notifyTitle, "路径/请求方法匹配错误:", method + "," + url);
}
body = JSON.stringify(body);
$done({
body
});
function getUrlParamValue(url, queryName) {
return Object.fromEntries(url.substring(url.indexOf("?") + 1)
.split("&")
.map(pair => pair.split("="))
)[queryName];
}
function removeGoodsInfo(app) {
if (app?.length) {
let goodsInfoSize = 0;
app.forEach(item => {
if (item.goods_info?.length) {
goodsInfoSize++;
item.goods_info = [];
}
})
if (goodsInfoSize) {
console.log(`去除goods_info:${goodsInfoSize}`);
} else {
console.log(`app内无goods_info`)
}
} else {
console.log(`app为空,无需处理`);
}
}
function removeLive(threadList) {
let newThreadList = threadList;
const beforeLength = threadList?.length;
if (beforeLength) {
newThreadList = threadList.filter(item => {
if (item.ala_info) {
console.log('去除推荐的直播帖子');
return false;
}
return true;
});
if (beforeLength === newThreadList.length) {
console.log("无推荐的直播帖子");
}
} else {
console.log('无需处理threadList');
}
return newThreadList;
}