You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何点击时修改IMDB按钮链接,拼接TMDB API获取的imdb_id

实现IMDB按钮动态拼接imdb_id链接的方案

我来帮你搞定这个需求!根据你描述的情况——TMDB剧集详情接口不返回imdb_id,需要单独调用external_ids接口获取,然后把这个ID拼到IMDB的链接里,点击按钮时跳转。下面是具体的实现步骤和代码示例:

1. 基础HTML结构

先准备好IMDB按钮的基础结构,初始可以留空跳转逻辑:

<button id="imdbBtn" type="button">查看IMDB详情</button>

2. JavaScript实现逻辑

这里分两种常用场景,你可以根据自己的业务需求选择:

场景一:页面加载时预加载imdb_id(推荐)

这种方式会在页面加载完成后就请求external_ids接口,提前把imdb_id存下来,用户点击按钮时直接跳转,没有等待延迟:

// 替换成你的剧集ID(从剧集详情接口拿到的)和TMDB API密钥
const seriesId = "你的剧集ID";
const tmdbApiKey = "你的TMDB API密钥";
const imdbBtn = document.getElementById("imdbBtn");
let imdbId = null;

// 封装获取外部ID的异步函数
async function fetchExternalIds() {
  try {
    const response = await fetch(
      `https://api.themoviedb.org/3/tv/${seriesId}/external_ids?api_key=${tmdbApiKey}`
    );
    const data = await response.json();
    imdbId = data.imdb_id;
    
    // 成功获取后绑定跳转逻辑
    if (imdbId) {
      imdbBtn.addEventListener("click", () => {
        window.open(`https://www.imdb.com/title/${imdbId}`, "_blank");
      });
    }
  } catch (error) {
    console.error("获取IMDB ID失败:", error);
    // 错误处理:禁用按钮并提示用户
    imdbBtn.disabled = true;
    imdbBtn.textContent = "无法获取IMDB链接";
  }
}

// 页面加载完成后执行预加载
document.addEventListener("DOMContentLoaded", fetchExternalIds);

场景二:点击按钮时才请求imdb_id

如果你的场景是剧集ID会动态切换(比如列表切换剧集),可以用这种方式,点击时再针对当前剧集发起请求:

const tmdbApiKey = "你的TMDB API密钥";
const imdbBtn = document.getElementById("imdbBtn");

// 绑定点击事件
imdbBtn.addEventListener("click", async (e) => {
  // 替换成当前选中的剧集ID(比如从剧集详情接口动态获取)
  const currentSeriesId = "当前剧集ID";
  
  try {
    // 发起external_ids请求
    const response = await fetch(
      `https://api.themoviedb.org/3/tv/${currentSeriesId}/external_ids?api_key=${tmdbApiKey}`
    );
    const data = await response.json();
    
    if (data.imdb_id) {
      // 拼接IMDB链接并打开新窗口
      window.open(`https://www.imdb.com/title/${data.imdb_id}`, "_blank");
    } else {
      alert("该剧集暂无IMDB信息");
    }
  } catch (error) {
    console.error("请求失败:", error);
    alert("获取IMDB链接失败,请稍后重试");
  }
});

关键注意点

  • API密钥安全:如果是前端项目,直接暴露TMDB API密钥会有被盗用的风险,建议通过自己的后端代理来请求TMDB接口,前端只和后端交互。
  • 错误处理:一定要处理API请求失败的情况,比如网络问题、剧集ID无效等,给用户明确的反馈。
  • 异步处理:因为API请求是异步的,必须用async/await或者Promise来处理,避免出现未获取到imdb_id就跳转的情况。

内容的提问来源于stack exchange,提问作者Petar

火山引擎 最新活动