Post

Stash Availability Check Tiles:一键检测 AI 与流媒体服务可用性

Stash Availability Check Tiles:一键检测 AI 与流媒体服务可用性

切换代理节点后,最常见的问题是”这个节点能用 ChatGPT 吗?Netflix 解锁了吗?”。每次手动打开浏览器逐个测试太麻烦,于是我基于 StashNetworks/misc 的 collapsed-tiles 机制,Vibe Coding 开发了一套覆盖主流 AI 服务和流媒体的一键检测磁贴,安装后直接在 Stash 首页折叠展示各服务的可用状态。

项目地址:pengyanai/misc


一、支持的服务

AI 服务流媒体
ChatGPT Web / AppYouTube
Codex (OpenAI)Netflix
ClaudeDisney+
GeminiSpotify
Grok 
Copilot 

共 11 个检测项,覆盖日常最常用的 AI 和流媒体服务。


二、安装方式

打开 Stash → 覆写 → 安装覆写,填入以下任一 URL:

# 主线路(Fastly CDN,大陆可直连) https://fastly.jsdelivr.net/gh/iqiancheng/misc@main/collapsed-tiles/global-ai-availability.stoverride # 备用1(GitHub Raw,需代理) https://raw.githubusercontent.com/pengyanai/misc/main/collapsed-tiles/global-ai-availability.stoverride # 备用2(国内镜像) https://jsd.onmicrosoft.cn/gh/pengyanai/misc@main/collapsed-tiles/global-ai-availability.stoverride

安装后回到首页,即可看到折叠式检测磁贴。点击展开查看各服务状态。


三、检测结果说明

状态含义
Available (SG)可用,括号内为出口地区国家码
Available可用,但未能提取地区码
N/A / Not Available当前出口 IP 不支持该服务
Blocked服务明确拒绝(如 OpenAI 的 unsupported_country
Network Error网络不通或超时

四、检测原理

每个服务对应一个独立的 JS 脚本,通过 Stash 的 script-providers 机制执行。核心逻辑是:

  1. 发起 HTTP 请求到目标服务的特定端点
  2. 解析响应判断可用性(状态码、页面关键词、API 返回字段)
  3. 提取地区信息(如果服务返回了地区码)
  4. 通过 $done() 回传结果到 Stash 磁贴显示

不同服务的检测策略有所不同:

服务检测端点判断方式
ChatGPT / Codexapi.openai.com/compliance/cookie_requirements响应中是否包含 unsupported_country
Claudeclaude.ai 首页页面是否包含地区限制关键词
Grokgrok.com 首页页面关键词 grok / xai
YouTubeyoutube.com/premium解析响应中的 "GL":"XX" 地区码
Spotifyspclient.wg.spotify.com 注册验证 API解析 JSON 中的 countryis_country_launched
Netflixnetflix.comHTTP 状态码与页面内容
Disney+disneyplus.com页面是否包含地区限制关键词

所有脚本共享相同的 $httpClient 封装模式,通过 Stash 的代理策略发起请求,因此检测的是当前代理出口 IP 对应的可用性。


五、stoverride 文件结构

整个配置是一个 YAML 格式的 .stoverride 文件,包含两个核心部分:

# 磁贴定义 tiles: - name: Claude-Check # 唯一标识 title: Claude # 显示名称 icon: https://...claude.png # 图标 URL(走 CDN) collapsed: true # 默认折叠 url: https://claude.ai # 点击跳转 # 脚本绑定 script-providers: Claude-Check: # 与 tile name 对应 url: https://...claude.js # 检测脚本 URL

tiles 定义磁贴的外观和交互,script-providers 将每个磁贴绑定到对应的检测脚本。图标和脚本都托管在 GitHub 上,通过 jsDelivr CDN 加速分发。


六、项目目录结构

misc/ └── collapsed-tiles/ ├── global-ai-availability.stoverride # 主覆写配置 ├── img/ # 服务图标(PNG) │ ├── chatgpt.png │ ├── claude.png │ ├── codex.png │ ├── copilot.png │ ├── disney.png │ ├── gemini.png │ ├── grok.png │ ├── netflix.png │ ├── spotify.png │ └── youtube.png └── script/ # 检测脚本(JS) ├── chatgpt-web.js ├── chatgpt-app.js ├── claude.js ├── codex.js ├── copilot.js ├── disney.js ├── gemini.js ├── grok.js ├── netflix.js ├── spotify.js └── youtube.js

七、相比上游的改进

基于 StashNetworks/misc 的原始 ChatGPT + YouTube + Netflix 三项检测,本项目做了以下扩展:

  • 新增 7 项检测:Codex、Claude、Grok、Gemini、Copilot、Disney+、Spotify
  • 改进 YouTube 检测:通过解析 "GL":"XX" 提取出口地区码,而不是简单判断可达性
  • 改进 Spotify 检测:使用注册验证 API 获取 countryis_country_launched 精确判断
  • 每个服务独立品牌色:磁贴背景色与服务品牌色匹配(如 Spotify #1DB954、YouTube #FF0000
  • 多 CDN 线路:提供 Fastly、GitHub Raw、国内镜像三条安装线路

八、扩展自定义检测

如果要新增一个服务检测,只需三步:

  1. script/ 下新建 JS 文件,实现检测逻辑并通过 $done() 返回结果
  2. img/ 下放入对应服务图标
  3. .stoverridetilesscript-providers 中各添加一项

检测脚本模板:

async function request(method, params) { return new Promise((resolve, reject) => { $httpClient[method.toLowerCase()](params, (error, response, data) => { resolve({ error, response, data }); }); }); } async function main() { const { error, response, data } = await request("GET", "https://example.com"); if (error) { $done({ content: "Network Error", backgroundColor: "" }); return; } // 根据 response/data 判断可用性 $done({ content: "Available", backgroundColor: "#HEXCOLOR" }); } (async () => { main().catch(() => $done({})); })();

Push 到 GitHub 后,通过 purge.jsdelivr.net 刷新 CDN 缓存即可生效。

This post is licensed under CC BY 4.0 by the author.