在 Android 上更优雅地清洁 URL

date
Sep 5, 2024
slug
clean-url-more-elegantly-on-android
status
Published
tags
软件
Android
隐私
summary
除了使用广告拦截器过滤参数, 在 Android 上实际还有更加流畅的 URL 清洁办法. 利用 URLCheck 应用的各种模块组合规则即可快速地得到想要的整洁 URL.
type
Post
url

前言

所以先来看看具体效果:
视频加载不出来? 直接去 Notion 原始页面看: https://theclip.notion.site/Android-URL-4a1cbbe6d51d46b2bf71fd9de4651397
需要的核心软件既是 URLCheck 这个软件, 可在 F-Droid 下载:
此外, Android 设备需要对会对链接存在直接打开目标应用的应用关闭「默认打开」功能:
notion image
notion image
 
为什么要关闭呢? 想必你一定经历过对着一个 b23.tv 链接一点就立马跳转进了哔哩哔哩, 是不是有点不对劲? 这样就等于这个链接里面带有追踪用参数全部都直接传递进了应用里.
不用担心关闭默认打开会影响体验, 如果你安装了 URLCheck, 他还是会检测到这些链接对应的默认打开应用是什么(参见上方的视频演示效果), 这么做只是为了防止绕过 URLCheck 作为默认浏览器的情况.
目前我关闭了默认打开的应用有: 哔哩哔哩, YouTube, Twitter.

配置

安装并打开 URLCheck, 在应用「设置」按照指引中将其设置为默认浏览器并打开其他设置:
notion image
打开应用「模块」, 按照顺序配置.

建议关闭的模块

  • 短链接解析器: 这个模块依赖于外部的短链接解析 API, 大多时候反应都很缓慢, 还会出现请求频繁而错误, 目前暂不支持配置自己的 API 密钥来使用. 对于一些仅使用 30x 状态码的短链接来说, 使用状态码模块就能很好应对.

状态码

notion image
打开「自动替换重定向链接」, 并在下方填入正则表达式:
^https?:\/\/(?:(?:b23\.tv)|(?:hoyo\.link)|(?:youtu\.be)|(?:t\.co))\/.*?$
每个自动替换重定向的目标只需要匹配短链域名, 一个链接对应一个匹配组的里的替代匹配条件.
比如 (?:t\.co) 为一个单独的匹配条件, 每个条件之间使用管道符 | 分隔. 如果你想要增加一个 example.com 的自动替换条件, 那么完整的表达式则是:
^https?:\/\/(?:(?:b23\.tv)|(?:hoyo\.link)|(?:youtu\.be)|(?:t\.co)|(?:example\.com))\/.*?$

链接清洁器

notion image
  • 如果你想要全自动化清理参数, 打开「自动应用」.
  • 如果你愿意为分享链接的人保留类似 ref 和 aff 这类参数, 可以打开「允许引用来源推广」.
  • 如果你想要看到 URL 自动清洁后具体清洁了什么参数, 则打开「启用匹配过程的粗略信息」.
配置「更新器」:
notion image
规则填写:
https://script.cx.ms/clearurls/main.minify.json
哈希值检查填写:
https://script.cx.ms/clearurls/main.minify.json.sha256sum
这是我自己维护的一个 ClearURLs 规则的分支, 额外添加了一些国内常见的链接, 比如哔哩哔哩, 酷安和闲鱼. 今后可能会考虑直接向上游贡献.
打开间歇性更新, 后点击「立即更新」, 提示目录更新后返回即可.

模式检查器

