Skip to content

Fetch Trakt Data

Fetch Trakt Data #537

Workflow file for this run

# 定时抓取 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 }}