Hexo 腾讯视频追剧页插件:hexo-tengxun-eucalyptus 安装使用

一款 Hexo 通用插件,自动同步腾讯视频「加追」和「预约」列表,生成卡片网格追剧页。不绑定 anzhiyu 主题,任何 Hexo 博客都能用。

最终效果

Demo:https://blog.eucalyptus.cc/zhuijus/

全页效果

核心能力:

  • 账号同步:拉取腾讯视频「加追」和「预约」列表,自动按集数进度分组
  • 手动清单:不想绑账号也能手动填 cid 维护清单
  • 卡片网格:竖版海报墙 + tabs 切换 + 搜索过滤
  • 智能增量:集数没变的剧跳过详情接口,大幅缩短同步时间
  • Cookie 降级:登录态过期时自动用上一次缓存按标记重分组,页面不崩

安装

方式一:从 npm(推荐,稳定版)

1
npm install hexo-tengxun-eucalyptus

方式二:从 GitHub(跟随最新 master,适合想改源码的同学)

1
npm install git+https://github.com/ShiningStarLi/hexo-tengxun-eucalyptus.git

Hexo ≥ 5.0 自动识别插件,无需额外注册。

配置(可选)

在站点 _config.yml 里加一段 zhuiju_vqq:,所有字段都有默认值,不配也能用:

1
2
3
4
5
6
7
8
9
10
11
zhuiju_vqq:
enable: true # 是否启用(默认 true)
path: zhuijus/ # 生成的页面路径(默认 zhuijus/)
title: 追剧列表 # 页面标题(默认「追剧列表」)
quote: '' # 页面顶部引言(可选)
columns: 5 # 桌面端每行卡片数(默认 5)
primary_color: null # 主色调 null 时跟随 Hexo 主题变量 --anzhiyu-main
groups: # 分组定义(顺序即 tabs 顺序)
- { key: airing, label: 追剧 }
- { key: finished, label: 已完结 }
- { key: reserved, label: 预约 }

两种运行模式

A. 账号同步(推荐)

在浏览器登录腾讯视频(https://v.qq.com)后:

  1. 打开 DevTools → Console
  2. 执行 copy(document.cookie) — 整串 cookie 已复制到剪贴板
  3. 粘贴到博客项目根目录,保存为 .vqq-cookie(无扩展名)

然后跑同步命令:

1
npx hexo zhuiju -u

脚本自动调三个接口:

接口 鉴权 用途
getAlbumList 需要 Cookie 「加追」列表(scene=1)+ 「预约」列表(scene=2)
float_vinfo2 无 单部剧详情:标题/封面/年份/题材/主演/集数
GetGradeDetail 无 评分、评分人数、好评率

Cookie 通常一到两个月过期,过期时脚本会自动用上一次缓存兜底,页面照常显示,只是不会更新数据。什么时候想更新了,重新 copy(document.cookie) 覆盖 .vqq-cookie 再跑一遍就行。

B. 手动清单

不想用账号同步的话,在 source/_data/zhuiju_src.json 里手动填:

1
2
3
4
5
6
7
8
{
"airing": [
{ "cid": "xxx", "url": "https://v.qq.com/x/cover/xxx.html" }
],
"finished": [
{ "cid": "yyy", "url": "https://v.qq.com/x/cover/yyy.html" }
]
}

cid 就是腾讯视频 URL https://v.qq.com/x/cover/<cid>.html 里那串字母数字。之后同样跑 npx hexo zhuiju -u。

构建部署

1
2
3
4
5
6
7
8
9
10
# 1. 同步数据(A 模式需要 Cookie,B 模式需要 zhuiju_src.json)
npx hexo zhuiju -u

# 2. 构建静态页面(zhuijus.json → public/zhuijus/index.html)
npx hexo clean && npx hexo generate

# 3. 本地预览
npx hexo s

# 4. 部署到你的服务器(用你自己的部署方式:rsync / git push / 云函数 ...)

构建后访问 https://你的域名/zhuijus/ 就能看到追剧页。

文件结构

1
2
3
4
5
6
7
8
9
10
项目根目录/
├── node_modules/
│ └── hexo-tengxun-eucalyptus/ # npm 插件(自动注册 command + generator)
├── source/
│ ├── _data/
│ │ ├── zhuijus.json # 同步结果缓存(构建时只读这个,不联网)
│ │ └── zhuiju_src.json # 手动清单(B 模式,可选)
│ └── ...
├── .vqq-cookie # 腾讯视频登录 Cookie(A 模式,gitignore 建议忽略)
└── _config.yml # 可选:zhuiju_vqq 配置段

实现细节(源码阅读)

下面是插件内部的一些设计思路,对想二次开发的同学有用。

1. 并发抓详情

原脚本串行 for...of + sleep(250ms),27 部剧 × 2 个接口 ≈ 14 秒。

改成每批 5 个并发(Promise.all + chunk 分组),因为详情接口和评分接口都是无鉴权的,腾讯不会限流。耗时从 14s 降到 2-3s。

2. 智能增量更新

列表接口返回的 mark_label_list[].prime_text 已经告诉我当前集数了。和上次缓存对比一下,没变的剧直接沿用旧数据,跳过详情+评分接口。

实测效果:27 部里通常只有 3-5 部在更新,剩下 22 部全跳过 → 跑一轮 3-5 秒。

catch 到 ret=15006(登录态失效)不退出,而是读上次缓存 zhuijus.json,重新按 autoGroup 分组写回去,再跑 hexo generate。页面照常显示。

封面缩略分流

腾讯 vcover CDN 的缩略后缀横版竖版不通用:

CDN /0 原图 /220 /498
vt-pic(竖版海报) 1.17 MB 55 KB ✅ ✅
hz-pic(横版海报) 366 KB 400 ❌ 42 KB ✅

所以插件里按 URL 分流:

1
2
3
4
5
6
// vt-pic 用 /220,hz-pic 用 /498
const sizedCover = (url) => {
const clean = url.replace(/\/(0|220|300|498|640)$/, '');
const thumb = /hz-pic/i.test(clean) ? '/498' : '/220';
return `${clean}${thumb}`;
};

腾讯 CDN 不支持 AVIF 参数(imageView2、imageMogr2 都无响应),想转 AVIF 得自己下载 → 转码 → 传 CDN,收益不大。

主题适配

插件生成的页面用独立的 <style> 标签包裹,不污染主题样式。主色调默认跟随 Hexo 主题变量 var(--anzhiyu-main, #3db4f2) —— anzhiyu 用户直接用,其他主题如果没这个变量会 fallback 到蓝色 #3db4f2,或者在 _config.yml 的 zhuiju_vqq.primary_color 里硬指定一个。

UI 设计参考

参考项目 说明 链接
Hexo AniList 卡片网格 + tabs + 搜索 + 评分徽章,本次追剧页的主要参考 https://ajratnam.github.io/hexo-anilist/customization.html
hexo-bilibili-bangumi anzhiyu 主题自带的 B 站追番页,同款卡片布局 主题内置 /bangumis/

仓库

有问题可以在文章下面留言。