You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@vimeo/vimeo库获取视频详情时提示视频不存在的问题排查

排查Vimeo API返回"The requested video couldn't be found"的问题

针对你在Next.js getStaticProps中调用Vimeo API获取自有库视频详情失败的问题,从以下几个方向排查:

1. 检查Access Token的权限范围

你验证过token能访问/tutorial接口,但该接口仅需基础权限,而访问私有视频需要额外权限范围。确认你的token生成时包含以下至少一个scope:

  • private:允许访问账号下的私有内容
  • video.read:允许读取视频详细信息

可调用https://api.vimeo.com/me接口查看当前token的权限,返回的scope字段会列出所有授权范围。如果缺少必要权限,需重新生成带有对应scope的access token。

2. 确认视频的隐私设置

即使视频在你的库中,若隐私设置为**"仅自己可见"或"密码保护"**,需确保token权限足够访问这类视频。自有账号的token只要具备private权限,即可访问"仅自己可见"的视频,无需额外携带密码参数。

3. 修正API请求路径(针对文件夹/项目中的视频)

如果视频嵌套在Project(文件夹)中,不要直接拼接文件夹名称到视频ID后:

  • 先调用https://api.vimeo.com/me/videos,查看返回列表中是否包含目标视频ID,确认视频在账号可访问范围内。
  • 若要通过Project获取视频,路径应为/projects/{project_id}/videos/{video_id},其中project_id是文件夹的数字ID,不是名称。

4. 修正getStaticProps中的异步处理逻辑

你使用@vimeo/vimeo库的代码中,client.request是回调式的,而getStaticProps是async函数,会导致函数提前返回,无法正确捕获请求结果。建议将回调转为Promise:

import { Vimeo } from '@vimeo/vimeo';
import { promisify } from 'util';

export async function getStaticProps() {
  const client = new Vimeo(`${clientId}`, `${clientSecret}`, `${accessToken}`);
  // 将回调方法转为Promise
  const request = promisify(client.request.bind(client));
  
  try {
    const body = await request({
      method: 'GET',
      path: `/videos/796808098`,
    });
    return {
      props: { videoData: body },
    };
  } catch (error) {
    console.error('Vimeo API请求失败:', error);
    return {
      props: { videoData: null },
    };
  }
}

fetch请求也需要在getStaticProps中正确使用await:

export async function getStaticProps() {
  try {
    const res = await fetch('https://api.vimeo.com/videos/796808098', {
      headers: {
        Authorization: `bearer ${accessToken}`,
        'content-type': 'application/json',
      },
    });
    
    if (!res.ok) {
      throw new Error(`HTTP错误状态: ${res.status}`);
    }
    
    const json = await res.json();
    return {
      props: { videoData: json },
    };
  } catch (error) {
    console.error('请求失败:', error);
    return {
      props: { videoData: null },
    };
  }
}

5. 确认视频ID的正确性

再次核对视频ID是否为纯数字格式,确保没有复制错误或携带额外字符。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:55:31