mirror of
https://github.com/fmz200/wool_scripts.git
synced 2025-12-19 13:41:18 +08:00
Initial commit: new history
This commit is contained in:
296
Scripts/weibo/weibo_ads.js
Normal file
296
Scripts/weibo/weibo_ads.js
Normal file
@ -0,0 +1,296 @@
|
||||
/**
|
||||
* @author fmz200
|
||||
* @function 微博去广告
|
||||
* @date 2025-06-29 23:00:00
|
||||
*/
|
||||
|
||||
let url = $request.url;
|
||||
let body = $response.body;
|
||||
let resp_data = JSON.parse(body);
|
||||
|
||||
try {
|
||||
// 1、首次点击发现按钮
|
||||
if (url.includes("/search/finder?")) {
|
||||
console.log('进入发现页...');
|
||||
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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 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?.type !== 'share'
|
||||
);
|
||||
}
|
||||
|
||||
// 6、移除微博首页的多余tab页 微博首页Tab标签页
|
||||
if (url.includes("/groups/allgroups/v2")) {
|
||||
removePageDataAds(resp_data.pageDatas);
|
||||
// 删除恶心人的“全部微博”
|
||||
delete resp_data.pageDatas[0].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?")) {
|
||||
resp_data.items = resp_data.items.filter(item => item.type !== "trend");
|
||||
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.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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user