
上一篇关于homepage使用TMDB热门影视剧海报做背景 ,虽然tmdb的域名加了代理,但是加载背景图还是有些延迟,这期就来利用免费Cloudflare Workers来搭建TMDB 镜像加速站。
-
创建 Worker:登录 Cloudflare 控制台,点击 “Workers & Pages” -> “Create Worker”。
-
部署代码:将以下代码贴入编辑器中并部署:
-
export default { async fetch(request, env, ctx) { const url = new URL(request.url); // 目标指向 TMDB 官方图片域名 const targetUrl = "https://image.tmdb.org" + url.pathname + url.search; // 构造新的请求 const newRequest = new Request(targetUrl, { method: request.method, headers: request.headers, }); try { const response = await fetch(newRequest); // 关键:修改响应头以解决跨域 (CORS) 和安全问题 const newHeaders = new Headers(response.headers); newHeaders.set("Access-Control-Allow-Origin", "*"); newHeaders.set("Access-Control-Allow-Methods", "GET, OPTIONS"); newHeaders.set("Cache-Control", "public, max-age=86400"); // 缓存图片 24 小时 return new Response(response.body, { status: response.status, statusText: response.statusText, headers: newHeaders, }); } catch (e) { return new Response("Proxy Error: " + e.message, { status: 500 }); } }, };保存并部署:点击右上角的 “Save and Deploy”
-
第三步:获取你的专属加速域名
-
复制地址:部署成功后,你会得到一个以
.workers.dev结尾的链接(例如tmdb-image-proxy.cfan.workers.dev)。 -
测试访问:尝试在浏览器访问:
https://你的域名/t/p/original/coaPCIqQBPUZsOnJcWZxhaORcDT.jpg。如果能看到图片,说明镜像搭建成功。
第四步:更新你的
custom.js现在回到 Homepage 的
custom.js文件,将图片地址的拼接逻辑修改为你的新域名。 -
-
// 原来的代码 // const imageUrl = `https://image.tmdb.org/t/p/original${randomItem.backdrop_path}`; // 修改为你的 Cloudflare Worker 域名 const imageUrl = `https://tmdb-image-proxy.你的名字.workers.dev/t/p/original${randomItem.backdrop_path}`;最终完整代码如下:
-
(function() { // ================= 配置区 ================= const TMDB_API_KEY = 'tmdb-api'; const PROXY_DOMAIN = 'https://最好绑定一个自己的域名.com'; // 你的 Cloudflare Worker 镜像域名 // 增加时间戳防止 API 缓存,确保每次刷新都随机 const API_URL = `https://api.themoviedb.org/3/trending/all/day?api_key=${TMDB_API_KEY}&language=zh-CN&_t=${new Date().getTime()}`; // ========================================== async function fetchTmdbWallpaper() { try { const response = await fetch(API_URL); if (!response.ok) throw new Error("API Request Failed"); const data = await response.json(); const items = data.results.filter(item => item.backdrop_path); if (items.length > 0) { // 仅在前 10 名最热门中随机,保证背景质量 const randomIndex = Math.floor(Math.random() * 10); const randomItem = items[randomIndex] || items[0]; // 使用 original 获取最高清画质,配合镜像站实现秒开 const imageUrl = `https://${PROXY_DOMAIN}/t/p/original${randomItem.backdrop_path}`; console.log(`[SpeedMode] 正在加载: ${randomItem.title || randomItem.name}`); applyBackground(imageUrl); } } catch (error) { console.error("背景获取失败,使用默认图"); applyBackground(`https://${PROXY_DOMAIN}/t/p/original/coaPCIqQBPUZsOnJcWZxhaORcDT.jpg`); } } function applyBackground(url) { const body = document.body; // 直接将 URL 注入背景,利用浏览器原生缓存机制 body.style.backgroundImage = `linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), url('${url}')`; body.style.backgroundSize = 'cover'; body.style.backgroundPosition = 'center'; body.style.backgroundAttachment = 'fixed'; body.style.backgroundRepeat = 'no-repeat'; // 缩短渐变时间,让图片呈现更快 body.style.transition = "background-image 0.3s ease-in-out"; } fetchTmdbWallpaper(); })();⚠️注意:
-
1.修改代码中tmdb api
-
2. workers域名(最好绑定一个自己的域名)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END











暂无评论内容