javascript - setToken 不会在 Google API (gapi) 中切换 YouTube channel

标签 javascript google-api youtube-data-api google-oauth google-api-js-client

我遇到了一个无法解决的问题。我希望允许用户同时连接到多个 YouTube channel 并为他们创建 YouTube 流。主要代码如下:

export const setGapiTokenForTarget = async (token) => {
    await window.gapi.client.setToken(token);
    await window.gapi.auth.setToken(token);
};

export const bindStreamToBroadcast = async (streamId, broadcastId, token) => {
    await setGapiTokenForTarget(token);
    return window.gapi.client.youtube.liveBroadcasts.bind({
        'id': broadcastId,
        'part': 'snippet',
        'streamId': streamId
    });
};

export const createBroadcast = async (token) => {
    await setGapiTokenForTarget(token);
    return window.gapi.client.youtube.liveBroadcasts.insert({
        'part': 'snippet,contentDetails,status',
        'resource': {
            'snippet': {
                'title': 'l1',
                'scheduledStartTime': '2020-02-07T09:20:17.039Z',
                'scheduledEndTime': '2020-02-07T09:40:17.039Z'
            },
            'status': {
                'privacyStatus': 'unlisted'
            }
        }
    });
};

export const createStream = async (token) => {
    await setGapiTokenForTarget(token);
    return window.gapi.client.youtube.liveStreams.insert({
        'part': 'snippet,cdn,contentDetails,status',
        'resource': {
            'snippet': {
                'title': 'LIVE PANEL TEST',
                'description': 'LIVE PANEL TEST'
            },
            'cdn': {
                'frameRate': '60fps',
                'ingestionType': 'rtmp',
                'resolution': '1080p'
            },
            'contentDetails': {
                'isReusable': true
            }
        }
    });
};

export const createStreamAndBroadcastForTarget = async (target) => {
    const broadcast = await createBroadcast(target.token);
    const stream = await createStream(target.token);
    const binded = await bindStreamToBroadcast(stream.result.id, broadcast.result.id, target.token);

    return { stream, broadcast, binded };
};

export const createStreamAndBroadcastForTargets = async (targets, { ...all }) => {
    const youtubeEvents = targets.map(createStreamAndBroadcastForTarget);

    return Promise.all(youtubeEvents);
};

这只是原型(prototype),数据是硬编码的。但是,当我尝试为每个目标( channel )设置 token 时,配置文件不会更改,并且我仅在其中一个 channel 上执行相同的操作(创建生命)。每个 channel 都有自己的token,在登录后从 google 返回,它是直接从 google 获取的对象,而不仅仅是 key (字符串)。我已经检查过了,每个 channel 的每个 token 都是不同的。看起来 window.gapi.client.setTokenwindow.gapi.auth.setToken 不起作用,并且不会切换任何内容。

最佳答案

YouTube API 是基于 channel 的,而不是基于用户的。您必须注销用户并在不同的 channel 下登录他们。

如果您想一次访问更多 channel ,并且我不确定该库是否支持该功能,则脚本中的每个 channel 都必须有一个实时 token 。

关于javascript - setToken 不会在 Google API (gapi) 中切换 YouTube channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60111548/

相关文章:

youtube - YouTube报表API在创建工作时返回400和401错误

javascript - 当组合框值更改时,JQuery 隐藏行(按属性)

android - 我可以查询 Google Play Developer API 的剩余配额吗?

java - 授权谷歌日历API适用于个人帐户,但不适用于谷歌域帐户

youtube-api - 某些网站如何下载 YouTube 字幕?

youtube - 是否可以从YouTube iframe嵌入式播放器中删除 “Title” “Watch later”和 “share”按钮

javascript - getJSON 未获取数据

javascript - 无法让 jQuery 链接的 ajax 选择工作

javascript - 尝试将 contenteditable div 的内容保存到 MySQL 数据库

google-api - 是否可以在没有设备的情况下使用 Google Mirror API 进行游戏?