2026年7月初知道TV Time 宣布关停。这个消息来得突然,但更让我措手不及的是,九年积攒的追剧记录 —— 153 部剧、1141 部电影、2655 集已看 —— 眼看就要随着服务器一起消失。
于是我花了几天时间,做了三件事:导出数据、做了一份可交互的 HTML 存档网站、做一个存档网站生成器。
notion image

一份数据,两种存档

TV Time 本身提供全量导出功能,但 Chrome 扩展 TV Time Out by Refract 可以导出JSON格式和CSV格式数据。一键运行后,它会拉取完整的用户信息、剧集进度、电影记录、勋章,以及每个条目的 TVDB/IMDb 关联 ID。
原始导出是 JSON 和 CSV 格式,但这些文件对人类阅读不太友好。我写了一个 Node.js 生成脚本 (generate.js),把数据渲染成一组静态 HTML 页面:统计卡片、剧集表格、电影表格、勋章墙。
这个版本的存档已经能看了,但说实话,挺素的 —— 深色背景 + 网格卡片,信息密度很高,视觉上没什么层次。

升级:让存档像一个真的网站

数据救下来之后,我开始琢磨:既然都做了,为什么不把它做得更像样一点儿?

海报背景

每部剧都有自己的海报,TV Time 的 API 返回的 TVDB ID 可以用来关联 TMDB 的海报图片。我写了个爬虫把 153 部剧 + 1141 部电影的海报 URL 全抓了下来,存成一个 JS 文件。页面加载时随机选一张作为全屏背景,搭配毛玻璃效果,视觉层次一下就出来了。

主题色系统

纯随机海报太噪了,所以加了一套主题色:Deep Purple、Midnight、Forest、Wine、Space 等 8 种渐变色。有趣的是最开始主题色和海报背景是互斥的 —— 点主题就覆盖海报,点海报就覆盖主题。后来改了逻辑:主题色只作用于卡片背景(Card Opacity),海报保留为全屏背景。这样两者各司其职,互不干扰。

自定义面板

藏在页面右上角的齿轮图标里,包含了:
  • 主题色切换(8 色)
  • 海报模糊 + 叠加层透明度
  • 卡片透明度、模糊、边框开关
  • 随机海报按钮
  • 一键重置
全部设置存入 localStorage,下次打开自动恢复。这个面板几乎是手写 DOM 拼出来的,没有框架,挺有意思。

评论页面

导出数据里还包括了 TV Time 平台上给每部剧写的短评。虽然数据不多,但好歹是九年下来的碎碎念,值得单独放一页。

部署

所有文件都是纯静态的 —— HTML + CSS + JS + JSON,没有后端,没有数据库。随便找个静态托管就能跑。
最终部署到了 tvtime.zhcn.xyz(Cloudflare Pages,国内也访问正常)。
如果没用 Cloudflare Pages,直接打个 zip 扔到任何 Web 服务器上也能跑。

数值回顾

  • 153 部剧,2653 集常规剧集 + 2 集特别篇,6626 集总量(40% 看完)
  • 1141 部电影,1042 部已看(91%),1 部收藏
  • 7 部收藏剧集
  • 34 枚勋章
  • poster_bg.js:约 1300 张海报 URL
  • 整个站点:纯静态,零运行时依赖

技术备忘

项目
方式
数据导出
Chrome 扩展 TV Time Out by Refract
海报源
TMDB API + TVDB ID 关联
静态生成
手写 Node.js 脚本
样式
纯 CSS(毛玻璃、flex/grid、媒体查询)
交互
原生 JavaScript(无框架)
部署
Cloudflare Pages + 国内 CDN
备份
GitHub + 本地 zip 存档

写在最后

TV Time 的关闭让很多人感到惋惜,但数据本身不应该因为服务的关停而消失。
这份存档不仅是为了回顾自己看过什么,也是给未来可能的数据迁移留一条后路 —— 所有数据都在本地,随时可以二次处理。
如果你也在 TV Time 上留下了大量追剧记录,建议趁关停前用 TV Time Out 导出,做个属于你自己的存档。
官方导出地址:
https://gdpr.tvtime.com/gdpr/self-service
TV Time Out by Refract:
https://chromewebstore.google.com/detail/tv-time-out-by-refract/pmejpdpjbkjklfceogdkolmgclldogbi
 
[转载]iOS 定位修改 · 小白保姆级教程(Shadowrocket 小火箭)iOS虚拟定位还能这么玩?
Loading...