Files
wool_scripts/Scripts/weibo/weibo_ads.js
2025-10-12 10:34:44 +08:00

311 lines
10 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.

/**
* @author fmz200
* @function 微博去广告
* @date 2025-10-12 10:15:00
*/
let url = $request.url;
let body = $response.body;
let resp_data = JSON.parse(body);
try {
// 1、首次点击发现按钮
if (url.includes("/search/finder?")) {
console.log('进入发现页...');
resp_data.channelInfo.channels[0].titleInfo.style.selectTextColor = "#333333";
processPayload(resp_data.channelInfo.channels[0].payload);
removeChannelsTabs(resp_data.channelInfo.channels);
if (resp_data.header?.data?.items) {
removeHeaderAds(resp_data.header.data.items);
}
}
// 2、发现页面刷新/再次点击发现按钮
if (url.includes("/search/container_timeline?") || url.includes("/search/container_discover?")) {
console.log('刷新发现页...');
processPayload(resp_data);
if (resp_data.header?.data?.items) {
removeHeaderAds(resp_data.header.data.items);
}
}
// 3、微博热搜页面刷新
if (url.includes("/2/page?") && resp_data.cards && resp_data.cards[0].card_group) {
resp_data.cards[0].card_group = resp_data.cards[0].card_group.filter(group => group.promotion == null);
console.log('处理微博热搜页面广告结束💕💕');
}
// 微博热搜页面 “热搜”tab页
if (url.includes("/2/flowpage?")) {
// 删掉Banner图
resp_data.pageHeader = {};
for (let subItem of resp_data.items) {
if (subItem.itemId === "hotword") {
subItem.items = subItem.items.filter(group => group.data.promotion == null && !group.data.itemid.includes("c_type:51"));
break;
} else if (subItem.items) {
subItem.items = subItem.items.filter(group => group.data.promotion == null && !group.data.itemid.includes("c_type:51") && !group.data.itemid.includes("region_data"));
}
}
}
// 4、微博超话页面
if (url.includes("/statuses/container_timeline_topicpage?") && resp_data.items) {
resp_data.items = resp_data.items.filter(item => !item.data || item.data.mblogtypename !== "广告");
console.log('处理微博超话页面广告结束💕💕');
}
// 5、微博详情页面
if (url.includes("/statuses/extend?")) {
delete resp_data.head_cards;
delete resp_data.top_cards;
delete resp_data.extend_info;
delete resp_data.trend; // 博主好物种草
delete resp_data.semantic_brand_params;
delete resp_data.ad_tag_nature;
delete resp_data.title_source;
delete resp_data.reward_info;
console.log('处理微博详情页面广告结束💕💕');
}
if (url.includes("/statuses/container_detail?")) {
resp_data.pageHeader.data.items = resp_data.pageHeader.data.items.filter(item =>
item?.category !== 'card' && item?.category !== "group" && item?.category !== "wboxcard" && item?.type !== 'share'
);
// 详情页面的关注悬浮横幅
if (resp_data.detailInfo?.extend?.follow_data) {
delete resp_data.detailInfo.extend.follow_data;
}
}
// 6、移除微博首页的多余tab页 微博首页Tab标签页
if (url.includes("/groups/allgroups/v2")) {
removePageDataAds(resp_data.pageDatas);
// 删除恶心人的“全部微博”
if (resp_data.pageDatas[0].categories) {
delete resp_data.pageDatas[0].categories[0].pageDatas[0];
} else {
delete resp_data.pageDatas[1].categories[0].pageDatas[0];
}
}
// 7、话题页面 微博话题页面
if (url.includes("/2/searchall?")) {
for (let i = 0; i < resp_data.items.length; i++) {
if (resp_data.items[i].data?.mblogtypename === "广告" || resp_data.items[i].data?.ad_state === 1) {
console.log('处理话题页面广告');
resp_data.items[i] = {};
continue;
} else {
deleteCommonAndSemanticBrandParams(resp_data.items[i]);
}
if (resp_data.items[i].items) {
for (let j = 0; j < resp_data.items[i].items.length; j++) {
if (resp_data.items[i].items[j].data?.card_type === 22
|| resp_data.items[i].items[j].data?.ad_state === 1
|| resp_data.items[i].items[j].data?.content_auth_info?.content_auth_title === "广告") {
resp_data.items[i].items[j] = {};
} else {
deleteCommonAndSemanticBrandParams(resp_data.items[i].items[j]);
}
}
}
}
console.log('处理话题页面广告结束💕💕');
}
// 8、超话tab页 微博超话tab页
if (url.includes("/statuses/container_timeline_topic?")) {
let foundFeed = false;
const cardTypes = [19, 179]; // 19热帖/必刷/分类31热搜词179关注的超话
for (let i = 0; i < resp_data.items.length; i++) {
const item = resp_data.items[i];
if (item.data?.is_ad === 1 || item.data?.mblogtypename === "广告") {
resp_data.items[i] = {};
continue;
}
const category = item.category; // feed/card/group
const cardType = item.data?.card_type || "";
if (cardTypes.includes(cardType)) {
console.log(`保留的card_type = ${cardType}`);
continue;
}
// 第一条微博往下的内容只要不是微博(分类、推广等),全部删除
if (foundFeed && category !== "feed") {
resp_data.items[i] = {};
}
if (category === "feed" || category === "card") {
foundFeed = true;
if (category === "card") {
resp_data.items[i] = {};
}
}
if (item.items) {
for (let j = 0; j < item.items.length; j++) {
const subItem = item.items[j];
if (subItem.data?.card_type === 215) {
item.items[j] = {};
}
}
}
}
console.log('处理超话tab页广告结束💕💕');
}
// 8、评论区广告
if (url.includes("/comments/mix_comments?")) {
resp_data.datas = resp_data.datas.filter(item => item.adType !== "广告");
console.log('处理评论区广告结束💕💕');
}
if (url.includes("/statuses/container_detail_comment?") || url.includes("/statuses/container_detail_mix?")) {
resp_data.items = resp_data.items.filter(item => item.type !== "trend" && !item.commentAdType);
console.log('处理评论区广告结束💕💕');
}
// 9、转发区广告
if (url.includes("/statuses/container_detail_forward?")) {
resp_data.items = resp_data.items.filter(item => item.type === "forward");
console.log('处理转发区广告结束💕💕');
}
console.log('广告数据处理完毕🧧🧧');
} catch (e) {
console.log('脚本运行出现错误,部分广告未去除⚠️');
console.log('错误信息:' + e.message);
}
$done({body:JSON.stringify(resp_data)});
/***************************方法主体end*********************************/
function processPayload(payload) {
if (!payload) {
return;
}
// 删除搜索栏的“大家正在搜”
if (payload.loadedInfo?.searchBarContent) {
delete payload.loadedInfo.searchBarContent;
}
if (payload.items[0].items) {
removeCommonAds(payload.items[0].items);
}
removeCommonAds(payload.items);
removeCategoryFeedAds(payload.items);
if (payload.loadedInfo?.headerBack) {
delete payload.loadedInfo.headerBack;
}
}
function removeChannelsTabs(channels) {
// 1001发现1015趋势1016榜单1040热转1041热问1043智搜
const channelIds = [1001, 1015, 1016, 1040, 1041, 1043];
// 反向遍历数组
for (let i = channels.length - 1; i >= 0; i--) {
if (!channelIds.includes(channels[i].id)) {
// 如果当前元素的id不在channelIds中则从原数组中删除该元素
channels.splice(i, 1);
console.log('移除多余的channel💕💕');
}
}
}
function removeHeaderAds(headerItems) {
removeCommonAds(headerItems);
for (let i = 0; i < headerItems.length; i++) {
if (headerItems[i].items) {
removeCommonAds(headerItems[i].items);
}
}
}
function removeCommonAds(items) {
// 模块类型,不在里面的都计划删除
// 17微博热搜101热门微博
const cardTypes = [17, 101];
let firstVerticalFound = false;
for (let i = 0; i < items.length; i++) {
if (items[i].type === "vertical") {
if (!firstVerticalFound) {
firstVerticalFound = true;
continue;
}
console.log('移除内嵌的模块💕💕');
items[i] = {};
continue;
}
const card_type = items[i].data?.card_type;
console.log(`card_type = ${card_type}`);
// 白名单模式
if (card_type && !cardTypes.includes(card_type)) {
console.log(`移除多余的模块:${card_type}💕💕`);
items[i] = {};
continue;
}
// 1.1、"微博热搜"模块
if (card_type === 17) {
console.log('处理微博热搜模块💕💕');
removeHotSearchAds(items[i].data.group);
}
// 118横版广告图片 182热议话题 217错过了热词 247横版视频广告 236微博趋势
// 删除信息流中的图片广告、推广
deleteCommonAndSemanticBrandParams(items[i])
}
}
// 移除“微博热搜”的广告
function removeHotSearchAds(groups) {
if (!groups) return;
console.log('移除发现页热搜广告开始💕');
for (let i = groups.length - 1; i >= 0; i--) {
const group = groups[i];
if (group.itemid?.includes("is_ad_pos") || group.itemid?.includes("cate_type:tongcheng") || group.promotion) {
groups.splice(i, 1);
}
}
console.log('移除发现页热搜广告结束💕💕');
}
// 移除“热搜微博”信息流的广告
function removeCategoryFeedAds(items) {
console.log('移除发现页热门微博广告💕');
for (let i = items.length - 1; i >= 0; i--) {
const item = items[i];
if (item.category === "feed" && item.data && item.data.mblogtypename === "广告") {
items.splice(i, 1);
}
}
}
// 移除微博首页的多余tab页
function removePageDataAds(items) {
console.log('移除微博首页的多余tab页💕');
for (let i = items.length - 1; i >= 0; i--) {
const item = items[i];
if (item.pageDataType === "homeExtend") {
items.splice(i, 1);
}
}
}
// 删除一条微博下面的图片广告
function deleteCommonAndSemanticBrandParams(item) {
// 删除信息流中的图片广告、推广
if (item.data?.extend_info?.shopwindow_cards) {
delete item.data.extend_info.shopwindow_cards
}
if (item.data?.extend_info?.ad_semantic_brand) {
delete item.data.extend_info.ad_semantic_brand
}
if (item.data?.common_struct) {
delete item.data.common_struct;
}
if (item.data?.semantic_brand_params) {
delete item.data.semantic_brand_params;
}
}