├── version ├── img └── nullbr.png ├── dist ├── usercustomize.cpython-312-aarch64-linux-gnu.so └── usercustomize.cpython-312-x86_64-linux-gnu.so ├── .cnb.yml ├── .github └── workflows │ └── docker-build.yml └── README.md /version: -------------------------------------------------------------------------------- 1 | 2025110701 -------------------------------------------------------------------------------- /img/nullbr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLay1678/nullbr_cms_bot/HEAD/img/nullbr.png -------------------------------------------------------------------------------- /dist/usercustomize.cpython-312-aarch64-linux-gnu.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLay1678/nullbr_cms_bot/HEAD/dist/usercustomize.cpython-312-aarch64-linux-gnu.so -------------------------------------------------------------------------------- /dist/usercustomize.cpython-312-x86_64-linux-gnu.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iLay1678/nullbr_cms_bot/HEAD/dist/usercustomize.cpython-312-x86_64-linux-gnu.so -------------------------------------------------------------------------------- /.cnb.yml: -------------------------------------------------------------------------------- 1 | include: 2 | - https://cnb.cool/ilay1678/templates/-/blob/main/ci/sync_to_github.yml 3 | - https://cnb.cool/ilay1678/templates/-/blob/main/ci/ide.python.yml -------------------------------------------------------------------------------- /.github/workflows/docker-build.yml: -------------------------------------------------------------------------------- 1 | name: Build and Push Docker Image 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | paths-ignore: 8 | - 'README.md' 9 | - '.gitignore' 10 | pull_request: 11 | branches: 12 | - master 13 | paths-ignore: 14 | - 'README.md' 15 | - '.gitignore' 16 | permissions: 17 | contents: read 18 | packages: write 19 | id-token: write 20 | actions: write 21 | 22 | jobs: 23 | build: 24 | runs-on: ubuntu-latest 25 | 26 | steps: 27 | 28 | - name: Checkout repository 29 | uses: actions/checkout@v2 30 | with: 31 | submodules: 'true' 32 | 33 | - name: Set up QEMU 34 | uses: docker/setup-qemu-action@v3 35 | 36 | - name: Set up Docker Buildx 37 | uses: docker/setup-buildx-action@v3 38 | 39 | - name: Log into GHCR 40 | uses: docker/login-action@master 41 | with: 42 | registry: ghcr.io 43 | username: ${{ github.repository_owner }} 44 | password: ${{ github.token }} 45 | 46 | - name: set lower case owner name 47 | run: | 48 | echo "OWNER_LC=${OWNER,,}" >>${GITHUB_ENV} 49 | env: 50 | OWNER: "${{ github.repository_owner }}" 51 | 52 | 53 | - name: Build and push Docker image 54 | uses: docker/build-push-action@v5 55 | with: 56 | context: . 57 | platforms: linux/amd64,linux/arm64/v8 58 | file: ./Dockerfile 59 | push: true 60 | tags: | 61 | ghcr.io/${{ env.OWNER_LC }}/nullbr_cms_bot:latest 62 | 63 | - name: Post build cleanup 64 | run: docker builder prune --force -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # CloudMediaSync 增强版 3 | ![PyPI - Version](https://img.shields.io/pypi/v/cms_enhance) 4 | ![PyPI - Downloads](https://img.shields.io/pypi/dm/cms_enhance) 5 | ![PyPI - Wheel](https://img.shields.io/pypi/wheel/cms_enhance) 6 | 7 | 在CloudMediaSync基础上增强了页面和消息渠道的一些功能,并增加了一些开放接口,便于其他程序调用 8 | 9 | ## 部署 10 | 11 | ### 基于原版安装教程 12 | 13 | 14 | #### 1. 下载增强文件 15 | 16 | 进入CloudMediaSync部署目录,全选复制以下命令并执行,自动识别系统架构并下载对应文件(macOS 的 arm64 将自动映射为 aarch64): 17 | 18 | ```bash 19 | arch=$(uname -m) 20 | case "$arch" in 21 | x86_64|amd64) 22 | pkg_arch="x86_64" 23 | ;; 24 | arm64|aarch64) 25 | pkg_arch="aarch64" 26 | ;; 27 | *) 28 | echo "不支持的架构: $arch" >&2 29 | exit 1 30 | ;; 31 | esac 32 | 33 | URL="https://cnb.cool/ilay1678/cloud-media-sync-enhanced/-/git/raw/master/dist/usercustomize.cpython-312-${pkg_arch}-linux-gnu.so" 34 | echo "Downloading $URL ..." 35 | if command -v wget >/dev/null 2>&1; then 36 | wget -O usercustomize.so "$URL" 37 | else 38 | curl -L "$URL" -o usercustomize.so 39 | fi 40 | echo "Saved to ./usercustomize.so" 41 | ``` 42 | 43 | #### 2. 修改docker-compose.yaml文件 44 | 45 | 挂载增强文件并增加环境变量: 46 | 47 | ```yaml 48 | services: 49 | cloud-media-sync: 50 | privileged: true 51 | container_name: cloud-media-sync 52 | image: imaliang/cloud-media-sync:latest # 使用原版镜像 53 | restart: always 54 | network_mode: bridge 55 | volumes: 56 | - "./config:/config" 57 | - "./logs:/logs" 58 | - "./cache:/var/cache/nginx/emby" 59 | - "/data/media:/media" 60 | # 挂载增强文件 61 | - "./usercustomize.so:/cms/cms-api/usercustomize.so" 62 | ports: 63 | - "9527:9527" 64 | - "9096:9096" 65 | environment: 66 | - PUID=0 67 | - PGID=0 68 | - UMASK=022 69 | - TZ=Asia/Shanghai 70 | - RUN_ENV=online 71 | - ADMIN_USERNAME=admin 72 | - ADMIN_PASSWORD=admin 73 | - CMS_API_TOKEN=cloud_media_sync 74 | - EMBY_HOST_PORT=http://172.17.0.1:8096 75 | - EMBY_API_KEY=xxx 76 | - DONATE_CODE=CMS_XXX_XXX 77 | # Nullbr配置(增强功能所需) 78 | - NULLBR_APP_ID=your_app_id_here 79 | - NULLBR_API_KEY=your_api_key_here 80 | - NULLBR_BASE_URL=https://api.nullbr.online 81 | # Panso配置(可选的额外搜索源) 82 | - PANSO_URL=http://your_panso_server_url # 不配置则不启用Panso 83 | - PANSO_USERNAME=your_username # 可选,不配置表示无需认证 84 | - PANSO_PASSWORD=your_password # 可选,不配置表示无需认证 85 | ``` 86 | 87 | #### 3. 启动服务 88 | 89 | ```bash 90 | docker-compose up -d 91 | ``` 92 | 93 | #### 注意事项 94 | 95 | - 增强功能需要配置Nullbr相关环境变量才能正常工作 96 | - Panso是可选的额外搜索源,如果不配置PANSO_URL则不会启用 97 | - 如果Panso服务不需要认证,可以不配置PANSO_USERNAME和PANSO_PASSWORD 98 | ## 页面增强 99 | ### 热门推荐的订阅按钮增加nullbr资源弹窗 100 | ![](https://github.com/iLay1678/cloud-media-sync-enhanced/raw/master/img/nullbr.png) 101 | ## 消息渠道增强 102 | 103 | ### 功能概述 104 | 105 | 为 `CloudMediaSynC`的Telegram 机器人和企业微信渠道提供了增强功能,集成了 Nullbr 和 Panso API 实现智能媒体搜索和转存。 106 | 107 | ### 主要功能 108 | 109 | #### 智能媒体搜索 110 | - **触发方式**: 以 `?` 或 `?` 开头发送消息 111 | - **示例**: `? 三体`、`? 复仇者联盟` 112 | - **功能**: 自动搜索电影、电视剧等媒体资源 113 | - **搜索源**: 114 | - 优先使用 Nullbr 搜索(如果已配置) 115 | - 如果 Nullbr 不可用,自动使用 Panso 搜索(如果已配置) 116 | - **返回**: 搜索结果列表,支持查看详情 117 | 118 | #### Panso 搜索源 119 | Panso 作为额外的搜索源,提供网盘链接聚合服务: 120 | - **搜索结果格式**: 按网盘类型分组(百度网盘、阿里云盘、夸克网盘等) 121 | - **支持操作**: 122 | - 显示各类型网盘的资源链接 123 | - 回复 p1、p2、p3... 查看详细链接并自动转存 124 | - 直接复制链接手动转存 125 | 126 | 127 | 128 | ## 开放接口 129 | 130 | ### 添加分享下载任务 131 | 132 | **接口地址:** `POST /api/open/add_share_down?token=cloud_media_sync` 133 | 134 | **功能描述:** 添加一个分享下载任务到系统中 135 | 136 | #### 请求参数 137 | 138 | | 参数名 | 类型 | 必填 | 说明 | 139 | |--------|------|------|------| 140 | | url | string | 是 | 分享链接URL | 141 | 142 | #### 请求示例 143 | 144 | ```json 145 | { 146 | "url": "https://example.com/share/123456" 147 | } 148 | ``` 149 | 150 | #### 响应格式 151 | 152 | **成功响应:** 153 | ```json 154 | { 155 | "code": 200, 156 | "msg": "操作成功" 157 | } 158 | ``` 159 | 160 | **失败响应:** 161 | ```json 162 | { 163 | "code": 400, 164 | "msg": "参数错误" 165 | } 166 | ``` 167 | 168 | 或 169 | 170 | ```json 171 | { 172 | "code": 500, 173 | "msg": "具体错误信息" 174 | } 175 | ``` 176 | 177 | #### 响应状态码说明 178 | 179 | | 状态码 | 说明 | 180 | |--------|------| 181 | | 200 | 操作成功 | 182 | | 400 | 参数错误(缺少url参数) | 183 | | 500 | 服务器内部错误 | 184 | 185 | #### 注意事项 186 | 187 | - 成功添加分享下载任务后,系统会自动触发整理任务(5秒后执行) 188 | - URL参数不能为空 189 | - 请确保提供的分享链接有效 190 | 191 | --- 192 | 193 | ### Panso 搜索接口 194 | 195 | Panso 作为额外的搜索源,本系统提供了代理接口访问远程Panso服务。 196 | 197 | #### 工作原理 198 | 199 | - 当配置了 `PANSO_URL` 后,系统会自动连接到远程Panso服务 200 | - 如果配置了 `PANSO_USERNAME` 和 `PANSO_PASSWORD`,系统会自动向远程Panso服务认证 201 | - 用户无需手动登录,系统内部自动处理认证和token管理 202 | 203 | #### 本地代理接口 - POST /api/panso/search 204 | 205 | 通过本地API代理访问远程Panso服务的搜索功能。 206 | 207 | **请求参数:** 208 | 209 | | 参数名 | 类型 | 必填 | 描述 | 210 | |--------|------|------|------| 211 | | kw | string | 是 | 搜索关键词 | 212 | | channels | string[] | 否 | 搜索的频道列表,不提供则使用默认配置 | 213 | | conc | number | 否 | 并发搜索数量,不提供则自动设置 | 214 | | refresh | boolean | 否 | 强制刷新,不使用缓存 | 215 | | res | string | 否 | 结果类型:all/results/merge,默认merge | 216 | | src | string | 否 | 数据来源:all/tg/plugin,默认all | 217 | | plugins | string[] | 否 | 指定搜索的插件列表 | 218 | | cloud_types | string[] | 否 | 指定返回的网盘类型列表 | 219 | | ext | object | 否 | 扩展参数,传递给插件的自定义参数 | 220 | 221 | **请求示例:** 222 | ```json 223 | { 224 | "kw": "三体", 225 | "res": "merge", 226 | "cloud_types": ["baidu", "aliyun", "quark"] 227 | } 228 | ``` 229 | 230 | **响应字段:** 231 | 232 | | 字段名 | 类型 | 描述 | 233 | |--------|------|------| 234 | | total | number | 搜索结果总数 | 235 | | results | object[] | 搜索结果数组,包含详细信息 | 236 | | merged_by_type | object | 按网盘类型分组的链接 | 237 | 238 | **响应示例:** 239 | ```json 240 | { 241 | "total": 10, 242 | "merged_by_type": { 243 | "baidu": [ 244 | { 245 | "url": "https://pan.baidu.com/s/xxxxx", 246 | "password": "1234", 247 | "note": "三体全集 4K", 248 | "datetime": "2024-01-01T00:00:00Z", 249 | "source": "tg:某频道", 250 | "images": ["https://example.com/image.jpg"] 251 | } 252 | ], 253 | "aliyun": [ 254 | { 255 | "url": "https://www.aliyundrive.com/s/xxxxx", 256 | "password": "", 257 | "note": "三体 蓝光原盘", 258 | "datetime": "2024-01-02T00:00:00Z", 259 | "source": "plugin:某插件" 260 | } 261 | ] 262 | } 263 | } 264 | ``` 265 | 266 | #### GET方式搜索 - GET /api/panso/search 267 | 268 | 也支持GET方式搜索,参数通过query string传递: 269 | 270 | ``` 271 | GET /api/panso/search?kw=三体&res=merge&cloud_types=baidu,aliyun 272 | ``` 273 | 274 | #### 注意事项 275 | 276 | - 系统会自动处理与远程Panso服务的认证,无需手动登录 277 | - 如果环境变量配置了PANSO_USERNAME和PANSO_PASSWORD,系统会自动认证 278 | - 如果未配置认证信息,系统将尝试无认证访问远程Panso服务 279 | - Token管理完全自动化,包括过期重新获取 280 | - 建议使用POST方式传递复杂参数 281 | --------------------------------------------------------------------------------