notion image
notion image
打开「进阶编辑器」, 删除已经有的规则, 将下面的规则粘贴进去后保存:
{ "警告!发现非 ASCII 字符。": { "regex": "[^\\p{ASCII}]" }, "HTTP 链接,建议使用 HTTPS。": { "regex": "^http://", "replacement": "https://" }, "缺少 HTTP 协议。": { "regex": "^(?!.*:)", "replacement": "http://$0" }, "缺少 HTTPS 协议。": { "regex": "^(?!.*:)", "replacement": "https://$0" }, "HTTP 协议大小写不正确。": { "regex": "^(?!http:)[hH][tT]{2}[pP]:(.*)", "replacement": "http:$1", "automatic": "true" }, "HTTPS 协议大小写不正确。": { "regex": "^(?!https:)[hH][tT]{2}[pP][sS]:(.*)", "replacement": "https:$1", "automatic": "true" }, "Reddit ➔ Teddit": { "regex": "^https?://(?:[a-z0-9-]+\\.)*?reddit\\.com/(.*)", "replacement": "https://teddit\\.net/$1", "enabled": "false" }, "Twitter ➔ Nitter": { "regex": "^https?://(?:[a-z0-9-]+\\.)*?twitter\\.com/(.*)", "replacement": "https://nitter\\.net/$1", "enabled": "false" }, "Youtube ➔ Invidious": { "regex": "^https?://(?:[a-z0-9-]+\\.)*?youtube\\.com/(.*)", "replacement": [ "https://yewtu\\.be/$1", "https://farside\\.link/invidious/$1" ], "enabled": "false" }, "Twitter ➔ FxTwitter": { "regex": "^https?://(?:twitter|x)\\.com/(.*)", "replacement": "https://fixupx\\.com/$1", "enabled": "true" }, "FxTwitter ➔ Twitter": { "regex": "^https?://(?:fxtwitter|fixupx|fixvx)\\.com/(.*)", "replacement": "https://x\\.com/$1", "enabled": "true" }, "njump ➔ Nostr": { "regex": "^https?://(?:[a-z0-9-]+\\.)*?(?:(?:njump\\.me)|(?:nostr\\.cxplay\\.org)|(?:nostr\\.at))/((?:(?:nevent1)|(?:note1)|(?:npub1)|(?:naddr1)|(?:nprofile1)).*)", "replacement": "nostr:$1", "enabled": "true", "automatic": "false" }, "Nostr ➔ njump": { "regex": "^nostr:((?:nevent1|note1|npub1|naddr1|nprofile1)[^\\s]+)", "replacement": "https://nostr\\.cxplay\\.org/$1", "enabled": "true", "automatic": "false" }, "Bilibili ➔ BilibiliBB": { "regex": "^https?://(?:(?:www|m)\\.bilibili\\.com\\/video)/(.*)", "replacement": "https://www\\.bilibilibb\\.com/video/$1", "enabled": "true" }, "b23 ➔ b23BB": { "regex": "^https?://b23\\.tv/(.*)", "replacement": "https://b23bb\\.tv/$1", "enabled": "true" }, "BilibiliBB ➔ Bilibili": { "regex": "^https?://(?:(?:www|m)\\.bilibilibb\\.com\\/video)/(.*)", "replacement": "https://www\\.bilibili\\.com/video/$1", "enabled": "true" }, "b23BB ➔ b23": { "regex": "^https?://b23bb\\.tv/(.*)", "replacement": "https://b23\\.tv/$1", "enabled": "true" }, "fix XHS": { "regex": "^https?:\\/\\/www\\.xiaohongshu\\.com\/(?:(?:discovery\/item\/)|(?:explore\/))([0-9a-z]+)", "replacement": "https:\\/\\/www\\.xiaohongshu\\.com\/user\/profile\/u\/$1", "enabled": "true" } }
这个修改后的规则添加了 FxTwitter, BilbiliBB 和 njump.
具体的作用既是演示视频中展示的匹配到链接自动显示一个调整为新的链接的按钮:
notion image
比如把哔哩哔哩视频链接:
  • https://www.bilibili.com/video/BV1oS4y1r7eZ?p=1
转换为:
  • https://www.bilibilibb.com/video/BV1oS4y1r7eZ?p=1
BilibiliBB 是一个类似 FxTwitter 的链接预览增强服务.
虽然 BilibiliBB 也能用来清理 b23.tv 中的追踪参数, 但是并不太想把这种负载转移到公益免费服务上, 毕竟本地也能直接用「链接清洁器」模块做到. 如果担心短链接记录 IP, 那直接把短链接加进代理流量规则里就好了.
这种服务利用 domain hack 来方便了人手打补全链接, 发出来后虽然能在社交平台上有更好的链接预览, 但是在 Android 设备上就没办法通过这种链接直接选择打开原始链接对应可以启动的应用中查看和互动了. 在桌面上它们倒是直接重定向到原始站点使用网页客户端就好了, 但在 Android 上几乎都是使用本地客户端的, 还要进入浏览器跳转一番未必太不优雅了.
通过 URLCheck 的模式检查器可以做到这种链接互相转换, 偶尔还能当人形机器人帮群友进行链接转换.

后记

配置完成可以导出配置以便往后使用.
上面用到的自定义规则都会在下面的脚本仓库目录更新:
在脚本仓库中的配置对应模块的关系:
  • main.json & main.minify.json: 链接清洁器
  • pattern-checker.json : 模式检查器
  • redirect-auto-apply.txt : 状态码.

© CXPLAY 2024