已获取Google OAuth的Access Token与用户ID,如何调用YouTube API?
嘿,我看你在AdonisJS里调用YouTube Channels API时碰了壁,这就帮你梳理下可能的问题和修复办法:
1. 先搞定URL的格式问题
你代码里用了&(这是HTML实体编码的&符号),Node.js会把它当成URL的一部分,而不是参数分隔符,这会直接导致API识别不了你的请求参数。正确的写法是用普通的&,或者更稳妥的用URLSearchParams来构建参数:
// 方式1:直接用&拼接 const url = `https://www.googleapis.com/youtube/v3/channels?part=contentDetails&mine=true&key=${API_KEY}`; // 方式2:用URLSearchParams避免拼接错误 const params = new URLSearchParams({ part: 'contentDetails', mine: 'true', key: API_KEY }); const url = `https://www.googleapis.com/youtube/v3/channels?${params.toString()}`;
2. 检查Access Token的权限范围
调用mine=true的接口,要求你的Access Token必须带有YouTube相关的授权范围——比如https://www.googleapis.com/auth/youtube.readonly(只读权限)或者更高的https://www.googleapis.com/auth/youtube。如果当初做OAuth授权时没申请这个范围,API会直接返回权限不足的错误。
3. 规范Axios的请求写法
你只贴了URL和AuthStr的代码,大概率是Axios请求没正确配置请求头。完整的请求应该是这样的(记得要在async函数里用await):
const axios = require('axios'); // 假设authGoogle.getAccessToken()能返回有效的令牌 const authToken = authGoogle.getAccessToken(); try { const response = await axios.get('https://www.googleapis.com/youtube/v3/channels', { params: { part: 'contentDetails', mine: 'true', key: API_KEY }, headers: { 'Authorization': `Bearer ${authToken}` } }); console.log('拿到频道数据啦:', response.data); } catch (error) { // 一定要打印完整错误信息,API会告诉你具体哪里错了 console.error('调用失败详情:', error.response?.data || error.message); }
4. 验证Access Token的有效性
你可以先打印authToken的内容,然后通过Google的Token Info接口验证它是否过期、是否包含正确的权限范围——直接用curl或者Postman发请求就行,这样能快速排除令牌本身的问题。
5. 检查API Key的配置
确认你的API Key在Google Cloud Console里已经启用了YouTube Data API v3,同时没有设置IP限制、项目配额耗尽这类访问限制,否则请求会被直接拦截。
最后提醒下:一定要捕获并打印完整的错误响应,YouTube API返回的错误信息(比如错误码、描述)会帮你精准定位问题根源。
内容的提问来源于stack exchange,提问作者nemuroito

