From 936165178a580329156b10080d762f3ea2e9a0ec Mon Sep 17 00:00:00 2001 From: blackmatrix7 <27717518+blackmatrix7@users.noreply.github.com> Date: Mon, 4 Oct 2021 01:34:07 +0800 Subject: [PATCH] =?UTF-8?q?[=E7=9F=A5=E4=B9=8E=E5=8A=A9=E6=89=8B]=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=8E=A8=E8=8D=90=E9=A1=B5=E6=AD=A3=E5=88=99=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=8F=8ABoxJS=E5=8A=9F=E8=83=BD=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/boxjs.json | 206 +++++++---- script/zhihu/README.md | 129 +++---- script/zhihu/images/06.jpg | Bin 11576 -> 42440 bytes script/zhihu/images/07.jpg | Bin 0 -> 95521 bytes script/zhihu/zhihu_lite.lnplugin | 14 +- script/zhihu/zhihu_lite.qxrewrite | 14 +- script/zhihu/zhihu_lite.sgmodule | 14 +- script/zhihu/zhihu_plus.js | 592 ++++++++++++++---------------- script/zhihu/zhihu_plus.lnplugin | 6 +- script/zhihu/zhihu_plus.qxrewrite | 6 +- script/zhihu/zhihu_plus.sgmodule | 4 +- 11 files changed, 495 insertions(+), 490 deletions(-) create mode 100644 script/zhihu/images/07.jpg diff --git a/script/boxjs.json b/script/boxjs.json index 1f02c947842..75fdf96844d 100644 --- a/script/boxjs.json +++ b/script/boxjs.json @@ -11,10 +11,7 @@ "keys": ["unicom_user_cookie", "unicom_mobile", "unicom_encrypt_mobile", "city_code"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/10010", - "icons": [ - "https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/10010.png", - "https://raw.githubusercontent.com/Orz-3/mini/master/Color/10010.png" - ], + "icons": ["https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/10010.png", "https://raw.githubusercontent.com/Orz-3/mini/master/Color/10010.png"], "script": "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/10010/unicom_signin.js" }, { @@ -35,10 +32,7 @@ ], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/bilibili", - "icons": [ - "https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/bilibili.png", - "https://raw.githubusercontent.com/Orz-3/mini/master/Color/bilibili.png" - ] + "icons": ["https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/bilibili.png", "https://raw.githubusercontent.com/Orz-3/mini/master/Color/bilibili.png"] }, { "id": "blackmatrix7.didachuxing", @@ -46,30 +40,16 @@ "keys": ["dida_cid", "dida_cookie", "dida_useragent", "dida_access_token"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/didachuxing", - "icons": [ - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/didachuxing/didachuxing.png", - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/didachuxing/didachuxing.png" - ], + "icons": ["https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/didachuxing/didachuxing.png", "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/didachuxing/didachuxing.png"], "script": "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/didachuxing/didachuxing_plus.js" }, { "id": "blackmatrix7.didichuxing", "name": "滴滴出行", - "keys": [ - "didi_token", - "didi_city_id", - "didi_lottery_id", - "didi_my_source_id", - "didi_group_id", - "didi_finance_channel_id", - "didi_finance_activity_id" - ], + "keys": ["didi_token", "didi_city_id", "didi_lottery_id", "didi_my_source_id", "didi_group_id", "didi_finance_channel_id", "didi_finance_activity_id"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/didichuxing", - "icons": [ - "https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/didi.png", - "https://raw.githubusercontent.com/Orz-3/mini/master/Color/didi.png" - ], + "icons": ["https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/didi.png", "https://raw.githubusercontent.com/Orz-3/mini/master/Color/didi.png"], "script": "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/didichuxing/didi_checkin.js" }, { @@ -78,10 +58,7 @@ "keys": ["dingdongmaicai_checkin_cookie", "dingdongmaicai_checkin_body"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/dingdong", - "icons": [ - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/dingdong/dingdong.png", - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/dingdong/dingdong.png" - ], + "icons": ["https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/dingdong/dingdong.png", "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/dingdong/dingdong.png"], "script": "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/dingdong/dingdong_checkin.js" }, { @@ -90,10 +67,7 @@ "keys": ["eleme_app_cookie", "eleme_app_longitude", "eleme_app_latitude"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/eleme", - "icons": [ - "https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/elem.png", - "https://raw.githubusercontent.com/Orz-3/mini/master/Color/elem.png" - ], + "icons": ["https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/elem.png", "https://raw.githubusercontent.com/Orz-3/mini/master/Color/elem.png"], "scripts": [ { "name": "领取吃货豆", @@ -111,10 +85,7 @@ "keys": ["famijia_checkin_cookie", "famijia_device_id", "famijia_black_box"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/famijia", - "icons": [ - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/famijia/famijia.png", - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/famijia/famijia.png" - ], + "icons": ["https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/famijia/famijia.png", "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/famijia/famijia.png"], "script": "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/famijia/famijia_checkin.js" }, { @@ -123,10 +94,7 @@ "keys": ["luka_checkin_cookie", "luka_signin_auth"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/luka", - "icons": [ - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/luka/luka.png", - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/luka/luka.png" - ], + "icons": ["https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/luka/luka.png", "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/luka/luka.png"], "script": "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/luka/luka_signin.js" }, { @@ -135,29 +103,16 @@ "keys": ["manmanbuy_checkin_cookie", "manmanbuy_login_body", "manmanbuy_username", "manmanbuy_deviceid"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/manmanbuy", - "icons": [ - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/manmanbuy/manmanmai.png", - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/manmanbuy/manmanmai.png" - ], + "icons": ["https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/manmanbuy/manmanmai.png", "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/manmanbuy/manmanmai.png"], "script": "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/manmanbuy/manmanbuy_checkin.js" }, { "id": "blackmatrix7.meituan", "name": "美团买菜", - "keys": [ - "meituan_mall_cookie", - "meituan_mall_t", - "meituan_mall_querystring", - "meituan_mall_uuid", - "meituan_mall_userid", - "meituan_mall_body" - ], + "keys": ["meituan_mall_cookie", "meituan_mall_t", "meituan_mall_querystring", "meituan_mall_uuid", "meituan_mall_userid", "meituan_mall_body"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/meituan", - "icons": [ - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/meituan/maicai.png", - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/meituan/maicai.png" - ], + "icons": ["https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/meituan/maicai.png", "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/meituan/maicai.png"], "script": "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/meituan/maicai_checkin.js" }, { @@ -166,10 +121,7 @@ "keys": ["smzdm_cookie", "smzdm_session"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/smzdm", - "icons": [ - "https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/smzdm.png", - "https://raw.githubusercontent.com/Orz-3/mini/master/Color/smzdm.png" - ], + "icons": ["https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/smzdm.png", "https://raw.githubusercontent.com/Orz-3/mini/master/Color/smzdm.png"], "scripts": [ { "name": "每日自动任务", @@ -187,10 +139,7 @@ "keys": ["tieba_checkin_cookie"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/tieba", - "icons": [ - "https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/tieba.png", - "https://raw.githubusercontent.com/Orz-3/mini/master/Color/tieba.png" - ], + "icons": ["https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/tieba.png", "https://raw.githubusercontent.com/Orz-3/mini/master/Color/tieba.png"], "script": "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/tieba/tieba_checkin.js" }, { @@ -199,10 +148,7 @@ "keys": ["wanda_checkin_cookie", "wanda_activitycode"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/wanda", - "icons": [ - "https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/wanda.png", - "https://raw.githubusercontent.com/Orz-3/mini/master/Color/wanda.png" - ], + "icons": ["https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/wanda.png", "https://raw.githubusercontent.com/Orz-3/mini/master/Color/wanda.png"], "script": "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/wanda/wanda_checkin.js" }, { @@ -211,15 +157,124 @@ "keys": ["zhihu_blocked_users", "zhihu_current_userinfo", "zhihu_keyword_block"], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/zhihu", - "icons": [ - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu.png", - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu.png" - ], + "icons": ["https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu.png", "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu.png"], + "descs_html": ["

具体功能说明查看README.md

", "

✨为Plus版本专属功能,❓为已过时或即将淘汰功能

", "

切换Lite、Plus版本,或出现异常请执行数据清理

"], "scripts": [ { "name": "知乎助手数据清理", "script": "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js" } + ], + "settings": [ + { + "id": "zhihu_settings_recommend_stream", + "name": "屏蔽推荐页流媒体", + "val": false, + "type": "boolean", + "desc": "屏蔽推荐页中的视频、直播等流媒体信息" + }, + { + "id": "zhihu_settings_moments_stream", + "name": "屏蔽关注页流媒体", + "val": false, + "type": "boolean", + "desc": "屏蔽关注页中的“最新视频”" + }, + { + "id": "zhihu_settings_hot_list", + "name": "热榜去广告", + "val": true, + "type": "boolean", + "desc": "去除知乎热榜页面的广告" + }, + { + "id": "zhihu_settings_fake_vip", + "name": "显示为盐选会员", + "val": false, + "type": "boolean", + "desc": "非会员用户显示为盐选会员,仅自己可见,无实际效果" + }, + { + "id": "zhihu_settings_preset_words", + "name": "屏蔽预置关键词广告", + "val": false, + "type": "boolean", + "desc": "屏蔽搜索页中的预置关键词广告" + }, + { + "id": "zhihu_settings_blocked_users", + "name": "黑名单屏蔽效果增强✨", + "val": true, + "type": "boolean", + "desc": "增强知乎APP黑名单用户屏蔽效果" + }, + { + "id": "zhihu_settings_blocked_keywords", + "name": "推荐页关键词过滤✨", + "val": true, + "type": "boolean", + "desc": "除普通关键词外还支持正则表达式过滤" + }, + { + "id": "zhihu_settings_sys_msg", + "name": "屏蔽官方账号推广消息✨", + "val": false, + "type": "boolean", + "desc": "屏蔽消息页内的官方账号推广消息" + }, + { + "id": "zhihu_settings_answer_tip", + "name": "付费内容/营销推广/购物推广提醒✨", + "val": true, + "type": "boolean", + "desc": "在知乎回答中提示付费或营销内容" + }, + { + "id": "zhihu_settings_remove_yanxuan", + "name": "屏蔽“盐选推荐”❓", + "val": true, + "type": "boolean", + "desc": "屏蔽推荐页中的“盐选推荐”" + }, + { + "id": "zhihu_settings_app_conf", + "name": "去除推荐页多余标签❓", + "val": false, + "type": "boolean", + "desc": "知乎7.x及以上版本无效" + }, + { + "id": "zhihu_settings_hot_search", + "name": "知乎热搜去广告❓", + "val": false, + "type": "boolean", + "desc": "知乎7.x及以上版本无效" + }, + { + "id": "magicjs_loglevel", + "name": "日志等级", + "val": "INFO", + "type": "radios", + "items": [ + { + "key": "INFO", + "label": "INFO" + }, + { + "key": "WARNING", + "label": "WARNING" + }, + { + "key": "ERROR", + "label": "ERROR" + }, + { + "key": "DEBUG", + "label": "DEBUG" + } + ], + "desc": "出现异常时请选择DEBUG提交日志" + } ] }, { @@ -266,10 +321,7 @@ ], "author": "@blackmatrix7", "repo": "https://github.com/blackmatrix7/ios_rule_script/tree/master/script/synology", - "icons": [ - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/synology/icon/synology_dark.jpg", - "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/synology/icon/synology.jpg" - ], + "icons": ["https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/synology/icon/synology_dark.jpg", "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/synology/icon/synology.jpg"], "scripts": [ { "name": "登录Synology", diff --git a/script/zhihu/README.md b/script/zhihu/README.md index ea22bbe10b8..e2a766c733e 100644 --- a/script/zhihu/README.md +++ b/script/zhihu/README.md @@ -6,74 +6,53 @@ 分为Plus和Lite两个版本,Lite只提供最纯粹的去广告功能,Plus带有一些优化阅读体验的功能。 -目前已实现(带✨的为Plus版本的功能): +目前已实现 (✨的为Plus版本的功能,❓为过时或即将删除的功能): 1. 去除知乎的启动广告 -2. 去除关注列表的广告 -3. 去除推荐列表的广告 +2. 去除关注页的广告 +3. 去除推荐页的广告 4. 去除回答列表的广告 5. 去除回答列表的圆桌 6. 去除回答页面的广告 7. 去除知乎直播红点 8. 去除知乎指南提示 9. 去除未读消息的红点 -10. 知乎网页版去广告 [#21](https://github.com/blackmatrix7/ios_rule_script/issues/21) 11. 拦截知乎内测邀请 -12. 去除预置关键字广告(beta) -13. 去除热搜内的广告(beta) -14. 去除热榜内的广告(beta) -15. 去除评论区内的广告(beta) -16. 客户端中显示自己是盐选会员(除了自娱自乐没任何用途) -17. 直接运行脚本可清理客户端内持久化的数据 -18. 付费内容文首提醒(beta)✨ -19. 推广内容文首提醒(beta)✨ +12. 去除预置关键字广告 +14. 去除热榜内的广告 +15. 去除评论区内的广告 +14. 去除关注页顶部的最新视频 +15. 客户端中显示自己是盐选会员 +16. 直接运行脚本可清理客户端内持久化的数据 +17. 部分功能支持BoxJS配置(alpha) +18. 付费内容文首提醒✨ +19. 推广内容文首提醒✨ 20. 拦截部分回答预加载以节约流量✨ -21. 去除推荐列表的付费推荐内容✨ -22. 去除官方账号的推广消息✨ -23. 去除推荐列表中黑名单用户的回答✨ -24. 去除回答列表中黑名单用户的回答✨ -25. 去除关注列表顶部的最常访问✨ -26. 精简首页顶部的标签页✨ -27. 屏蔽消息页面的知乎活动助手✨ -28. 减少推荐列表内的视频(alpha)✨ -29. 拦截知乎下发的配置,如皮肤(alpha)✨ -30. 新旧版评论区黑名单用户过滤✨ -31. 屏蔽转发的黑名单用户的想法✨ -32. 非盐选会员屏蔽关键字解锁✨ - -隐藏功能: - -隐藏功能默认不生效,需要自行根据脚本中的注释简单修改代码实现。 - -如果你不清楚如何修改代码,请不要尝试,目前不处理任何自行修改代码引起的异常。 - -1. 去除推荐列表中的视频 -2. 去除推荐列表中的直播 -3. 脚本内置的黑名单用户 -4. 调整允许设置屏蔽关键词的数量 -5. 屏蔽推荐列表中的盐选推荐内容 +21. 去除官方账号的推广消息✨ +22. 去除推荐页中黑名单用户的回答✨ +23. 去除回答列表中黑名单用户的回答✨ +24. 去除关注页顶部的最常访问✨ +25. 精简首页顶部的标签页✨ +26. 屏蔽消息页面的知乎活动助手✨ +27. 新旧版评论区黑名单用户过滤✨ +28. 屏蔽转发的黑名单用户的想法✨ +29. 推荐页屏蔽关键词解锁✨ +30. 知乎网页版去广告 [#21](https://github.com/blackmatrix7/ios_rule_script/issues/21)❓ +31. 去除热搜内的广告❓ +32. 屏蔽推荐页中的盐选推荐内容❓ +33. 拦截知乎下发的配置,如皮肤(alpha)✨❓ +34. 减少推荐页内的视频(alpha)✨❓ +35. 去除推荐页的付费推荐内容✨❓ ## 最近更新 -1. 修复偶尔获取不到用户信息导致黑名单失效的问题 -2. 修复官方营销消息在某些情况下屏蔽失效的问题 -3. 修复重新获取黑名单时没有清理历史脚本黑名单数据的问题 -4. 去除推荐列表中盐选专栏的文章 -5. 非盐选会员现在也可以使用屏蔽关键字的功能 -6. 查看其他用户信息时,如果已经是黑名单用户,会自动加入脚本黑名单 -7. 新旧版评论区黑名单用户过滤 -8. 直接运行脚本可清理客户端内持久化的数据 -9. 客户端中显示自己是盐选会员(除了自娱自乐没任何用途) -10. 修复知乎视频无法自动播放的问题 -11. 去除热搜内的广告(beta) -12. 去除热榜内的广告(beta) -13. 强化精简首页顶部标签页的功能(清理缓存后生效) -14. 拦截知乎下发的配置,如皮肤 -15. 去除评论区内的广告(beta) +1. 推荐页关键词屏蔽支持正则表达式 +2. 加入BoxJS配置开关 +3. 提高推荐页屏蔽效率 ## 版本切换 -在Lite版本和Plus版本切换时,务必手动运行一次脚本,清理持久化数据,以免影响切换效果。 +**在Lite版本和Plus版本切换时,务必手动运行一次脚本,清理持久化数据,以免影响切换效果。** 清理持久化数据后,如果使用Plus版本,请重新获取黑名单。 @@ -104,25 +83,33 @@ ## 部分功能说明 -### 屏蔽关键词解锁(alpha) +### BoxJS可选配置(alpha) -现在非会员,可以在设置-屏蔽设置-屏蔽关键词中使用此功能;**真正的盐选会员此功能不会生效。** +部分功能支持BoxJS配置,目前还在测试阶段,配置项可能有所增减。 -此功能并非真正解锁会员特权,只是借用知乎APP的操作界面,通过脚本实现的关键词屏蔽。 +如果有问题请将日志等级设置到DEBUG后提交反馈。 -与会员真正的屏蔽关键词功能相比,执行效率和匹配范围都较差,所以限制只能设置20个关键词。关键词是与整个JSON字符串进行比较,所以在设置关键词时,尽量不要使用英文和标点,否则一旦和JSON对象的key相同,会导致推荐列表无任何显示。如果一定要使用英文单词和标点,务必清楚自己在做什么。 +Lite版本请确保所有Plus版本的选项都为关闭状态,以减少不必要的代码执行。 + + + +### 屏蔽关键词解锁 + +现在非会员和会员都可以在“设置-屏蔽设置-屏蔽关键词”中使用此功能。 + +**真正的盐选会员,使用此脚本后,会覆盖掉盐选会员的的配置功能,但已配置好的关键词不会失效。如果不需要此功能,可以在BoxJS中永久关闭。** + +此功能并非真正解锁会员特权,只是借用知乎APP的操作界面,通过脚本实现的关键词屏蔽。如果你已经是尊贵的盐选会员,建议关闭此功能,使用盐选会员自带的关键词屏蔽。 + +知乎助手的关键词解锁额外提供了正则表达式的屏蔽功能,可以实现一些较复杂的判断逻辑,及提高屏蔽效率。比如关键词设置`男士.*(沐浴露|香水)+`,表示只有“男士”和“沐浴露”或“香水”共同出现时才进行屏蔽。而`(羊毛|优惠|红包)+`,表示“羊毛”、“优惠”、“红包”出现任意一个关键词就进行屏蔽,可以替代原先的羊毛”、“优惠”、“红包”三个关键词,减少关键词数量,提高屏蔽效率。 #### 小技巧 -添加关键字 `zvideo`,可屏蔽推荐列表中的视频。 +通过抓包获取推荐页的数据,可以通过正则屏蔽任意内容。 -理论上,通过抓包获取的各种类型数据,只要能在响应的json中找到对应的关键字,都可以通过“关键字屏蔽”功能实现过滤。 - -**当用户为盐选会员时,脚本的关键字屏蔽功能不生效,所以对会员没有效果。** - -### 付费内容提醒(beta) +### 付费内容提醒 遇到需要付费阅读的回答时,会**将付费内容的提醒置顶**。避免阅读中途发现内容需要付费的情况,提高阅读体验。 @@ -130,21 +117,17 @@ -### 推广内容提醒(beta) +### 推广内容提醒 遇到含有营销推广/购物推广内容的回答时,会将含有推广内容的提醒置顶,自行判断是否继续阅读。 -### 精简顶部标签页 - -精简顶部标签页的功能,需要对原先拦截的appcloud2.zhihu.com域名进行放行,通过脚本对Response进行修改以实现此功能。**原先有对此域名进行拦截的规则,务必进行去除,否则功能不会生效。** - ### 黑名单增强 -知乎的黑名单设计,无法屏蔽黑名单用户的公开信息。将某人拉黑后,他的回答依旧会出现在推荐列表和回答列表中。 +知乎的黑名单设计,无法屏蔽黑名单用户的公开信息。将某人拉黑后,他的回答依旧会出现在推荐页和回答列表中。 -黑名单增强就是对黑名单用户的回答进行屏蔽,让他的回答从推荐列表和回答列表中消失。(如果只为在推荐列表屏蔽某人,建议用知乎提供的屏蔽用户的方法,这是在服务器端进行的更加高效的屏蔽。) +黑名单增强就是对黑名单用户的回答进行屏蔽,让他的回答从推荐页和回答列表、评论和想法中消失。(如果只为在推荐页屏蔽某人,建议用知乎提供的屏蔽用户的方法,这是在服务器端进行的更加高效的屏蔽。) 黑名单匹配方式为用户名,同名用户都会被屏蔽,“[已重置]”除外。 @@ -178,6 +161,8 @@ https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhi ### Loon +使用插件 + ```ini [Plugin] https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.lnplugin, tag=知乎助手_去广告及体验增强, enabled=true @@ -194,9 +179,9 @@ IP-CIDR,118.89.204.198/32,REJECT IP6-CIDR,2402:4e00:1200:ed00:0:9089:6dac:96b6/128,REJECT HOST,118.89.204.198,REJECT # 知乎去广告,以下规则的位置越前方越好 +HOST,appcloud2.in.zhihu.com,REJECT HOST,mqtt.zhihu.com,reject HOST,sugar.zhihu.com,reject -HOST,appcloud2.in.zhihu.com,REJECT USER-AGENT,AVOS*,REJECT [rewrite_remote] @@ -233,9 +218,9 @@ IP-CIDR,118.89.204.198/32,REJECT IP6-CIDR,2402:4e00:1200:ed00:0:9089:6dac:96b6/128,REJECT HOST,118.89.204.198,REJECT # 知乎去广告,以下规则的位置越前方越好 +HOST,appcloud2.in.zhihu.com,REJECT HOST,mqtt.zhihu.com,reject HOST,sugar.zhihu.com,reject -HOST,appcloud2.in.zhihu.com,REJECT USER-AGENT,AVOS*,REJECT [rewrite_remote] @@ -248,7 +233,7 @@ https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhi 对于脚本内置的黑名单,**保持谨慎和克制的原则**,只加入无法通过加入黑名单进行屏蔽的账号。如需要屏蔽更多的账户,可以由使用者手动将其加入黑名单来实现。 -推荐列表中脚本内置的黑名单基本上都已去除,只保留”会员推荐“等几个,因为这些都不是账号,不能通过加入黑名单来屏蔽。并且, 会员推荐的屏蔽功能,只有在你获取过一次黑名单后才会生效。如果你用的是Lite版本,完全不用担心屏蔽问题。 +推荐页中脚本内置的黑名单基本上都已去除,只保留”会员推荐“等几个,因为这些都不是账号,不能通过加入黑名单来屏蔽。并且, 会员推荐的屏蔽功能,只有在你获取过一次黑名单后才会生效。如果你用的是Lite版本,完全不用担心屏蔽问题。 官方消息中脚本内置的黑名单也仅保留无法加入黑名单的营销账号,其他的如果需要屏蔽,手动把它们加入黑名单就好。 diff --git a/script/zhihu/images/06.jpg b/script/zhihu/images/06.jpg index 8ec5dbb2384cf6171d888fc6cdc1dba7ab55a0ec..83ca934be774a2961d71198ca5cb6a221a4f068a 100644 GIT binary patch literal 42440 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

G<=sk)^p8P!^3TN*W0cav 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 literal 11576 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 IBfw_<4+GN-l>h($ diff --git a/script/zhihu/images/07.jpg b/script/zhihu/images/07.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98e42527fa711b529cd48d75a3e7aea6b66cb2bc GIT binary patch literal 95521 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 literal 0 HcmV?d00001 diff --git a/script/zhihu/zhihu_lite.lnplugin b/script/zhihu/zhihu_lite.lnplugin index 397270e34e7..c5554f0c0a0 100644 --- a/script/zhihu/zhihu_lite.lnplugin +++ b/script/zhihu/zhihu_lite.lnplugin @@ -28,13 +28,13 @@ URL-REGEX,^https?:\/\/www\.zhihu\.com\/api\/v\d+\/brand\/question/\d+/card\?,REJ ^https?:\/\/www\.zhihu\.com\/api\/v\d+\/brand\/question/\d+/card\? - reject-dict [Script] -http-response ^https?:\/\/api\.zhihu\.com\/people requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_处理用户信息 -http-response ^https?:\/\/api\.zhihu\.com\/(moments|topstory)(\/|\?)?(recommend|action=|feed_type=) requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_信息流去广告 -http-response ^https?:\/\/api\.zhihu\.com\/v4\/questions requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_回答列表去广告 -http-response ^https?:\/\/api\.zhihu\.com\/search\/preset_words\? requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_预置关键词去广告 -http-response ^https?:\/\/api\.zhihu\.com\/search\/top_search\/tabs\/hot\/items requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_热搜去广告 -http-response ^https?:\/\/api\.zhihu\.com\/topstory\/hot-lists?(\?|\/) requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_热榜去广告 -http-response ^https?:\/\/api\.zhihu\.com\/(comment_v5\/)?(answers|comments?|articles|pins)\/\d+\/(root_|child_)?comments? requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_评论去广告 +http-response ^https?:\/\/api\.zhihu\.com\/people requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js,tag=知乎_处理用户信息 +http-response ^https?:\/\/api\.zhihu\.com\/(moments|topstory)(\/|\?)?(recommend|action=|feed_type=) requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js,tag=知乎_信息流去广告 +http-response ^https?:\/\/api\.zhihu\.com\/v4\/questions requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js,tag=知乎_回答列表去广告 +http-response ^https?:\/\/api\.zhihu\.com\/search\/preset_words\? requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js,tag=知乎_预置关键词去广告 +http-response ^https?:\/\/api\.zhihu\.com\/search\/top_search\/tabs\/hot\/items requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js,tag=知乎_热搜去广告 +http-response ^https?:\/\/api\.zhihu\.com\/topstory\/hot-lists?(\?|\/) requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js,tag=知乎_热榜去广告 +http-response ^https?:\/\/api\.zhihu\.com\/(comment_v5\/)?(answers|comments?|articles|pins)\/\d+\/(root_|child_)?comments? requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js,tag=知乎_评论去广告 [MITM] hostname = www.zhihu.com,api.zhihu.com,zhuanlan.zhihu.com \ No newline at end of file diff --git a/script/zhihu/zhihu_lite.qxrewrite b/script/zhihu/zhihu_lite.qxrewrite index 7cd1f1e71d9..bb95d4af858 100644 --- a/script/zhihu/zhihu_lite.qxrewrite +++ b/script/zhihu/zhihu_lite.qxrewrite @@ -1,17 +1,17 @@ # 知乎处理用户信息 -^https?:\/\/api\.zhihu\.com\/people\/ url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js +^https?:\/\/api\.zhihu\.com\/people\/ url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js # 知乎信息流去广告 -^https?:\/\/api\.zhihu\.com\/(moments|topstory)(\/|\?)?(recommend|action=|feed_type=)(?!\/people) url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js +^https?:\/\/api\.zhihu\.com\/(moments|topstory)(\/|\?)?(recommend|action=|feed_type=)(?!\/people) url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js # 知乎回答列表去广告 -^https?:\/\/api\.zhihu\.com\/v4\/questions url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js +^https?:\/\/api\.zhihu\.com\/v4\/questions url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js # 知乎预置关键词去广告 -^https?:\/\/api\.zhihu\.com\/search\/preset_words\? url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js +^https?:\/\/api\.zhihu\.com\/search\/preset_words\? url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js # 知乎热搜去广告 -^https?:\/\/api\.zhihu\.com\/search\/top_search\/tabs\/hot\/items url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js +^https?:\/\/api\.zhihu\.com\/search\/top_search\/tabs\/hot\/items url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js # 知乎热榜去广告 -^https?:\/\/api\.zhihu\.com\/topstory\/hot-lists?(\?|\/) url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js +^https?:\/\/api\.zhihu\.com\/topstory\/hot-lists?(\?|\/) url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js # 知乎评论去广告 -^https?:\/\/api\.zhihu\.com\/(comment_v5\/)?(answers|comments?|articles|pins)\/\d+\/(root_|child_)?comments? url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js +^https?:\/\/api\.zhihu\.com\/(comment_v5\/)?(answers|comments?|articles|pins)\/\d+\/(root_|child_)?comments? url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js # 知乎去除回答下的广告 ^https?:\/\/www\.zhihu\.com\/api\/v4\/answers\/\d+\/recommendations url reject-dict # 知乎其他广告拦截 diff --git a/script/zhihu/zhihu_lite.sgmodule b/script/zhihu/zhihu_lite.sgmodule index 6b5b0ffd418..210a189d234 100644 --- a/script/zhihu/zhihu_lite.sgmodule +++ b/script/zhihu/zhihu_lite.sgmodule @@ -10,13 +10,13 @@ RULE-SET,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/s ^https?:\/\/api\.zhihu\.com\/(notifications\/v\d\/count|v\d\/package|me\/guides|drama\/living-info|ad|fringe|commercial|market\/popovers|.*featured-comment-ad) data="https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/blank/blank_dict.json" [Script] -知乎_处理用户信息 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/people\/,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js -知乎_信息流去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/(moments|topstory)(\/|\?)?(recommend|action=|feed_type=)(?!\/people),script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js -知乎_回答列表去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/v4\/questions,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js -知乎_预置关键词去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/search\/preset_words\?,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js -知乎_热搜去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/search\/top_search\/tabs\/hot\/items,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js -知乎_热榜去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/topstory\/hot-lists?(\?|\/),script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js -知乎_评论去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/(comment_v5\/)?(answers|comments?|articles|pins)\/\d+\/(root_|child_)?comments?,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js +知乎_处理用户信息 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/people\/,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js +知乎_信息流去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/(moments|topstory)(\/|\?)?(recommend|action=|feed_type=)(?!\/people),script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js +知乎_回答列表去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/v4\/questions,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js +知乎_预置关键词去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/search\/preset_words\?,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js +知乎_热搜去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/search\/top_search\/tabs\/hot\/items,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js +知乎_热榜去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/topstory\/hot-lists?(\?|\/),script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js +知乎_评论去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/api\.zhihu\.com\/(comment_v5\/)?(answers|comments?|articles|pins)\/\d+\/(root_|child_)?comments?,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.min.js [MITM] hostname = %APPEND% www.zhihu.com,api.zhihu.com,zhuanlan.zhihu.com \ No newline at end of file diff --git a/script/zhihu/zhihu_plus.js b/script/zhihu/zhihu_plus.js index e20c788745b..2f8b51fc2d9 100644 --- a/script/zhihu/zhihu_plus.js +++ b/script/zhihu/zhihu_plus.js @@ -12,7 +12,7 @@ let magicJS = MagicJS(scriptName, "INFO"); if (magicJS.isResponse) { switch (true) { // 回答内容优化 - case /^https?:\/\/www\.zhihu\.com\/appview\/v2\/answer\/.*(entry=(?!(preload-topstory|preload-search|preload-subscription)))?/.test(magicJS.request.url): + case magicJS.read("zhihu_settings_answer_tip") != false && /^https?:\/\/www\.zhihu\.com\/appview\/v2\/answer\/.*(entry=(?!(preload-topstory|preload-search|preload-subscription)))?/.test(magicJS.request.url): try { let html = magicJS.response.body; // 付费内容提醒 @@ -57,14 +57,14 @@ let magicJS = MagicJS(scriptName, "INFO"); let obj = JSON.parse(magicJS.response.body); magicJS.logDebug(`用户登录用户信息,接口响应:${magicJS.response.body}`); if (obj && obj["id"] && obj.hasOwnProperty("vip_info") && obj["vip_info"].hasOwnProperty("is_vip")) { - let userInfo = { + const userInfo = { id: obj["id"], is_vip: obj["vip_info"]["is_vip"] ? obj["vip_info"]["is_vip"] !== undefined : false, }; - magicJS.logInfo(`当前用户id:${obj["id"]},是否为VIP:${obj["vip_info"]["is_vip"]}`); + magicJS.logDebug(`当前用户id:${obj["id"]},是否为VIP:${obj["vip_info"]["is_vip"]}`); magicJS.write(currentUserInfoKey, userInfo); // 在知乎APP显示VIP,仅自己可见,无实际用途 - if (obj["vip_info"]["is_vip"] === false) { + if (magicJS.read("zhihu_settings_fake_vip") == true && obj["vip_info"]["is_vip"] === false) { obj["vip_info"]["is_vip"] = true; obj["vip_info"]["vip_icon"] = { url: "https://pic1.zhimg.com/v2-4812630bc27d642f7cafcd6cdeca3d7a_r.png", @@ -80,7 +80,7 @@ let magicJS = MagicJS(scriptName, "INFO"); sub_title: null, button_text: "你好,知乎!", jump_url: "zhihu://vip/purchase", - button_jump_url: "", + button_jump_url: "zhihu://vip/purchase", sub_title_new: null, identity: "svip", }; @@ -91,9 +91,9 @@ let magicJS = MagicJS(scriptName, "INFO"); jump_url: "zhihu://market/home", }, right_button: { - title: "开通盐选会员", - description: "畅享 10w+ 场优质内容等特权", - jump_url: "zhihu://vip/purchase", + title: "我的盐选会员", + description: "畅享 10w+ 优质内容", + jump_url: "zhihu://vip/my", }, }; obj["vip_info"]["entrance_v2"] = { @@ -111,8 +111,8 @@ let magicJS = MagicJS(scriptName, "INFO"); magicJS.logError(`知乎获取当前用户信息出现异常:${err}`); } break; - // 去除MCN信息 - case /^https?:\/\/api\.zhihu\.com\/people\/((?!self).)*$/.test(magicJS.request.url): + // 黑名单增强 - 浏览黑名单用户信息时自动加入脚本黑名单 + case magicJS.read("zhihu_settings_blocked_users") != false && /^https?:\/\/api\.zhihu\.com\/people\/((?!self).)*$/.test(magicJS.request.url): try { let obj = JSON.parse(magicJS.response.body); // 删除MCN信息 @@ -120,14 +120,14 @@ let magicJS = MagicJS(scriptName, "INFO"); response = { body: JSON.stringify(obj) }; // 如已是黑名单用户,但不在脚本黑名单中,则自动加入 if (obj.name && obj.id && obj.is_blocking === true) { - let userInfo = GetUserInfo(); + const userInfo = GetUserInfo(); let customBlockedUsers = magicJS.read(blockedUsersKey, userInfo.id); customBlockedUsers = typeof customBlockedUsers === "object" && !!customBlockedUsers ? customBlockedUsers : {}; if (!customBlockedUsers[obj.name]) { magicJS.logDebug(`当前需要加入黑名单的用户Id:${obj["id"]},用户名:${obj["name"]}`); customBlockedUsers[obj["name"]] = obj["id"]; magicJS.write(blockedUsersKey, customBlockedUsers, userInfo.id); - magicJS.logInfo(`${obj["name"]}写入脚本黑名单成功,当前脚本黑名单数据:${JSON.stringify(customBlockedUsers)}`); + magicJS.logDebug(`${obj["name"]}写入脚本黑名单成功,当前脚本黑名单数据:${JSON.stringify(customBlockedUsers)}`); magicJS.notify(`已自动将用户“${obj["name"]}”写入脚本黑名单。`); } } @@ -138,86 +138,60 @@ let magicJS = MagicJS(scriptName, "INFO"); // 推荐去广告与黑名单增强 case /^https:\/\/api\.zhihu\.com\/topstory\/recommend\?/.test(magicJS.request.url): try { - // 判断是否是“盐选推荐内容” - function IsYanXuan(element) { - let flag = false; - if (element["common_card"]["footline"].hasOwnProperty("elements")) { - for (let i = 0; i < element["common_card"]["footline"]["elements"].length; i++) { - let item = element["common_card"]["footline"]["elements"][i]; - if (item.hasOwnProperty("icon") && item["icon"]["image_url"] == "https://pic2.zhimg.com/80/v2-c46fc8ec4c4e9ffc8f846ae0d8158a80_1440w.png") { - flag = true; + // 默认关闭 + const settings_remove_yanxuan = magicJS.read("zhihu_settings_remove_yanxuan") == true; + const settings_recommend_stream = magicJS.read("zhihu_settings_recommend_stream") == true; + // 默认开启 + const settings_blocked_keywords = magicJS.read("zhihu_settings_blocked_keywords") != false; + const settings_blocked_users = magicJS.read("zhihu_settings_blocked_users") != false; + const user_info = GetUserInfo(); + + let keywords = magicJS.read(keywordBlockKey, user_info.id); + keywords = settings_blocked_keywords && !!keywords ? keywords : []; + let customBlockedUsers = magicJS.read(blockedUsersKey, user_info.id); + customBlockedUsers = settings_blocked_users && !!customBlockedUsers ? customBlockedUsers : {}; + + const dataFilter = (element) => { + let elementStr = JSON.stringify(element); + // 是否为广告 + let isAd = element["card_type"] === "slot_event_card" || element["card_type"] === "slot_video_event_card" || element.hasOwnProperty("ad"); + // 是否为流媒体 element["extra"]["type"] === "drama" || element["extra"]["type"] === "zvideo") || element["extra"]["type"] === "Video" || element["common_card"]["style"] === "BIG_IMAGE") + let isStream = isAd != true && settings_recommend_stream && elementStr.search(/"(type|style)+"\s?:\s?"(drama|zvideo|Video|BIG_IMAGE)+"/i) >= 0; + // 是否为盐选推荐 + let isYanXuan = isStream != true && settings_remove_yanxuan && elementStr.indexOf("https://pic2.zhimg.com/80/v2-c46fc8ec4c4e9ffc8f846ae0d8158a80_1440w.png") >= 0; + // 是否匹配脚本关键词过滤 + let matchKeyword = false; + if (isStream != true && settings_blocked_keywords) { + for (let i = 0; i < keywords.length; i++) { + if (elementStr.search(keywords[i]) >= 0) { + if (magicJS.isDebug){ + let elementTitle = element.common_card.feed_content.title.panel_text; + let elementContent = element.common_card.feed_content.content.panel_text; + let actionUrl = ""; + try { + actionUrl = element.common_card.feed_content.title.action.intent_url; + } catch {} + magicJS.logDebug(`匹配关键字:\n${keywords[i]}\n标题:\n${elementTitle}\n内容:\n${elementContent}`); + magicJS.notifyDebug(scriptName, `关键字:${keywords[i]}`, `${elementTitle}\n${elementContent}`, actionUrl); + } + matchKeyword = true; break; } } } - return flag; - } - - // 判断内容是否匹配屏蔽关键字 - function IsKeywordBlock(element) { - let flag = false; - let elementStr = JSON.stringify(element); - for (let i = 0; i < keywords.length; i++) { - if (elementStr.indexOf(keywords[i]) >= 0) { - let elementTitle = element.common_card.feed_content.title.panel_text; - let elementContent = element.common_card.feed_content.content.panel_text; - let actionUrl = ""; - try { - actionUrl = element.common_card.feed_content.title.action.intent_url; - } catch {} - magicJS.logInfo(`匹配关键字:\n${keywords[i]}\n标题:\n${elementTitle}\n内容:\n${elementContent}`); - magicJS.notifyDebug(scriptName, `关键字:${keywords[i]}`, `${elementTitle}\n${elementContent}`, actionUrl); - flag = true; - break; - } - } - return flag; - } - - let user_info = GetUserInfo(); - let customBlockedUsers = magicJS.read(blockedUsersKey, user_info.id); - let keywords = magicJS.read(keywordBlockKey, user_info.id); - customBlockedUsers = !!customBlockedUsers ? customBlockedUsers : {}; - keywords = !!keywords ? keywords : []; - let obj = JSON.parse(magicJS.response.body); - let data = obj["data"].filter((element) => { - // 修正由于JS number类型精度问题,导致JSON.parse精度丢失,引起视频无法自动播放的问题 + // 是否为黑名单用户 + let isBlockedUser = false; try { - if (element.hasOwnProperty("extra") && element["extra"].hasOwnProperty("type") && element["extra"]["type"] === "zvideo") { - let video_id = element["common_card"]["feed_content"]["video"]["customized_page_url"].match(/https?:\/\/www\.zhihu\.com\/[^=]*=(\d*)/)[1]; - element["common_card"]["feed_content"]["video"]["id"] = video_id; - } - } catch (err) { - magicJS.logError(`修正视频自动播放失败\n异常信息:${err}\n响应数据:${JSON.stringify(element)}`); + isBlockedUser = matchKeyword != true && settings_blocked_users && customBlockedUsers && element["common_card"]["feed_content"]["source_line"]["elements"][1]["text"]["panel_text"] in customBlockedUsers; + } catch { + isBlockedUser = false; } - let flag = !( - element["card_type"] === "slot_event_card" || - element["card_type"] === "slot_video_event_card" || - element.hasOwnProperty("ad") || - // 取消以下几行注释,推荐列表拦截视频与直播 - // element["extra"]["type"] === "drama" || - // element["extra"]["type"] === "zvideo" || - // element["extra"]["type"] === "Video" || - // element["common_card"]["style"] === "BIG_IMAGE" || - // 取消以下注释,推荐列表拦截“盐选推荐” - // IsYanXuan(element) || - // 注释下行,推荐列表关闭关键字屏蔽功能 - IsKeywordBlock(element) - ); - try { - if ( - flag === true && - customBlockedUsers && - element["common_card"]["feed_content"].hasOwnProperty("source_line") && - element["common_card"]["feed_content"]["source_line"].hasOwnProperty("elements") && - customBlockedUsers[element["common_card"]["feed_content"]["source_line"]["elements"][1]["text"]["panel_text"]] - ) { - flag = false; - } - } catch (err) {} - return flag; - }); - obj["data"] = data; + return !(isAd || isStream || isYanXuan || matchKeyword || isBlockedUser); + }; + + // 修复number类型精度丢失 + let obj = JSON.parse(magicJS.response.body.replace(/(\w+"+\s?):\s?(\d{15,})/g, '$1:"$2"')); + obj["data"] = obj["data"].filter(dataFilter); response = { body: JSON.stringify(obj) }; } catch (err) { magicJS.logError(`知乎推荐列表去广告出现异常:${err}`); @@ -226,39 +200,26 @@ let magicJS = MagicJS(scriptName, "INFO"); // 关注列表去广告 case /^https?:\/\/api\.zhihu\.com\/moments(\/|\?)?(recommend|action=|feed_type=)(?!\/people)/.test(magicJS.request.url): try { - let obj = JSON.parse(magicJS.response.body); - let user_info = GetUserInfo(); + // 修复number类型精度丢失 + let obj = JSON.parse(magicJS.response.body.replace(/(\w+"+\s?):\s?(\d{15,})/g, '$1:"$2"')); + const user_info = GetUserInfo(); let customBlockedUsers = magicJS.read(blockedUsersKey, user_info.id); customBlockedUsers = !!customBlockedUsers ? customBlockedUsers : {}; let data = []; - // 修正由于JS number类型精度问题,导致JSON.parse精度丢失,引起想法不存在的问题 - const targetIdFix = (element) => { - if (element["target_type"] == "pin") { - target_id = element["target"]["url"].match(/https?:\/\/www\.zhihu\.com\/pin\/(\d*)/)[1]; - element["target"]["id"] = target_id; - // 转发的想法处理 - if (!!element["target"]["origin_pin"] && element["target"]["origin_pin"].hasOwnProperty("url")) { - origin_target_id = element["target"]["origin_pin"]["url"].match(/https?:\/\/www\.zhihu\.com\/pin\/(\d*)/)[1]; - element["target"]["origin_pin"]["id"] = origin_target_id; - } - } - // 动态折叠处理 - else if (element["type"] == "moments_group") { - let momentsGroupList = []; - for (let j = 0; j < element["list"].length; j++) { - momentsGroupList.push(targetIdFix(element["list"][j])); - } - element["list"] = momentsGroupList; - } - return element; - }; + + const settings_moments_stream = magicJS.read("zhihu_settings_moments_stream") == true; + const settings_blocked_users = magicJS.read("zhihu_settings_blocked_users") != false; + for (let i = 0; i < obj["data"].length; i++) { - let element = targetIdFix(obj["data"][i]); - if (!element["ad"]) { + // let element = targetIdFix(obj["data"][i]); + let element = obj["data"][i]; + if (!element["ad"] && !element["adjson"] && !element["ad_list"]) { // 判断转发的想法是否含有黑名单用户 - if (element.target && element.target.origin_pin && element.target.origin_pin.author && customBlockedUsers[element.target.origin_pin.author.name]) { + if (settings_blocked_users && element.target && element.target.origin_pin && element.target.origin_pin.author && customBlockedUsers[element.target.origin_pin.author.name]) { magicJS.notifyDebug(`屏蔽“${element.target.author.name}”转发黑名单用户“${element.target.origin_pin.author.name}”的想法。`); - } else { + } + // 屏蔽关注页的“最新视频” + else if (!settings_moments_stream || element["type"] != "videos") { data.push(element); } } @@ -272,7 +233,7 @@ let magicJS = MagicJS(scriptName, "INFO"); // 回答列表去广告与黑名单增强 case /^https?:\/\/api\.zhihu\.com\/v4\/questions/.test(magicJS.request.url): try { - let userInfo = GetUserInfo(); + const userInfo = GetUserInfo(); let customBlockedUsers = magicJS.read(blockedUsersKey, userInfo.id); customBlockedUsers = !!customBlockedUsers ? customBlockedUsers : {}; let obj = JSON.parse(magicJS.response.body); @@ -288,49 +249,163 @@ let magicJS = MagicJS(scriptName, "INFO"); magicJS.logError(`知乎回答列表去广告出现异常:${err}`); } break; - // 拦截官方账号推广消息 - case /^https?:\/\/api\.zhihu\.com\/notifications\/v3\/timeline\/entry\/system_message/.test(magicJS.request.url): + // 知乎V5版本评论去广告及黑名单增强 + case /^https?:\/\/api\.zhihu\.com\/comment_v5\/(answers|pins|comments?|articles)\/\d+\/(root|child)_comment/.test(magicJS.request.url): try { - const sysmsg_blacklist = ["知乎小伙伴", "知乎视频", "知乎团队", "知乎礼券", "知乎读书会团队"]; - let obj = JSON.parse(magicJS.response.body); - let data = obj["data"].filter((element) => { - return sysmsg_blacklist.indexOf(element["content"]["title"]) < 0; - }); - obj["data"] = data; - response = { body: JSON.stringify(obj) }; + if (!!magicJS.response.body) { + let obj = JSON.parse(magicJS.response.body); + obj["ad_info"] = {}; + // 屏蔽黑名单用户 + if (magicJS.read("zhihu_settings_blocked_users") != false) { + let user_info = GetUserInfo(); + let customBlockedUsers = magicJS.read(blockedUsersKey, user_info.id); + customBlockedUsers = !!customBlockedUsers ? customBlockedUsers : {}; + let newComments = []; + let blockCommentIdObj = {}; + obj.data.forEach((comment) => { + // 评论人昵称 + let commentUserName = comment.author.name; + // 回复哪个人的评论(仅适用于独立子评论页面请求) + let replyUserName = ""; + if (comment.reply_to_author && comment.reply_to_author && comment.reply_to_author.name) { + replyUserName = comment.reply_to_author.name; + } + if (customBlockedUsers[commentUserName] || customBlockedUsers[replyUserName]) { + if (customBlockedUsers[commentUserName] && !replyUserName && magicJS.request.url.indexOf("root_comment") > 0) { + magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”的主评论。`); + } else if (customBlockedUsers[commentUserName] && !replyUserName && magicJS.request.url.indexOf("child_comment") > 0) { + magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”的子评论。`); + } else if (customBlockedUsers[commentUserName] && replyUserName && magicJS.request.url.indexOf("child_comment") > 0) { + magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”回复“${replyUserName}”的子评论。`); + } else { + magicJS.notifyDebug(`屏蔽“${commentUserName}”回复黑名单用户“${replyUserName}”的子评论。`); + } + blockCommentIdObj[comment.id] = commentUserName; + // 主评论数量-1,仅适用于root_comment主评论页面请求 + if (obj.counts && obj.counts.total_counts) { + obj.counts.total_counts -= 1; + } + // 子评论数量-1,仅适用于child_comment子评论页面请求 + if (obj.paging && obj.paging.totals) { + obj.paging.totals -= 1; + } + if (obj.root && obj.root.child_comment_count) { + obj.root.child_comment_count -= 1; + } + } else { + if (comment.child_comments) { + let newChildComments = []; + comment.child_comments.forEach((childComment) => { + let childCommentUserName = childComment.author.name; + if (customBlockedUsers[childCommentUserName] || blockCommentIdObj[childComment.reply_comment_id]) { + if (customBlockedUsers[childCommentUserName]) { + magicJS.notifyDebug(`屏蔽黑名单用户“${childCommentUserName}”的子评论。`); + blockCommentIdObj[childComment.id] = childCommentUserName; + } else { + magicJS.notifyDebug(`屏蔽“${childCommentUserName}”回复黑名单用户“${blockCommentIdObj[childComment.reply_comment_id]}”的子评论。`); + } + comment.child_comment_count -= 1; + } else { + newChildComments.push(childComment); + } + }); + comment.child_comments = newChildComments; + } + newComments.push(comment); + } + }); + obj.data = newComments; + } + response = { body: JSON.stringify(obj) }; + } } catch (err) { - magicJS.logError(`知乎拦截官方账号推广消息出现异常:${err}`); + magicJS.logError(`去除知乎评论广告出现异常:${err}`); } break; - // 屏蔽官方营销消息 - case /^https?:\/\/api\.zhihu\.com\/notifications\/v3\/message/.test(magicJS.request.url): + // 知乎旧版回答中的评论黑名单增强 + case /^https?:\/\/api\.zhihu\.com\/(answers|pins|comments?|articles)\/\d+\/(root|child)_comments/.test(magicJS.request.url): try { - let obj = JSON.parse(magicJS.response.body); - let newItems = []; - for (let item of obj["data"]) { - if (item["detail_title"] === "官方帐号消息") { - let unread_count = item["unread_count"]; - if (unread_count > 0) { - item["content"]["text"] = "未读消息" + unread_count + "条"; - } else { - item["content"]["text"] = "全部消息已读"; - } - item["is_read"] = true; - item["unread_count"] = 0; - newItems.push(item); - } else if (item["detail_title"] !== "知乎活动助手") { - newItems.push(item); + if (!!magicJS.response.body) { + // 评论区去广告 + let obj = JSON.parse(magicJS.response.body); + if (magicJS.read("zhihu_settings_blocked_users") != false) { + // 屏蔽黑名单用户 + let user_info = GetUserInfo(); + let customBlockedUsers = magicJS.read(blockedUsersKey, user_info.id); + let newData = []; + obj.data.forEach((comment) => { + // 评论人昵称 + let commentUserName = comment.author.member.name; + // 回复哪个人的评论(仅适用于独立子评论页面请求) + let replyUserName = ""; + if (comment.reply_to_author && comment.reply_to_author.member && comment.reply_to_author.member.name) { + replyUserName = comment.reply_to_author.member.name; + } + if (customBlockedUsers[commentUserName] || customBlockedUsers[replyUserName]) { + if (customBlockedUsers[commentUserName] && !replyUserName && magicJS.request.url.indexOf("root_comment") > 0) { + magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”的主评论。`); + } else if (customBlockedUsers[commentUserName] && !replyUserName && magicJS.request.url.indexOf("child_comment") > 0) { + magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”的子评论。`); + } else if (customBlockedUsers[commentUserName] && replyUserName && magicJS.request.url.indexOf("child_comment") > 0) { + magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”回复“${replyUserName}”的子评论。`); + } else { + magicJS.notifyDebug(`屏蔽“${commentUserName}”回复黑名单用户“${replyUserName}”的子评论。`); + } + // 减少主评论页面中的评论总数(仅适用于独立的主评论页面请求) + if (obj.common_counts) { + obj.common_counts -= 1; + } + // 减少子评论页面中的评论总数(仅适用于独立子评论页面请求) + if (obj.paging && obj.paging.totals) { + obj.paging.totals -= 1; + } + } else { + // 屏蔽子评论中的黑名单用户(仅适用于独立的主评论页面请求) + if (comment.child_comments) { + let newChildComments = []; + comment.child_comments.forEach((childComment) => { + if (customBlockedUsers[childComment.author.member.name] || customBlockedUsers[childComment.reply_to_author.member.name]) { + if (customBlockedUsers[childComment.author.member.name]) { + magicJS.notifyDebug(`屏蔽黑名单用户“${childComment.author.member.name}”的主评论。`); + } else { + magicJS.notifyDebug(`屏蔽“${childComment.author.member.name}”回复黑名单用户“${childComment.reply_to_author.member.name}”的子评论。`); + } + comment.child_comment_count -= 1; + } else { + newChildComments.push(childComment); + } + }); + comment.child_comments = newChildComments; + } + newData.push(comment); + } + }); + obj.data = newData; } + response = { body: JSON.stringify(obj) }; } - obj["data"] = newItems; - response = { body: JSON.stringify(obj) }; } catch (err) { - magicJS.logError(`知乎屏蔽官方营销消息出现异常:${err}`); + magicJS.logError(`去除知乎评论广告出现异常:${err}`); + } + break; + // 知乎热榜去广告 + case magicJS.read("zhihu_settings_hot_list") != false && /^https?:\/\/api\.zhihu\.com\/topstory\/hot-lists?(\?|\/)/.test(magicJS.request.url): + try { + if (!!magicJS.response.body) { + let obj = JSON.parse(magicJS.response.body); + let data = obj["data"].filter((e) => { + return e["type"] === "hot_list_feed" || e["type"] === "hot_list_feed_video"; + }); + obj["data"] = data; + response = { body: JSON.stringify(obj) }; + } + } catch (err) { + magicJS.logError(`去除知乎热搜广告出现异常:${err}`); } break; // 黑名单管理 - case /^https?:\/\/api\.zhihu\.com\/settings\/blocked_users/.test(magicJS.request.url): - let userInfo = GetUserInfo(); + case magicJS.read("zhihu_settings_blocked_users") != false && /^https?:\/\/api\.zhihu\.com\/settings\/blocked_users/.test(magicJS.request.url): + const userInfo = GetUserInfo(); let defaultBlockedUsers = {}; let customBlockedUsers = magicJS.read(blockedUsersKey, userInfo.id); customBlockedUsers = typeof customBlockedUsers === "object" && !!customBlockedUsers ? customBlockedUsers : {}; @@ -338,14 +413,14 @@ let magicJS = MagicJS(scriptName, "INFO"); customBlockedUsers[element] = "00000000000000000000000000000000"; defaultBlockedUsers[element] = "00000000000000000000000000000000"; }); - magicJS.logInfo(`当前用户id:${userInfo.id},脚本黑名单:${JSON.stringify(customBlockedUsers)}`); + magicJS.logDebug(`当前用户id:${userInfo.id},脚本黑名单:${JSON.stringify(customBlockedUsers)}`); // 获取黑名单 if (magicJS.request.method == "GET") { try { // 加载黑名单首页时,清空历史黑名单,仅保留脚本默认黑名单 if (magicJS.request.url.indexOf("offset") < 0) { customBlockedUsers = defaultBlockedUsers; - magicJS.logInfo("脚本黑名单已清空,请滑动至黑名单末尾保证重新获取完成。"); + magicJS.logDebug("脚本黑名单已清空,请滑动至黑名单末尾保证重新获取完成。"); magicJS.notify("脚本黑名单已清空,请滑动至黑名单末尾保证重新获取完成。"); } let obj = JSON.parse(magicJS.response.body); @@ -358,10 +433,8 @@ let magicJS = MagicJS(scriptName, "INFO"); }); magicJS.write(blockedUsersKey, customBlockedUsers, userInfo.id); if (obj["paging"]["is_end"] == true) { - magicJS.notify( - `获取脚本黑名单结束,当前黑名单共${Object.keys(customBlockedUsers).length - defaultAnswerBlockedUsers.length}人。\n脚本内置黑名单${defaultAnswerBlockedUsers.length}人。` - ); - magicJS.logInfo(`脚本黑名单内容:${JSON.stringify(customBlockedUsers)}。`); + magicJS.notify(`获取脚本黑名单结束,当前黑名单共${Object.keys(customBlockedUsers).length - defaultAnswerBlockedUsers.length}人。\n脚本内置黑名单${defaultAnswerBlockedUsers.length}人。`); + magicJS.logDebug(`脚本黑名单内容:${JSON.stringify(customBlockedUsers)}。`); } } else { magicJS.logWarning(`获取黑名单失败,接口响应不合法:${magicJS.response.body}`); @@ -381,7 +454,7 @@ let magicJS = MagicJS(scriptName, "INFO"); if (obj["id"]) { customBlockedUsers[obj["name"]] = obj["id"]; magicJS.write(blockedUsersKey, customBlockedUsers, userInfo.id); - magicJS.logInfo(`${obj["name"]}写入脚本黑名单成功,当前脚本黑名单数据:${JSON.stringify(customBlockedUsers)}`); + magicJS.logDebug(`${obj["name"]}写入脚本黑名单成功,当前脚本黑名单数据:${JSON.stringify(customBlockedUsers)}`); magicJS.notify(`已将用户“${obj["name"]}”写入脚本黑名单。`); } else { magicJS.logError(`${obj["name"]}写入脚本黑名单失败,没有获取到用户Id。`); @@ -408,7 +481,7 @@ let magicJS = MagicJS(scriptName, "INFO"); if (customBlockedUsers[username] == user_id) { delete customBlockedUsers[username]; magicJS.write(blockedUsersKey, customBlockedUsers, userInfo.id); - magicJS.logInfo(`${username}移出脚本黑名单成功,当前脚本黑名单数据:${JSON.stringify(customBlockedUsers)}`); + magicJS.logDebug(`${username}移出脚本黑名单成功,当前脚本黑名单数据:${JSON.stringify(customBlockedUsers)}`); magicJS.notify(`已将用户“${username}”移出脚本黑名单!`); break; } @@ -427,8 +500,48 @@ let magicJS = MagicJS(scriptName, "INFO"); } } break; + // 拦截官方账号推广消息 + case magicJS.read("zhihu_settings_sys_msg") != false && /^https?:\/\/api\.zhihu\.com\/notifications\/v3\/timeline\/entry\/system_message/.test(magicJS.request.url): + try { + const sysmsg_blacklist = ["知乎小伙伴", "知乎视频", "知乎团队", "知乎礼券", "知乎读书会团队"]; + let obj = JSON.parse(magicJS.response.body); + let data = obj["data"].filter((element) => { + return sysmsg_blacklist.indexOf(element["content"]["title"]) < 0; + }); + obj["data"] = data; + response = { body: JSON.stringify(obj) }; + } catch (err) { + magicJS.logError(`知乎拦截官方账号推广消息出现异常:${err}`); + } + break; + // 屏蔽官方营销消息 + case magicJS.read("zhihu_settings_sys_msg") != false && /^https?:\/\/api\.zhihu\.com\/notifications\/v3\/message/.test(magicJS.request.url): + try { + let obj = JSON.parse(magicJS.response.body); + let newItems = []; + for (let item of obj["data"]) { + if (item["detail_title"] === "官方帐号消息") { + let unread_count = item["unread_count"]; + if (unread_count > 0) { + item["content"]["text"] = "未读消息" + unread_count + "条"; + } else { + item["content"]["text"] = "全部消息已读"; + } + item["is_read"] = true; + item["unread_count"] = 0; + newItems.push(item); + } else if (item["detail_title"] !== "知乎活动助手") { + newItems.push(item); + } + } + obj["data"] = newItems; + response = { body: JSON.stringify(obj) }; + } catch (err) { + magicJS.logError(`知乎屏蔽官方营销消息出现异常:${err}`); + } + break; // 去除预置关键字广告 - case /^https?:\/\/api\.zhihu\.com\/search\/preset_words\?/.test(magicJS.request.url): + case magicJS.read("zhihu_settings_preset_words") == true && /^https?:\/\/api\.zhihu\.com\/search\/preset_words\?/.test(magicJS.request.url): try { if (!!magicJS.response.body) { magicJS.logDebug(`预置关键字返回:${magicJS.response.body}`); @@ -446,7 +559,7 @@ let magicJS = MagicJS(scriptName, "INFO"); } break; // 优化知乎软件配置 - case /^https?:\/\/appcloud2\.zhihu\.com\/v\d+\/config/.test(magicJS.request.url): + case magicJS.read("zhihu_settings_app_conf") == true && /^https?:\/\/appcloud2\.zhihu\.com\/v\d+\/config/.test(magicJS.request.url): try { if (!!magicJS.response.body) { let obj = JSON.parse(magicJS.response.body); @@ -467,7 +580,7 @@ let magicJS = MagicJS(scriptName, "INFO"); } break; // 知乎热搜去广告 - case /^https?:\/\/api\.zhihu\.com\/search\/top_search\/tabs\/hot\/items/.test(magicJS.request.url): + case magicJS.read("zhihu_settings_hot_search") == true && /^https?:\/\/api\.zhihu\.com\/search\/top_search\/tabs\/hot\/items/.test(magicJS.request.url): try { if (!!magicJS.response.body) { let obj = JSON.parse(magicJS.response.body); @@ -478,165 +591,14 @@ let magicJS = MagicJS(scriptName, "INFO"); magicJS.logError(`去除知乎热搜广告出现异常:${err}`); } break; - // 知乎热榜去广告 - case /^https?:\/\/api\.zhihu\.com\/topstory\/hot-lists?(\?|\/)/.test(magicJS.request.url): - try { - if (!!magicJS.response.body) { - let obj = JSON.parse(magicJS.response.body); - let data = obj["data"].filter((e) => { - return e["type"] === "hot_list_feed" || e["type"] === "hot_list_feed_video"; - }); - obj["data"] = data; - response = { body: JSON.stringify(obj) }; - } - } catch (err) { - magicJS.logError(`去除知乎热搜广告出现异常:${err}`); - } - break; - // 知乎V5版本评论去广告及黑名单增强 - case /^https?:\/\/api\.zhihu\.com\/comment_v5\/(answers|pins|comments?|articles)\/\d+\/(root|child)_comment/.test(magicJS.request.url): - try { - if (!!magicJS.response.body) { - let obj = JSON.parse(magicJS.response.body); - obj["ad_info"] = {}; - // 屏蔽黑名单用户 - let user_info = GetUserInfo(); - let customBlockedUsers = magicJS.read(blockedUsersKey, user_info.id); - customBlockedUsers = !!customBlockedUsers ? customBlockedUsers : {}; - let newComments = []; - let blockCommentIdObj = {}; - obj.data.forEach((comment) => { - // 评论人昵称 - let commentUserName = comment.author.name; - // 回复哪个人的评论(仅适用于独立子评论页面请求) - let replyUserName = ""; - if (comment.reply_to_author && comment.reply_to_author && comment.reply_to_author.name) { - replyUserName = comment.reply_to_author.name; - } - if (customBlockedUsers[commentUserName] || customBlockedUsers[replyUserName]) { - if (customBlockedUsers[commentUserName] && !replyUserName && magicJS.request.url.indexOf("root_comment") > 0) { - magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”的主评论。`); - } else if (customBlockedUsers[commentUserName] && !replyUserName && magicJS.request.url.indexOf("child_comment") > 0) { - magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”的子评论。`); - } else if (customBlockedUsers[commentUserName] && replyUserName && magicJS.request.url.indexOf("child_comment") > 0) { - magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”回复“${replyUserName}”的子评论。`); - } else { - magicJS.notifyDebug(`屏蔽“${commentUserName}”回复黑名单用户“${replyUserName}”的子评论。`); - } - blockCommentIdObj[comment.id] = commentUserName; - // 主评论数量-1,仅适用于root_comment主评论页面请求 - if (obj.counts && obj.counts.total_counts) { - obj.counts.total_counts -= 1; - } - // 子评论数量-1,仅适用于child_comment子评论页面请求 - if (obj.paging && obj.paging.totals) { - obj.paging.totals -= 1; - } - if (obj.root && obj.root.child_comment_count) { - obj.root.child_comment_count -= 1; - } - } else { - if (comment.child_comments) { - let newChildComments = []; - comment.child_comments.forEach((childComment) => { - let childCommentUserName = childComment.author.name; - if (customBlockedUsers[childCommentUserName] || blockCommentIdObj[childComment.reply_comment_id]) { - if (customBlockedUsers[childCommentUserName]) { - magicJS.notifyDebug(`屏蔽黑名单用户“${childCommentUserName}”的子评论。`); - blockCommentIdObj[childComment.id] = childCommentUserName; - } else { - magicJS.notifyDebug(`屏蔽“${childCommentUserName}”回复黑名单用户“${blockCommentIdObj[childComment.reply_comment_id]}”的子评论。`); - } - comment.child_comment_count -= 1; - } else { - newChildComments.push(childComment); - } - }); - comment.child_comments = newChildComments; - } - newComments.push(comment); - } - }); - obj.data = newComments; - response = { body: JSON.stringify(obj) }; - } - } catch (err) { - magicJS.logError(`去除知乎评论广告出现异常:${err}`); - } - break; - // 知乎旧版回答中的评论黑名单增强 - case /^https?:\/\/api\.zhihu\.com\/(answers|pins|comments?|articles)\/\d+\/(root|child)_comments/.test(magicJS.request.url): - try { - if (!!magicJS.response.body) { - // 评论区去广告 - let obj = JSON.parse(magicJS.response.body); - // 屏蔽黑名单用户 - let user_info = GetUserInfo(); - let customBlockedUsers = magicJS.read(blockedUsersKey, user_info.id); - let newData = []; - obj.data.forEach((comment) => { - // 评论人昵称 - let commentUserName = comment.author.member.name; - // 回复哪个人的评论(仅适用于独立子评论页面请求) - let replyUserName = ""; - if (comment.reply_to_author && comment.reply_to_author.member && comment.reply_to_author.member.name) { - replyUserName = comment.reply_to_author.member.name; - } - if (customBlockedUsers[commentUserName] || customBlockedUsers[replyUserName]) { - if (customBlockedUsers[commentUserName] && !replyUserName && magicJS.request.url.indexOf("root_comment") > 0) { - magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”的主评论。`); - } else if (customBlockedUsers[commentUserName] && !replyUserName && magicJS.request.url.indexOf("child_comment") > 0) { - magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”的子评论。`); - } else if (customBlockedUsers[commentUserName] && replyUserName && magicJS.request.url.indexOf("child_comment") > 0) { - magicJS.notifyDebug(`屏蔽黑名单用户“${commentUserName}”回复“${replyUserName}”的子评论。`); - } else { - magicJS.notifyDebug(`屏蔽“${commentUserName}”回复黑名单用户“${replyUserName}”的子评论。`); - } - // 减少主评论页面中的评论总数(仅适用于独立的主评论页面请求) - if (obj.common_counts) { - obj.common_counts -= 1; - } - // 减少子评论页面中的评论总数(仅适用于独立子评论页面请求) - if (obj.paging && obj.paging.totals) { - obj.paging.totals -= 1; - } - } else { - // 屏蔽子评论中的黑名单用户(仅适用于独立的主评论页面请求) - if (comment.child_comments) { - let newChildComments = []; - comment.child_comments.forEach((childComment) => { - if (customBlockedUsers[childComment.author.member.name] || customBlockedUsers[childComment.reply_to_author.member.name]) { - if (customBlockedUsers[childComment.author.member.name]) { - magicJS.notifyDebug(`屏蔽黑名单用户“${childComment.author.member.name}”的主评论。`); - } else { - magicJS.notifyDebug(`屏蔽“${childComment.author.member.name}”回复黑名单用户“${childComment.reply_to_author.member.name}”的子评论。`); - } - comment.child_comment_count -= 1; - } else { - newChildComments.push(childComment); - } - }); - comment.child_comments = newChildComments; - } - newData.push(comment); - } - }); - obj.data = newData; - response = { body: JSON.stringify(obj) }; - } - } catch (err) { - magicJS.logError(`去除知乎评论广告出现异常:${err}`); - } - break; default: - magicJS.logWarning("触发意外的请求处理,请确认脚本或复写配置正常。"); break; } } else if (magicJS.isRequest) { // 知乎屏蔽关键词解锁 - if (/^https?:\/\/api\.zhihu\.com\/feed-root\/block/.test(magicJS.request.url) === true) { + if (magicJS.read("zhihu_settings_blocked_keywords") != false && /^https?:\/\/api\.zhihu\.com\/feed-root\/block/.test(magicJS.request.url) === true) { try { - let userInfo = GetUserInfo(); + const userInfo = GetUserInfo(); // 获取屏蔽关键词列表 if (magicJS.request.method === "GET" && userInfo.is_vip !== true) { let keywords = magicJS.read(keywordBlockKey, userInfo.id); @@ -658,7 +620,7 @@ let magicJS = MagicJS(scriptName, "INFO"); success: true, is_vip: true, kw_min_length: 2, - kw_max_length: 15, + kw_max_length: 100, kw_max_count: keywordMaxCount, data: keywords, }); @@ -707,7 +669,7 @@ let magicJS = MagicJS(scriptName, "INFO"); } else { response = { response: { body: body, headers: headers, status: 200 } }; } - magicJS.logInfo(`添加本地脚本屏蔽关键词“${keyword}”`); + magicJS.logDebug(`添加本地脚本屏蔽关键词“${keyword}”`); } else { let body = JSON.stringify({ error: { @@ -755,7 +717,7 @@ let magicJS = MagicJS(scriptName, "INFO"); } else { response = { response: { body: body, headers: headers, status: 200 } }; } - magicJS.logInfo(`删除本地脚本屏蔽关键词:“${keyword}”`); + magicJS.logDebug(`删除本地脚本屏蔽关键词:“${keyword}”`); } } catch (err) { magicJS.logError(`知乎关键词屏蔽操作出现异常:${err}`); @@ -777,7 +739,7 @@ let magicJS = MagicJS(scriptName, "INFO"); function GetUserInfo() { let defaultUserInfo = { id: "default", is_vip: false }; try { - let userInfo = magicJS.read(currentUserInfoKey); + const userInfo = magicJS.read(currentUserInfoKey); if (typeof userInfo === "string") userInfo = JSON.parse(userInfo); if (!!userInfo && userInfo.hasOwnProperty("id")) { return userInfo; @@ -791,4 +753,4 @@ function GetUserInfo() { } // prettier-ignore -function MagicJS(scriptName="MagicJS",logLevel="INFO"){return new class{constructor(){if(this.version="2.2.3.3",this.scriptName=scriptName,this.logLevels={DEBUG:5,INFO:4,NOTIFY:3,WARNING:2,ERROR:1,CRITICAL:0,NONE:-1},this.isLoon="undefined"!=typeof $loon,this.isQuanX="undefined"!=typeof $task,this.isJSBox="undefined"!=typeof $drive,this.isNode="undefined"!=typeof module&&!this.isJSBox,this.isSurge="undefined"!=typeof $httpClient&&!this.isLoon,this.node={request:void 0,fs:void 0,data:{}},this.iOSUserAgent="Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Mobile/15E148 Safari/604.1",this.pcUserAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36 Edg/84.0.522.59",this.logLevel=logLevel,this._barkUrl="",this.isNode){this.node.fs=require("fs"),this.node.request=require("request");try{this.node.fs.accessSync("./magic.json",this.node.fs.constants.R_OK|this.node.fs.constants.W_OK)}catch(err){this.node.fs.writeFileSync("./magic.json","{}",{encoding:"utf8"})}this.node.data=require("./magic.json")}else this.isJSBox&&($file.exists("drive://MagicJS")||$file.mkdir("drive://MagicJS"),$file.exists("drive://MagicJS/magic.json")||$file.write({data:$data({string:"{}"}),path:"drive://MagicJS/magic.json"}))}set barkUrl(url){this._barkUrl=url.replace(/\/+$/g,"")}set logLevel(level){this._logLevel="string"==typeof level?level.toUpperCase():"DEBUG"}get logLevel(){return this._logLevel}get isRequest(){return"undefined"!=typeof $request&&"undefined"==typeof $response}get isResponse(){return"undefined"!=typeof $response}get request(){return"undefined"!=typeof $request?$request:void 0}get response(){return"undefined"!=typeof $response?($response.hasOwnProperty("status")&&($response.statusCode=$response.status),$response.hasOwnProperty("statusCode")&&($response.status=$response.statusCode),$response):void 0}get platform(){return this.isSurge?"Surge":this.isQuanX?"Quantumult X":this.isLoon?"Loon":this.isJSBox?"JSBox":this.isNode?"Node.js":"Unknown"}read(key,session=""){let val="";this.isSurge||this.isLoon?val=$persistentStore.read(key):this.isQuanX?val=$prefs.valueForKey(key):this.isNode?val=this.node.data:this.isJSBox&&(val=$file.read("drive://MagicJS/magic.json").string);try{this.isNode&&(val=val[key]),this.isJSBox&&(val=JSON.parse(val)[key]),session&&("string"==typeof val&&(val=JSON.parse(val)),val=val&&"object"==typeof val?val[session]:null)}catch(err){this.logError(err),val=session?{}:null,this.del(key)}void 0===val&&(val=null);try{val&&"string"==typeof val&&(val=JSON.parse(val))}catch(err){}return this.logDebug(`READ DATA [${key}]${session?`[${session}]`:""}(${typeof val})\n${JSON.stringify(val)}`),val}write(key,val,session=""){let data=session?{}:"";if(session&&(this.isSurge||this.isLoon)?data=$persistentStore.read(key):session&&this.isQuanX?data=$prefs.valueForKey(key):this.isNode?data=this.node.data:this.isJSBox&&(data=JSON.parse($file.read("drive://MagicJS/magic.json").string)),session){try{"string"==typeof data&&(data=JSON.parse(data)),data="object"==typeof data&&data?data:{}}catch(err){this.logError(err),this.del(key),data={}}this.isJSBox||this.isNode?(data[key]&&"object"==typeof data[key]||(data[key]={}),data[key].hasOwnProperty(session)||(data[key][session]=null),void 0===val?delete data[key][session]:data[key][session]=val):void 0===val?delete data[session]:data[session]=val}else this.isNode||this.isJSBox?void 0===val?delete data[key]:data[key]=val:data=void 0===val?null:val;"object"==typeof data&&(data=JSON.stringify(data)),this.isSurge||this.isLoon?$persistentStore.write(data,key):this.isQuanX?$prefs.setValueForKey(data,key):this.isNode?this.node.fs.writeFileSync("./magic.json",data):this.isJSBox&&$file.write({data:$data({string:data}),path:"drive://MagicJS/magic.json"}),this.logDebug(`WRITE DATA [${key}]${session?`[${session}]`:""}(${typeof val})\n${JSON.stringify(val)}`)}del(key,session=""){this.logDebug(`DELETE KEY [${key}]${session?`[${session}]`:""}`),this.write(key,null,session)}notify(title=this.scriptName,subTitle="",body="",opts=""){let convertOptions;if(opts=(_opts=>{let newOpts={};if("string"==typeof _opts)this.isLoon?newOpts={openUrl:_opts}:this.isQuanX?newOpts={"open-url":_opts}:this.isSurge&&(newOpts={url:_opts});else if("object"==typeof _opts)if(this.isLoon)newOpts.openUrl=_opts["open-url"]?_opts["open-url"]:"",newOpts.mediaUrl=_opts["media-url"]?_opts["media-url"]:"";else if(this.isQuanX)newOpts=_opts["open-url"]||_opts["media-url"]?_opts:{};else if(this.isSurge){let openUrl=_opts["open-url"]||_opts.openUrl;newOpts=openUrl?{url:openUrl}:{}}return newOpts})(opts),1==arguments.length&&(title=this.scriptName,subTitle="",body=arguments[0]),this.logNotify(`title:${title}\nsubTitle:${subTitle}\nbody:${body}\noptions:${"object"==typeof opts?JSON.stringify(opts):opts}`),this.isSurge)$notification.post(title,subTitle,body,opts);else if(this.isLoon)opts?$notification.post(title,subTitle,body,opts):$notification.post(title,subTitle,body);else if(this.isQuanX)$notify(title,subTitle,body,opts);else if(this.isNode){if(this._barkUrl){let content=encodeURI(`${title}/${subTitle}\n${body}`);this.get(`${this._barkUrl}/${content}`,()=>{})}}else if(this.isJSBox){let push={title:title,body:subTitle?`${subTitle}\n${body}`:body};$push.schedule(push)}}notifyDebug(title=this.scriptName,subTitle="",body="",opts=""){"DEBUG"===this.logLevel&&(1==arguments.length&&(title=this.scriptName,subTitle="",body=arguments[0]),this.notify(title,subTitle,body,opts))}log(msg,level="INFO"){this.logLevels[this._logLevel]void 0===_options.body?"":`${encodeURIComponent(key)}=${encodeURIComponent(_options.body[key])}`).join("&");_options.url.indexOf("?")<0&&(_options.url+="?"),_options.url.lastIndexOf("&")+1!=_options.url.length&&_options.url.lastIndexOf("?")+1!=_options.url.length&&(_options.url+="&"),_options.url+=qs,delete _options.body}return this.isQuanX?(_options.hasOwnProperty("body")&&"string"!=typeof _options.body&&(_options.body=JSON.stringify(_options.body)),_options.method=method):this.isNode?(delete _options.headers["Accept-Encoding"],"object"==typeof _options.body&&("GET"===method?(_options.qs=_options.body,delete _options.body):"POST"===method&&(_options.json=!0,_options.body=_options.body))):this.isJSBox&&(_options.header=_options.headers,delete _options.headers),_options}adapterHttpResponse(resp){let _resp={body:resp.body,headers:resp.headers,json:()=>JSON.parse(_resp.body)};return resp.hasOwnProperty("statusCode")&&resp.statusCode&&(_resp.status=resp.statusCode),_resp}get(options,callback){let _options=this.adapterHttpOptions(options,"GET");this.logDebug(`HTTP GET: ${JSON.stringify(_options)}`),this.isSurge||this.isLoon?$httpClient.get(_options,callback):this.isQuanX?$task.fetch(_options).then(resp=>{resp.status=resp.statusCode,callback(null,resp,resp.body)},reason=>callback(reason.error,null,null)):this.isNode?this.node.request.get(_options,(err,resp,data)=>{resp=this.adapterHttpResponse(resp),callback(err,resp,data)}):this.isJSBox&&(_options.handler=resp=>{let err=resp.error?JSON.stringify(resp.error):void 0,data="object"==typeof resp.data?JSON.stringify(resp.data):resp.data;callback(err,resp.response,data)},$http.get(_options))}getPromise(options){return new Promise((resolve,reject)=>{magicJS.get(options,(err,resp)=>{err?reject(err):resolve(resp)})})}post(options,callback){let _options=this.adapterHttpOptions(options,"POST");if(this.logDebug(`HTTP POST: ${JSON.stringify(_options)}`),this.isSurge||this.isLoon)$httpClient.post(_options,callback);else if(this.isQuanX)$task.fetch(_options).then(resp=>{resp.status=resp.statusCode,callback(null,resp,resp.body)},reason=>{callback(reason.error,null,null)});else if(this.isNode){let resp=this.node.request.post(_options,callback);resp.status=resp.statusCode,delete resp.statusCode}else this.isJSBox&&(_options.handler=resp=>{let err=resp.error?JSON.stringify(resp.error):void 0,data="object"==typeof resp.data?JSON.stringify(resp.data):resp.data;callback(err,resp.response,data)},$http.post(_options))}get http(){return{get:this.getPromise,post:this.post}}done(value={}){"undefined"!=typeof $done&&$done(value)}isToday(day){if(null==day)return!1;{let today=new Date;return"string"==typeof day&&(day=new Date(day)),today.getFullYear()==day.getFullYear()&&today.getMonth()==day.getMonth()&&today.getDay()==day.getDay()}}isNumber(val){return"NaN"!==parseFloat(val).toString()}attempt(promise,defaultValue=null){return promise.then(args=>[null,args]).catch(ex=>(this.logError(ex),[ex,defaultValue]))}retry(fn,retries=5,interval=0,callback=null){return(...args)=>new Promise((resolve,reject)=>{function _retry(...args){Promise.resolve().then(()=>fn.apply(this,args)).then(result=>{"function"==typeof callback?Promise.resolve().then(()=>callback(result)).then(()=>{resolve(result)}).catch(ex=>{retries>=1?interval>0?setTimeout(()=>_retry.apply(this,args),interval):_retry.apply(this,args):reject(ex),retries--}):resolve(result)}).catch(ex=>{this.logRetry(ex),retries>=1&&interval>0?setTimeout(()=>_retry.apply(this,args),interval):retries>=1?_retry.apply(this,args):reject(ex),retries--})}_retry.apply(this,args)})}formatTime(time,fmt="yyyy-MM-dd hh:mm:ss"){var o={"M+":time.getMonth()+1,"d+":time.getDate(),"h+":time.getHours(),"m+":time.getMinutes(),"s+":time.getSeconds(),"q+":Math.floor((time.getMonth()+3)/3),S:time.getMilliseconds()};/(y+)/.test(fmt)&&(fmt=fmt.replace(RegExp.$1,(time.getFullYear()+"").substr(4-RegExp.$1.length)));for(let k in o)new RegExp("("+k+")").test(fmt)&&(fmt=fmt.replace(RegExp.$1,1==RegExp.$1.length?o[k]:("00"+o[k]).substr((""+o[k]).length)));return fmt}now(){return this.formatTime(new Date,"yyyy-MM-dd hh:mm:ss")}today(){return this.formatTime(new Date,"yyyy-MM-dd")}sleep(time){return new Promise(resolve=>setTimeout(resolve,time))}}(scriptName)} +function MagicJS(scriptName="MagicJS",logLevel="INFO"){return new class{constructor(){if(this._startTime=Date.now(),this.version="2.2.3.6",this.scriptName=scriptName,this.logLevels={DEBUG:5,INFO:4,NOTIFY:3,WARNING:2,ERROR:1,CRITICAL:0,NONE:-1},this.isLoon="undefined"!=typeof $loon,this.isQuanX="undefined"!=typeof $task,this.isJSBox="undefined"!=typeof $drive,this.isNode="undefined"!=typeof module&&!this.isJSBox,this.isSurge="undefined"!=typeof $httpClient&&!this.isLoon,this.node={request:void 0,fs:void 0,data:{}},this.iOSUserAgent="Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Mobile/15E148 Safari/604.1",this.pcUserAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36 Edg/84.0.522.59",this._logLevel="INFO",this.logLevel=logLevel,this._barkUrl="",this._barkKey="",this.isNode){this.node.fs=require("fs"),this.node.request=require("request");try{this.node.fs.accessSync("./magic.json",this.node.fs.constants.R_OK|this.node.fs.constants.W_OK)}catch(err){this.node.fs.writeFileSync("./magic.json","{}",{encoding:"utf8"})}this.node.data=require("./magic.json")}else this.isJSBox&&($file.exists("drive://MagicJS")||$file.mkdir("drive://MagicJS"),$file.exists("drive://MagicJS/magic.json")||$file.write({data:$data({string:"{}"}),path:"drive://MagicJS/magic.json"}))}set barkUrl(url){try{let _url=url.replace(/\/+$/g,"");this._barkUrl=`${/^https?:\/\/([^/]*)/.exec(_url)[0]}/push`,this._barkKey=/\/([^\/]+)\/?$/.exec(_url)[1]}catch(err){this.logDebug("Bark config error.")}}set logLevel(level){let magic_loglevel=this.read("magicjs_loglevel");this._logLevel=magic_loglevel||level.toUpperCase()}get logLevel(){return this._logLevel}get isRequest(){return"undefined"!=typeof $request&&"undefined"==typeof $response}get isResponse(){return"undefined"!=typeof $response}get isDebug(){return"DEBUG"===this.logLevel}get request(){return"undefined"!=typeof $request?$request:void 0}get response(){return"undefined"!=typeof $response?($response.hasOwnProperty("status")&&($response.statusCode=$response.status),$response.hasOwnProperty("statusCode")&&($response.status=$response.statusCode),$response):void 0}get platform(){return this.isSurge?"Surge":this.isQuanX?"Quantumult X":this.isLoon?"Loon":this.isJSBox?"JSBox":this.isNode?"Node.js":"Unknown"}read(key,session=""){let val="";this.isSurge||this.isLoon?val=$persistentStore.read(key):this.isQuanX?val=$prefs.valueForKey(key):this.isNode?val=this.node.data:this.isJSBox&&(val=$file.read("drive://MagicJS/magic.json").string);try{this.isNode&&(val=val[key]),this.isJSBox&&(val=JSON.parse(val)[key]),session&&("string"==typeof val&&(val=JSON.parse(val)),val=val&&"object"==typeof val?val[session]:null)}catch(err){this.logError(err),val=session?{}:null,this.del(key)}void 0===val&&(val=null);try{val&&"string"==typeof val&&(val=JSON.parse(val))}catch(err){}return this.logDebug(`READ DATA [${key}]${session?`[${session}]`:""}(${typeof val})\n${JSON.stringify(val)}`),val}write(key,val,session=""){let data=session?{}:"";if(session&&(this.isSurge||this.isLoon)?data=$persistentStore.read(key):session&&this.isQuanX?data=$prefs.valueForKey(key):this.isNode?data=this.node.data:this.isJSBox&&(data=JSON.parse($file.read("drive://MagicJS/magic.json").string)),session){try{"string"==typeof data&&(data=JSON.parse(data)),data="object"==typeof data&&data?data:{}}catch(err){this.logError(err),this.del(key),data={}}this.isJSBox||this.isNode?(data[key]&&"object"==typeof data[key]||(data[key]={}),data[key].hasOwnProperty(session)||(data[key][session]=null),void 0===val?delete data[key][session]:data[key][session]=val):void 0===val?delete data[session]:data[session]=val}else this.isNode||this.isJSBox?void 0===val?delete data[key]:data[key]=val:data=void 0===val?null:val;"object"==typeof data&&(data=JSON.stringify(data)),this.isSurge||this.isLoon?$persistentStore.write(data,key):this.isQuanX?$prefs.setValueForKey(data,key):this.isNode?this.node.fs.writeFileSync("./magic.json",data):this.isJSBox&&$file.write({data:$data({string:data}),path:"drive://MagicJS/magic.json"}),this.logDebug(`WRITE DATA [${key}]${session?`[${session}]`:""}(${typeof val})\n${JSON.stringify(val)}`)}del(key,session=""){this.logDebug(`DELETE KEY [${key}]${session?`[${session}]`:""}`),this.write(key,null,session)}notify(title=this.scriptName,subTitle="",body="",opts=""){let convertOptions;if(opts=(_opts=>{let newOpts={};if("string"==typeof _opts)this.isLoon?newOpts={openUrl:_opts}:this.isQuanX?newOpts={"open-url":_opts}:this.isSurge&&(newOpts={url:_opts});else if("object"==typeof _opts)if(this.isLoon)newOpts.openUrl=_opts["open-url"]?_opts["open-url"]:"",newOpts.mediaUrl=_opts["media-url"]?_opts["media-url"]:"";else if(this.isQuanX)newOpts=_opts["open-url"]||_opts["media-url"]?_opts:{};else if(this.isSurge){let openUrl=_opts["open-url"]||_opts.openUrl;newOpts=openUrl?{url:openUrl}:{}}return newOpts})(opts),1==arguments.length&&(title=this.scriptName,subTitle="",body=arguments[0]),this.logNotify(`title:${title}\nsubTitle:${subTitle}\nbody:${body}\noptions:${"object"==typeof opts?JSON.stringify(opts):opts}`),this.isSurge)$notification.post(title,subTitle,body,opts);else if(this.isLoon)opts?$notification.post(title,subTitle,body,opts):$notification.post(title,subTitle,body);else if(this.isQuanX)$notify(title,subTitle,body,opts);else if(this.isJSBox){let push={title:title,body:subTitle?`${subTitle}\n${body}`:body};$push.schedule(push)}this._barkUrl&&this._barkKey&&this.notifyBark(title,subTitle,body)}notifyDebug(title=this.scriptName,subTitle="",body="",opts=""){"DEBUG"===this.logLevel&&(1==arguments.length&&(title=this.scriptName,subTitle="",body=arguments[0]),this.notify(title,subTitle,body,opts))}notifyBark(title=this.scriptName,subTitle="",body="",opts=""){let options={url:this._barkUrl,headers:{"Content-Type":"application/json; charset=utf-8"},body:{title:title,body:subTitle?`${subTitle}\n${body}`:body,device_key:this._barkKey}};this.post(options,err=>{})}log(msg,level="INFO"){this.logLevels[this._logLevel]void 0===_options.body?"":`${encodeURIComponent(key)}=${encodeURIComponent(_options.body[key])}`).join("&");_options.url.indexOf("?")<0&&(_options.url+="?"),_options.url.lastIndexOf("&")+1!=_options.url.length&&_options.url.lastIndexOf("?")+1!=_options.url.length&&(_options.url+="&"),_options.url+=qs,delete _options.body}return this.isQuanX?(_options.hasOwnProperty("body")&&"string"!=typeof _options.body&&(_options.body=JSON.stringify(_options.body)),_options.method=method):this.isNode?(delete _options.headers["Accept-Encoding"],"object"==typeof _options.body&&("GET"===method?(_options.qs=_options.body,delete _options.body):"POST"===method&&(_options.json=!0,_options.body=_options.body))):this.isJSBox&&(_options.header=_options.headers,delete _options.headers),_options}adapterHttpResponse(resp){let _resp={body:resp.body,headers:resp.headers,json:()=>JSON.parse(_resp.body)};return resp.hasOwnProperty("statusCode")&&resp.statusCode&&(_resp.status=resp.statusCode),_resp}get(options,callback){let _options=this.adapterHttpOptions(options,"GET");this.logDebug(`HTTP GET: ${JSON.stringify(_options)}`),this.isSurge||this.isLoon?$httpClient.get(_options,callback):this.isQuanX?$task.fetch(_options).then(resp=>{resp.status=resp.statusCode,callback(null,resp,resp.body)},reason=>callback(reason.error,null,null)):this.isNode?this.node.request.get(_options,(err,resp,data)=>{resp=this.adapterHttpResponse(resp),callback(err,resp,data)}):this.isJSBox&&(_options.handler=resp=>{let err=resp.error?JSON.stringify(resp.error):void 0,data="object"==typeof resp.data?JSON.stringify(resp.data):resp.data;callback(err,resp.response,data)},$http.get(_options))}getPromise(options){return new Promise((resolve,reject)=>{magicJS.get(options,(err,resp)=>{err?reject(err):resolve(resp)})})}post(options,callback){let _options=this.adapterHttpOptions(options,"POST");if(this.logDebug(`HTTP POST: ${JSON.stringify(_options)}`),this.isSurge||this.isLoon)$httpClient.post(_options,callback);else if(this.isQuanX)$task.fetch(_options).then(resp=>{resp.status=resp.statusCode,callback(null,resp,resp.body)},reason=>{callback(reason.error,null,null)});else if(this.isNode){let resp=this.node.request.post(_options,callback);resp.status=resp.statusCode,delete resp.statusCode}else this.isJSBox&&(_options.handler=resp=>{let err=resp.error?JSON.stringify(resp.error):void 0,data="object"==typeof resp.data?JSON.stringify(resp.data):resp.data;callback(err,resp.response,data)},$http.post(_options,{}))}done(value={}){this._endTime=Date.now();let span=(this._endTime-this._startTime)/1e3;magicJS.logDebug(`SCRIPT COMPLETED: ${span}S.`),"undefined"!=typeof $done&&$done(value)}isToday(day){if(null==day)return!1;{let today=new Date;return"string"==typeof day&&(day=new Date(day)),today.getFullYear()==day.getFullYear()&&today.getMonth()==day.getMonth()&&today.getDay()==day.getDay()}}isNumber(val){return"NaN"!==parseFloat(val).toString()}attempt(promise,defaultValue=null){return promise.then(args=>[null,args]).catch(ex=>(this.logError(ex),[ex,defaultValue]))}retry(fn,retries=5,interval=0,callback=null){return(...args)=>new Promise((resolve,reject)=>{function _retry(...args){Promise.resolve().then(()=>fn.apply(this,args)).then(result=>{"function"==typeof callback?Promise.resolve().then(()=>callback(result)).then(()=>{resolve(result)}).catch(ex=>{retries>=1?interval>0?setTimeout(()=>_retry.apply(this,args),interval):_retry.apply(this,args):reject(ex),retries--}):resolve(result)}).catch(ex=>{this.logRetry(ex),retries>=1&&interval>0?setTimeout(()=>_retry.apply(this,args),interval):retries>=1?_retry.apply(this,args):reject(ex),retries--})}_retry.apply(this,args)})}formatTime(time,fmt="yyyy-MM-dd hh:mm:ss"){var o={"M+":time.getMonth()+1,"d+":time.getDate(),"h+":time.getHours(),"m+":time.getMinutes(),"s+":time.getSeconds(),"q+":Math.floor((time.getMonth()+3)/3),S:time.getMilliseconds()};/(y+)/.test(fmt)&&(fmt=fmt.replace(RegExp.$1,(time.getFullYear()+"").substr(4-RegExp.$1.length)));for(let k in o)new RegExp("("+k+")").test(fmt)&&(fmt=fmt.replace(RegExp.$1,1==RegExp.$1.length?o[k]:("00"+o[k]).substr((""+o[k]).length)));return fmt}now(){return this.formatTime(new Date,"yyyy-MM-dd hh:mm:ss")}today(){return this.formatTime(new Date,"yyyy-MM-dd")}sleep(time){return new Promise(resolve=>setTimeout(resolve,time))}}(scriptName)} diff --git a/script/zhihu/zhihu_plus.lnplugin b/script/zhihu/zhihu_plus.lnplugin index 130ae64a746..071aae36eab 100644 --- a/script/zhihu/zhihu_plus.lnplugin +++ b/script/zhihu/zhihu_plus.lnplugin @@ -36,8 +36,10 @@ URL-REGEX,^https?:\/\/www\.zhihu\.com\/api\/v\d+\/brand\/question/\d+/card\?,REJ ^https?:\/\/www\.zhihu\.com\/api\/v\d+\/brand\/question/\d+/card\? - reject-dict # 屏蔽消息页面上拉的用户精选 ^https?:\/\/api\.zhihu\.com/moments/hybrid\? - reject-dict -# 知乎下发的配置,如皮肤等,目前已知会导致Tab页管理功能失效 +# 知乎下发的配置 ^https?:\/\/api\.zhihu\.com\/ab\/api\/v1\/products\/zhihu\/platforms\/ios\/config - reject-200 +# 屏蔽知乎“我的”页面推荐开通会员的卡片 +^https?:\/\/api\.zhihu\.com\/people\/self\/new_user_card - reject-200 [Script] http-request ^https?:\/\/api\.zhihu\.com\/feed-root\/block requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_屏蔽关键字解锁 @@ -45,7 +47,7 @@ http-response ^https?:\/\/api\.zhihu\.com\/people requires-body=1,script-path=ht http-response ^https?:\/\/api\.zhihu\.com\/(moments|topstory)(\/|\?)?(recommend|action=|feed_type=)(?!\/people) requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_信息流去广告及黑名单增强 http-response ^https?:\/\/api\.zhihu\.com\/settings\/blocked_users requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_获取黑名单 http-response ^https?:\/\/api\.zhihu\.com\/v4\/questions requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_回答列表去广告及黑名单增强 -http-response ^https?:\/\/api\.zhihu\.com\/notifications\/v3\/(message\?|timeline\/entry\/system_message) requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_官方消息去广告 +http-response ^https?:\/\/api\.zhihu\.com\/notifications\/v3\/(message|timeline\/entry\/system_message) requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_官方消息去广告 http-response ^https?:\/\/api\.zhihu\.com\/search\/preset_words\? requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_预置关键词去广告 http-response ^https?:\/\/www\.zhihu\.com\/appview\/v2\/answer\/.*(entry=(?!(preload-topstory|preload-search|preload-subscription)))? requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_回答内容优化 http-response ^https?:\/\/appcloud2\.zhihu\.com\/v\d+\/config requires-body=1,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js,tag=知乎_优化软件配置 diff --git a/script/zhihu/zhihu_plus.qxrewrite b/script/zhihu/zhihu_plus.qxrewrite index 8d89a782161..0a4fbd2e74a 100644 --- a/script/zhihu/zhihu_plus.qxrewrite +++ b/script/zhihu/zhihu_plus.qxrewrite @@ -7,7 +7,7 @@ # 知乎获取黑名单 ^https?:\/\/api\.zhihu\.com\/settings\/blocked_users url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js # 知乎官方消息去广告 -^https?:\/\/api\.zhihu\.com\/notifications\/v3\/(message\?|timeline\/entry\/system_message) url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js +^https?:\/\/api\.zhihu\.com\/notifications\/v3\/(message|timeline\/entry\/system_message) url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js # 知乎预置关键词去广告 ^https?:\/\/api\.zhihu\.com\/search\/preset_words\? url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_plus.js # 优化软件配置 @@ -40,8 +40,10 @@ ^https?:\/\/www\.zhihu\.com\/api\/v\d+\/brand\/question/\d+/card\? url reject-dict # 屏蔽消息页面上拉的用户精选 ^https?:\/\/api\.zhihu\.com/moments/hybrid\? url reject-dict -# 知乎下发的配置,如皮肤等,目前已知会导致Tab页管理功能失效 +# 知乎下发的配置,如皮肤等 ^https?:\/\/api\.zhihu\.com\/ab\/api\/v1\/products\/zhihu\/platforms\/ios\/config url reject-200 +# 屏蔽知乎“我的”页面推荐开通会员的卡片 +^https?:\/\/api\.zhihu\.com\/people\/self\/new_user_card url reject-200 # hostname = www.zhihu.com,api.zhihu.com,appcloud2.zhihu.com,zhuanlan.zhihu.com hostname = *.zhihu.com diff --git a/script/zhihu/zhihu_plus.sgmodule b/script/zhihu/zhihu_plus.sgmodule index eab42c9e4a6..dfa80067dcc 100644 --- a/script/zhihu/zhihu_plus.sgmodule +++ b/script/zhihu/zhihu_plus.sgmodule @@ -6,8 +6,10 @@ RULE-SET,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/zhihu/zhihu_remove_ads.list,REJECT-DROP [URL Rewrite] -# 知乎下发的配置,如皮肤等,目前已知会导致Tab页管理功能失效 +# 屏蔽知乎下发的配置,如皮肤等 ^https?:\/\/api\.zhihu\.com\/ab\/api\/v1\/products\/zhihu\/platforms\/ios\/config - reject +# 屏蔽知乎“我的”页面推荐开通会员的卡片 +^https?:\/\/api\.zhihu\.com\/people\/self\/new_user_card - reject [Map Local] # 知乎去除最常访问