尝试使用 YouTube 分析 API 检索指标时禁止出现 403

Posted

技术标签:

【中文标题】尝试使用 YouTube 分析 API 检索指标时禁止出现 403【英文标题】:Getting 403 forbidden when trying to retrieve metrics using YouTube Analytics API 【发布时间】:2022-01-06 20:41:51 【问题描述】:

我是 Google Analytics api 的新手,并且正在关注此 tutorial 以获取 estimatedMinutesWatchedaverageViewDuration,但是我总是收到 403 禁止代码作为响应。

我想先问一下,如何解决这个问题,我们只应该从我们自己的频道中检索数据吗?其次,有没有一种方法可以在不指定频道 ID 的情况下检索指标?我可能想从来自不同频道的许多视频中检索指标,我觉得指定一个频道是不必要的。谢谢!

以下是我目前拥有的代码:

const fs = require('fs');
const readline = require('readline');
const  google  = require('googleapis');
const  GoogleSpreadsheet  = require('google-spreadsheet');

const scope = ['https://www.googleapis.com/auth/youtube.readonly'];
const creds = require('./client_secret.json');
const doc = new GoogleSpreadsheet('1YNzey4giSw-29oFGPCfGLBkMHCFB1o2oLr3qLIQZTVQ');

(async () => 
    await doc.useServiceAccountAuth(creds);
    await doc.loadInfo();
    const sheet = doc.sheetsByIndex[0];
    const rows = await sheet.getRows();
    // const ids = rows.map(r => r.id).join(',');
    const ids = 'IKiAiD3SONw';

    fs.readFile("oauth_client_creds.json", (err, content) => 
        if (err) 
            return console.log("Cannot load client secret file:", err);
        

        // Authorize a client with credentials, then make API call.
        const credentials = JSON.parse(content);
        const  client_secret, client_id, redirect_uris  = credentials.installed;
        const oAuth2Client = new google.auth.OAuth2(
            client_id,
            client_secret,
            redirect_uris[0]
        );

        const authUrl = oAuth2Client.generateAuthUrl(
            access_type: "offline",
            scope: scope
        );
        console.log("Visit this URL to authorize this app:", authUrl);

        const rl = readline.createInterface(
            input: process.stdin,
            output: process.stdout
        );
        rl.question("Enter the auth code from that URL: ", code => 
            rl.close();
            oAuth2Client.getToken(code, (err, token) => 
                oAuth2Client.setCredentials(token);
                callApi(oAuth2Client);
            );
        );
    );

    let callApi = auth => 
        const youtubeAnalytics = google.youtubeAnalytics( version: "v2", auth );

        youtubeAnalytics.reports
            .query(
                startDate: "2019-01-01",
                endDate: "2021-12-31",
                ids: "channel==UCbXm_tde_rLHG8gv48wSULw",
                filters: `video==$ids`,
                dimensions: "video",
                metrics: "estimatedMinutesWatched,averageViewDuration"
            )
            .then(async response => 
                console.log(response);
                console.log(response.data.rows);
                response.data.rows.forEach(async (row, index) => 
                    rows[index].minutes_watched = row[1];
                    rows[index].avd = row[2];
                    await rows[index].save();
                );
            )
            .catch(error => console.log("The API returned an error: ", error.message));
    ;
)();

【问题讨论】:

错误代码403 可能表示您没有提供正确的凭据。 【参考方案1】:

由于您总是收到 403 错误,听起来您没有正确传递您的 API 凭据,或者您正在请求其他人的频道信息n。

要回答您的问题,您只能检索自己频道的指标,或者如果其他用户已授权您的应用程序。

您查询的频道似乎格式不正确,或尚未完成设置。我认为 UCbXm_tde_rLHG8gv48wSULw 不应该有下划线。在您的 Youtube 帐户上创建一个测试频道并复制 ID。

解决 403 错误:

    确保您已创建 API 密钥 确保您已将凭据正确保存在 json 文件中 确保文件具有扩展名 .json 确保您请求的是自己的频道 ID

我还会检查以下内容:

授予授权访问权限 (link) Youtube 分析 API (link)

【讨论】:

感谢您的回答。我想知道我是否能够获取单个视频的指标,但不能获取整个频道的指标?

以上是关于尝试使用 YouTube 分析 API 检索指标时禁止出现 403的主要内容,如果未能解决你的问题,请参考以下文章

使用 youtube API 3.0 检索 youtube 视频位置标签

使用 PHP for 和 foreach 循环从 JSON 数据中检索视频信息时遇到问题 - YouTube API 3

YouTube API 直播

当将估计广告收入作为指标包含在内时,YouTube 报告 API 返回 403

Youtube api v3 无法从频道中检索所有视频

YouTube API v3 未检索频道的视频