使用使用 Cloudflare Workers搭建tmdb加速站

20251225082245615046

 

上一篇关于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”

  • 第三步:获取你的专属加速域名

    1. 复制地址:部署成功后,你会得到一个以 .workers.dev 结尾的链接(例如 tmdb-image-proxy.cfan.workers.dev)。

    2. 测试访问:尝试在浏览器访问: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
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容