使用YouTube Data API添加信息卡片后视频中不显示问题求助
问题分析与解决方案
你的代码存在三个核心问题,导致信息卡片无法生效:
1. 错误的API Part参数
你调用videos.update时仅指定了part: 'snippet',但信息卡片的配置属于contentDetails字段,而非snippet。API会忽略snippet中不存在的字段,因此卡片配置被直接丢弃,只有标题(属于snippet)更新成功。
2. 错误的卡片字段位置与结构
你将cards嵌套在snippet下,不符合YouTube Data API的规范。正确的卡片配置应放在contentDetails中,且字段结构需严格匹配官方定义。
3. 硬编码视频ID
在videos.list查询中你写死了视频ID,应使用传入的videoId参数,避免后续维护问题。
修正后的代码
async function addInfoCardsToVideo(videoId) { try { // 使用传入的videoId查询视频元数据,同时获取snippet和contentDetails const video = await youtube.videos.list({ part: 'snippet,contentDetails', id: videoId, }); // 构建符合API规范的卡片配置 const updatedContentDetails = { ...video.data.items[0].contentDetails, cards: { cards: [ { type: 'video', videoId: 'othervideoid', // 需确保该视频属于同一频道或符合YouTube政策 timing: { startTimeMs: '20000', // 卡片开始显示时间(毫秒) durationMs: '5000' // 卡片持续显示时间(毫秒) }, teaser: { title: 'Info Card Title', timing: { startTimeMs: '10000', // 预告条开始时间 endTimeMs: '30000' // 预告条结束时间 } } } ] } }; // 更新视频,同时指定snippet和contentDetails部分 const update = await youtube.videos.update({ part: 'snippet,contentDetails', resource: { id: videoId, snippet: { ...video.data.items[0].snippet, localized: { ...video.data.items[0].snippet.localized, }, title: 'updated video title' }, contentDetails: updatedContentDetails }, }); console.log(`Successfully updated video: ${videoId}`); } catch (err) { console.error(`Error updating video: ${err}`); } } addInfoCardsToVideo('myexistingvideoid')
额外注意事项
- 卡片权限与政策:链接的视频必须属于同一YouTube频道,或符合YouTube的关联内容政策,否则即使API返回成功,卡片也不会在视频中显示。
- 延迟生效:部分卡片配置可能需要数分钟才能在前端显示,若更新后立即查看未显示,可等待一段时间刷新页面。
- API权限:确保你的API密钥或OAuth令牌拥有
youtube.force-ssl的权限范围,否则无法修改视频的内容详情。
内容的提问来源于stack exchange,提问作者Digital Consultant
相关产品推荐
相关产品推荐

