9368b5d80cd647e1af0eb9ee45878e2a0e0c94fe
Parse nested openapi envelopes from HDHive search/unlock endpoints so resource lists and links are extracted from inner data instead of incorrectly falling back to empty arrays. Co-authored-by: Cursor <cursoragent@cursor.com>
media_crawler
资源爬取自动入库项目,采用前后端分层:
frontend/: Vue + JavaScript 页面backend/: Python Flask API(编排 TMDB -> HDHIVE -> Emby -> CMS)
本地启动
1) 启动后端(Flask)
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
python app.py
默认端口:
- 后端:
14620 - 前端:
14621
后端 .env 中 HDHIVE 相关参数按 OpenAPI 文档配置:
HDHIVE_BASE_URL例如https://hdhive.comHDHIVE_API_KEY对应请求头X-API-Key(必填)HDHIVE_ACCESS_TOKEN对应Authorization: Bearer ...(按授权场景可选)
后端 CMS 入库参数支持两种模式:
- 直接给固定 token:
CMS_TOKEN - 自动登录获取 token:
CMS_LOGIN_URL+CMS_USERNAME+CMS_PASSWORD
入库接口地址使用 CMS_ADD_SHARE_URL(或 CMS_BASE_URL 自动拼接 /api/cloud/add_share_down)。
2) 启动前端(Vite)
cd frontend
cp .env.example .env
npm install
npm run dev
页面能力
- 主页面支持按关键词在 TMDB 搜索影视
- 点击影视封面进入详情页,展示 HDHive 资源列表
- 点击资源链接触发入库任务(按资源 slug 入库)
- 任务中心位于二级页面
/tasks - 前端调用 Flask API:
POST /api/tasks、GET /api/tasks、GET /api/tasks/{taskId}/logs - 前端新增接口:
GET /api/media/search、GET /api/media/{type}/{tmdbId} - 任务状态、结果、错误和步骤日志展示
- 后端使用 SQLite 保存任务、资源和日志,并按
tmdb_id做幂等控制 - 后端统一错误分类:
validation、authentication、authorization、rate_limit、not_found、business_rule、network、timeout、upstream、internal
Docker 单容器运行
项目提供了单容器运行前后端的 Dockerfile,容器启动时会先从 Git 拉取最新代码,然后再启动:
- Flask 后端:
14620 - 前端预览服务:
14621
构建镜像
docker build -t media-crawler:latest .
构建较慢时可使用加速参数(BuildKit + host 网络 + 可选 apt 镜像):
DOCKER_BUILDKIT=1 docker build --network=host \
--build-arg APT_MIRROR=mirrors.aliyun.com \
-t media-crawler:latest .
运行容器
docker run --rm -it \
-p 14620:14620 \
-p 14621:14621 \
-v media_crawler_runtime:/app/runtime \
--env-file backend/.env \
-e GIT_REPO_URL=https://git.rc707blog.top/rose_cat707/media_crawler.git \
-e GIT_BRANCH=main \
media-crawler:latest
可选环境变量:
GIT_REPO_URL:容器启动时拉取代码的仓库地址GIT_BRANCH:拉取分支(默认main)WORKTREE_DIR:容器内代码目录(默认/app/runtime)NPM_REGISTRY:前端依赖安装镜像源(默认https://registry.npmjs.org)NPM_FALLBACK_REGISTRY:NPM_REGISTRY失败时回退源(默认https://registry.npmjs.org)FORCE_FRONTEND_REBUILD:强制每次重装前端依赖并重建(默认0,仅 lockfile 变更时才安装构建)NPM_INSTALL_TIMEOUT_SEC:前端依赖安装超时秒数(默认900)NPM_PROGRESS_INTERVAL_SEC:安装过程心跳日志间隔秒数(默认15)
Description
Languages
Python
58.9%
Vue
23.4%
CSS
6.5%
Shell
6.5%
JavaScript
3.3%
Other
1.4%