这是快捷指令源码工具的后端API服务,用于从iCloud链接获取iOS快捷指令源代码并转换为JSON或XML格式。
- 从iCloud链接提取快捷指令源码
- 支持JSON和XML输出格式
- 完整的错误处理和日志记录
- 内置CORS支持
- Docker容器化部署支持
- Python 3.11+
- FastAPI
- Uvicorn
- Docker
- Python 3.11或更高版本
- pip (Python包管理器)
pip install -r requirements.txt复制.env.example文件为.env并根据需要进行修改:
cp .env.example .env主要配置项说明:
API_HOST: API服务监听地址API_PORT: API服务监听端口LOG_LEVEL: 日志级别 (INFO, DEBUG等)ENABLE_CORS: 是否启用CORSALLOWED_ORIGINS: 允许的来源域名,用逗号分隔ALLOWED_METHODS: 允许的HTTP方法ALLOWED_HEADERS: 允许的HTTP头
python app.py- Docker
- Docker Compose (可选)
docker build -t shortcut-api .docker run -p 8888:3333 -d shortcut-api创建一个docker-compose.yml文件:
version: '3'
services:
shortcut-api:
build: .
ports:
- "8888:3333"
environment:
- API_HOST=0.0.0.0
- API_PORT=3333
- LOG_LEVEL=INFO运行:
docker-compose up -dGET /?shortcuturl={url}&fmt={format}
shortcuturl: iCloud快捷指令链接,例如https://www.icloud.com/shortcuts/abcdef1234567890fmt: 输出格式,可选值为json(默认) 或xml
成功时返回快捷指令的内容,格式根据fmt参数确定。
GET /?shortcuturl=https://www.icloud.com/shortcuts/abcdef1234567890&fmt=json
{
"WFWorkflowName": "示例快捷指令",
"WFWorkflowMinimumClientVersionString": "900",
"WFWorkflowClientVersion": "1101",
"WFWorkflowActions": [...]
}GET /health
{
"status": "ok"
}以下是推荐的Nginx配置,用于代理API请求并正确处理CORS:
server {
listen 8443 ssl http2;
listen [::]:8443 ssl http2;
server_name your-api-domain.com;
# SSL证书配置
ssl_certificate /path/to/cert.crt;
ssl_certificate_key /path/to/key.pem;
# TLS配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# CORS配置 - 注意不要重复添加头
location / {
# 允许跨域请求 - 每个头只设置一次
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
# 处理 OPTIONS 请求
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时设置
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}如果您使用Cloudflare,可能需要:
- 将SSL/TLS模式设置为"Full"或"Full (Strict)"
- 禁用Cloudflare的CORS设置,避免重复添加头
- 或者考虑将API域名设置为DNS-only模式(灰云模式)
- 确保服务器上安装了必要的依赖,特别是用于XML处理的库
- 对于大型快捷指令,可能需要调整超时设置
- 必须确保CORS头不被重复添加,无论是通过Nginx还是Cloudflare
- Docker容器内部使用端口3333,记得在映射到外部端口时注意这一点
MIT