Fetch Trakt Data #537
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 定时抓取 Trakt 观影数据 | |
| # 每 2 小时执行一次,或手动触发 | |
| name: Fetch Trakt Data | |
| on: | |
| push: | |
| branches: [main] | |
| schedule: | |
| # 每 2 小时运行一次(UTC 时间) | |
| - cron: '0 */2 * * *' | |
| # 允许手动触发(用于首次运行或调试) | |
| workflow_dispatch: | |
| # 授予 GITHUB_TOKEN 写权限,允许触发 deploy 工作流 | |
| permissions: | |
| contents: write | |
| actions: write | |
| jobs: | |
| fetch: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| # ① 检出公开仓库代码 | |
| - name: 检出仓库 | |
| uses: actions/checkout@v4 | |
| # ② 从私有仓库拉取数据库(增量基准) | |
| - name: 拉取私有仓库数据 | |
| run: | | |
| git clone https://x-access-token:${{ secrets.GH_PAT }}@github.com/shengdaozm/traktData.git /tmp/data-repo | |
| mkdir -p data/reports | |
| cp /tmp/data-repo/data/trakt.db data/trakt.db | |
| cp -r /tmp/data-repo/data/reports/. data/reports/ 2>/dev/null || true | |
| cp /tmp/data-repo/data/user_ratings.json data/user_ratings.json 2>/dev/null || true | |
| cp /tmp/data-repo/data/embeddings.json data/embeddings.json 2>/dev/null || true | |
| mkdir -p web/public/data | |
| cp -r /tmp/data-repo/web/public/data/. web/public/data/ 2>/dev/null || true | |
| # 清理旧的数字分页格式 recent 文件(保留 recent_meta.json,已被月份格式替代) | |
| find web/public/data -name 'recent_[0-9]*.json' -delete 2>/dev/null || true | |
| # ③ 配置 Python 环境 | |
| - name: 配置 Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| cache: 'pip' | |
| # ④ 安装依赖 | |
| - name: 安装 Python 依赖 | |
| run: pip install -r requirements.txt | |
| # ⑤ 执行数据抓取 | |
| - name: 抓取 Trakt 数据 | |
| run: python -m scripts.fetch | |
| env: | |
| TRAKT_CLIENT_ID: ${{ secrets.TRAKT_CLIENT_ID }} | |
| TRAKT_USERNAME: ${{ secrets.TRAKT_USERNAME }} | |
| TMDB_API_KEY: ${{ secrets.TMDB_API_KEY }} | |
| # ⑤b 补全缺失的 TMDB 海报 | |
| - name: 补全 TMDB 海报 | |
| run: python -m scripts.backfill_posters | |
| env: | |
| TMDB_API_KEY: ${{ secrets.TMDB_API_KEY }} | |
| # ⑤b-2 生成用户评分模板(预填充已看过内容 + 中文名) | |
| - name: 生成评分模板 | |
| run: python -m scripts.init_ratings | |
| env: | |
| TMDB_API_KEY: ${{ secrets.TMDB_API_KEY }} | |
| # ⑤c 生成观影人格画像(DeepSeek 大模型分析) | |
| - name: 生成人格画像 | |
| run: python -m scripts.persona | |
| env: | |
| LLM_API_KEY: ${{ secrets.LLM_API_KEY }} | |
| LLM_API_BASE: ${{ secrets.LLM_API_BASE }} | |
| LLM_MODEL: ${{ secrets.LLM_MODEL }} | |
| # ⑤d 抓取演员/导演数据(增量模式,只拉缺 cast 的媒体) | |
| - name: 抓取演员数据 | |
| continue-on-error: true | |
| run: python -m scripts.fetch_cast | |
| env: | |
| TMDB_API_KEY: ${{ secrets.TMDB_API_KEY }} | |
| # ⑤e 生成语义 Embedding(本地模型,首次运行需下载) | |
| - name: 生成语义 Embedding | |
| run: python -m scripts.embedding | |
| env: | |
| TRANSFORMERS_CACHE: /tmp/transformers_cache | |
| continue-on-error: true | |
| # ⑥ 生成前端 JSON 数据(内部已调用 render_profile 生成画像/推荐 JSON) | |
| - name: 生成前端数据 | |
| run: python -m scripts.render | |
| env: | |
| LLM_API_KEY: ${{ secrets.LLM_API_KEY }} | |
| LLM_API_BASE: ${{ secrets.LLM_API_BASE }} | |
| LLM_MODEL: ${{ secrets.LLM_MODEL }} | |
| # ⑦ 推送数据到私有仓库(数据库 + 前端 JSON) | |
| - name: 推送数据到私有仓库 | |
| id: push_private | |
| run: | | |
| cp data/trakt.db /tmp/data-repo/data/trakt.db | |
| mkdir -p /tmp/data-repo/data/reports | |
| cp -r data/reports/. /tmp/data-repo/data/reports/ 2>/dev/null || true | |
| # 同步评分文件到私有仓库 | |
| cp data/user_ratings.json /tmp/data-repo/data/user_ratings.json 2>/dev/null || true | |
| cp data/embeddings.json /tmp/data-repo/data/embeddings.json 2>/dev/null || true | |
| # 先清理私有仓库中的旧 recent 文件,再同步(render.py 已重新生成所有 recent 文件) | |
| rm -f /tmp/data-repo/web/public/data/recent_*.json | |
| mkdir -p /tmp/data-repo/web/public/data | |
| cp -r web/public/data/. /tmp/data-repo/web/public/data/ 2>/dev/null || true | |
| cd /tmp/data-repo | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git add -A data/ web/public/data/ | |
| if git diff --cached --quiet; then | |
| echo "数据无变更,跳过提交" | |
| echo "changed=false" >> $GITHUB_OUTPUT | |
| else | |
| git commit -m "data: 自动更新 $(date -u +'%Y-%m-%dT%H:%M:%SZ')" | |
| git push | |
| echo "changed=true" >> $GITHUB_OUTPUT | |
| fi | |
| # ⑧ 数据有变更时触发部署(不提交到公开仓库) | |
| - name: 触发部署 | |
| if: steps.push_private.outputs.changed == 'true' | |
| run: gh workflow run deploy.yml | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |