Files
wool_scripts/ProxyPin/scripts/weibo_find_ads.json
2025-06-30 21:59:46 +08:00

2 lines
9.6 KiB
JSON
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.

{"enabled":true,"name":"微博发现页去广告","url":"^https?://api.weibo.cn/2/search/(finder|container_timeline|container_discover)","script":"/**\n * author:fmz200\n * date:2023-11-19 10:13:00\n */\n\n// 在请求到达服务器之前,调用此函数,您可以在此处修改请求数据\nasync function onRequest(context, request) {\n console.log(\"请求URL=\" + request.url);\n //URL参数\n request.queries[\"reqParams\"] = \"value\";\n //更新或添加新标头\n request.headers[\"X-New-Headers\"] = \"My-Value\";\n delete request.headers[\"Key-Need-Delete\"];\n\n //Update Body 使用fetch API请求接口具体文档可网上搜索fetch API\n //request.body = await fetch('https://www.baidu.com/').then(response => response.text());\n\n //共享参数 后面onResponse时取出\n context[\"request_url\"] = request.url;\n return request;\n}\n\nconst url1 = '/search/finder';\nconst url2 = '/search/container_timeline'; // 发现页面\nconst url3 = '/search/container_discover';\nconst url4 = '/api.weibo.cn/2/page'; // 微博热搜页面url\nconst url5 = '/statuses/container_timeline_topicpage'; // 微博超话页面\nconst url6 = '/statuses/extend'; // 微博详情页面广告\nconst url7 = '/groups/allgroups/v2' // 微博首页Tab标签页\n\nconst weiboPic = [\n \"https://raw.githubusercontent.com/fmz200/wool_scripts/main/icons/apps/Weibo-01.png\",\n \"https://raw.githubusercontent.com/fmz200/wool_scripts/main/icons/apps/Weibo-27.png\",\n \"https://raw.githubusercontent.com/fmz200/wool_scripts/main/icons/apps/Weibo-30.png\",\n \"https://raw.githubusercontent.com/fmz200/wool_scripts/main/icons/apps/Weibo-32.png\"\n];\nconst titleSubPicMap = {\n '电影': 'https://simg.s.weibo.com/imgtool/20221207_dianying.png',\n '热议': 'https://simg.s.weibo.com/20220402_hottopic-icon.png',\n '影像年': 'https://simg.s.weibo.com/ads/1%2Fads_1692185628.png',\n '本地': 'https://simg.s.weibo.com/20190123154142_tongcheng.png',\n '亚运电竞': 'https://simg.s.weibo.com/ads/1%2Fads_1694765662.png',\n '直播': 'https://simg.s.weibo.com/20210705_live0705.png',\n '财经': 'https://simg.s.weibo.com/20190124150415_caijing.png',\n '找人': 'https://simg.s.weibo.com/20190125144608_zhaoren.png',\n '时尚': 'https://simg.s.weibo.com/imgtool/20220928_fashion.png',\n '长文': 'https://simg.s.weibo.com/20220621_%E9%95%BF%E6%96%87%E5%8F%91%E7%8E%B0%E9%A1%B5icon%403x.png',\n '赛事': 'https://simg.s.weibo.com/20201030_%E8%B5%9B%E4%BA%8B.png',\n '教育': 'https://simg.s.weibo.com/20200303_edu0303.png',\n '音乐': 'https://simg.s.weibo.com/imgtool/20221207_yinyue.png',\n '房产': 'https://simg.s.weibo.com/20190129182003_house.png',\n '小游戏': 'https://simg.s.weibo.com/20190118185226_youxi.png',\n '美食': 'https://simg.s.weibo.com/imgtool/20221207_food.png',\n '热聊': 'https://simg.s.weibo.com/20220402_reliao.png',\n '新知': 'https://simg.s.weibo.com/20211105_xinzhi.png',\n '微公益': 'https://simg.s.weibo.com/ads/1%2Fads_1689323535.png',\n '大健康': 'https://simg.s.weibo.com/imgtool/20221116_health.png',\n '活动': 'https://simg.s.weibo.com/20200915_huodong.png',\n '母婴': 'https://simg.s.weibo.com/20210222_mombaby.png',\n '珠宝玉石': 'https://simg.s.weibo.com/20210317_yushi.png',\n '游戏中心': 'https://simg.s.weibo.com/ads/1%2Fads_1687759038.png'\n};\nlet index = 1;\n\n// 在将响应数据发送到客户端之前,调用此函数,您可以在此处修改响应数据\nasync function onResponse(context, request, response) {\n // 更新或添加新标头\n // response.headers[\"Name\"] = context[\"name\"];\n\n // Update status Code\n // response.statusCode = 500;\n\n let url = context[\"request_url\"];\n let body = response.body;\n console.log(\"响应URL=\" + url);\n try {\n body = modifyMain(url, body);\n } catch (e) {\n console.log('脚本运行出现错误,部分广告未去除⚠️');\n console.log('错误信息:' + e.message);\n }\n\n response.body = JSON.stringify(body);\n return response;\n}\n\nfunction modifyMain(url, data) {\n let resp_data = JSON.parse(data);\n // 1、首次点击发现按钮\n if (url.includes(url1)) {\n const payload = resp_data.channelInfo?.channels?.[0]?.payload;\n console.log('进入发现页...');\n if (payload.items[1].data.itemid === \"hot_search_push\") {\n index = 2;\n }\n\n // 1.1、下标是1的为热搜模块\n payload.items[index].data.group = removeHotSearchAds(payload.items[index].data.group);\n\n // 1.2、下标为2的是轮播图模块\n console.log('移除轮播模块💕💕');\n payload.items[index + 1] = {};\n\n // 1.3、下标为3的是热议模块\n console.log('移除finder_channel模块💕💕');\n if (payload.items[index + 2].data?.more_pic?.includes('ads')) {\n delete payload.items[index + 2].data.more_pic;\n }\n payload.items[index + 2].data.group = removeFinderChannelAds(payload.items[index + 2].data.group);\n\n // 1.4、items[i].category = \"feed\" 是热门微博的部分\n payload.items = removeCategoryFeedAds(payload.items);\n\n // 1.5、背景图广告\n if (payload.loadedInfo?.headerBack) {\n delete payload.loadedInfo.headerBack;\n }\n\n return JSON.stringify(resp_data);\n }\n\n // 2、发现页面刷新/再次点击发现按钮\n if (url.includes(url2) || url.includes(url3)) {\n console.log('刷新发现页...');\n if (resp_data.items[1].data.itemid === \"hot_search_push\") {\n index = 2;\n }\n\n // 2.1、下标是1的为热搜模块\n resp_data.items[index].data.group = removeHotSearchAds(resp_data.items[index].data.group);\n\n // 2.2、下标为2的是轮播图模块\n console.log('移除轮播图模块🤣🤣');\n resp_data.items[index + 1] = {};\n\n // 2.3、下标为3的是热议模块\n console.log('移除finder_channel模块💕💕');\n if (resp_data.items[index + 2].data?.more_pic?.includes('ads')) {\n delete resp_data.items[index + 2].data.more_pic;\n }\n resp_data.items[index + 2].data.group = removeFinderChannelAds(resp_data.items[index + 2].data.group);\n\n // 2.4、items[i].category = \"feed\" 是热门微博的部分\n resp_data.items = removeCategoryFeedAds(resp_data.items);\n\n // 2.5、背景图广告\n if (resp_data.loadedInfo?.headerBack) {\n delete resp_data.loadedInfo.headerBack;\n }\n return JSON.stringify(resp_data);\n }\n\n // 3、微博热搜页面刷新\n if (url.includes(url4) && resp_data.cards && resp_data.cards[0].card_group) {\n console.log('微博热搜页面广告开始💕');\n resp_data.cards[0].card_group = resp_data.cards[0].card_group.filter(group => group.promotion == null);\n console.log('微博热搜页面广告结束💕💕');\n return JSON.stringify(resp_data);\n }\n\n // 4、微博超话页面\n if (url.includes(url5) && resp_data.items) {\n console.log('微博超话页面广告开始💕');\n resp_data.items = resp_data.items.filter(item => !item.data || item.data.mblogtypename !== \"广告\");\n console.log('微博超话页面广告结束💕💕');\n return JSON.stringify(resp_data);\n }\n\n // 5、微博超话页面\n if (url.includes(url6)) {\n console.log('微博详情页面广告开始💕');\n resp_data.head_cards = [];\n console.log('微博详情页面广告结束💕💕');\n return JSON.stringify(resp_data);\n }\n\n // 6、移除微博首页的多余tab页\n if (url.includes(url7)) {\n resp_data.pageDatas = removePageDataAds(resp_data.pageDatas);\n swapObjectsInArray(resp_data.pageDatas[0].categories[0].pageDatas, 0, 1);\n return JSON.stringify(resp_data);\n }\n\n console.log('没有广告数据🧧🧧');\n return data;\n}\n\n// 移除“微博热搜”的广告\nfunction removeHotSearchAds(groups) {\n if (!groups) return;\n console.log('移除发现页热搜广告开始💕');\n const newGroups = groups.filter(group => !(group.itemid?.includes(\"is_ad_pos\") || group.promotion));\n console.log('移除发现页热搜广告结束💕💕');\n return newGroups;\n}\n\n// 移除“微博热搜”下面的“热聊,本地等”的广告\nfunction removeFinderChannelAds(groups) {\n if (!groups) return;\n console.log('移除发现页finder_channel广告开始💕');\n const newGroups = [];\n for (const group of groups) {\n if (group.pic?.includes('ads')) {\n group.pic = titleSubPicMap[group.title_sub] || \"https://simg.s.weibo.com/20200915_huodong.png\";\n }\n newGroups.push(group);\n }\n console.log('移除发现页finder_channel广告结束💕💕');\n return newGroups;\n}\n\n// 移除“热搜微博”信息流的广告\nfunction removeCategoryFeedAds(items) {\n console.log('移除发现页热门微博广告开始💕');\n const newItems = items.filter(item => item.category !== \"feed\" || (item.data && item.data.mblogtypename !== \"广告\"));\n console.log('移除发现页热门微博广告结束💕💕');\n return newItems;\n}\n\n// 移除微博首页的多余tab页\nfunction removePageDataAds(items) {\n console.log('移除微博首页的多余tab页开始💕');\n const newItems = items.filter(item => item.pageDataType !== \"homeExtend\");\n console.log('移除微博首页的多余tab页结束💕💕');\n return newItems;\n}\n\n// 交换集合中两个对象的位置\nfunction swapObjectsInArray(array, index1, index2) {\n console.log('交换tab页顺序开始💕');\n const temp = array[index1];\n array[index1] = array[index2];\n array[index2] = temp;\n\n array[index2].type = array[index1].type;\n array[index2].apipath = \"statuses/container_timeline_unread\";\n delete array[index2].navigation_title;\n console.log('交换tab页顺序结束💕💕');\n}"}