如何使用节点js googleapis客户端上传和更新YouTube频道横幅

时间:2017-07-20 11:44:49

标签: javascript node.js youtube-api google-api-nodejs-client

我正在编写一个上传和更新youtube频道横幅的应用。我正在使用node.js和google api客户端。 在官方的api文档中,node.js上没有关于如何发送图像内容的例子,也没有关于回调签名的信息 这是我的代码:

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2();
var youtube = google.youtube({ version: 'v3' });

//Setting the credentials
oauth2Client.setCredentials({
    access_token: 'STORED_IN_DATABASE',
    refresh_token: 'STORED_IN_DATABASE',        
});

//Send the request
youtube.channelBanners.insert({ 
    auth: oauth2Client,
    //image_content
}, callback);

调用insert方法后,我必须调用channels.update方法,它也没有node.js上的例子

1 个答案:

答案 0 :(得分:1)

Channel banners insert开始,您必须致电:

  • channelBanners.insert,并从回复中获取网址字段
  • channels.update包含之前检索到的网址

您还需要channels.update请求的频道ID。另请注意from Channel update

  

如果您要提交更新请求,并且您的请求未指定已具有值的属性的值,则该属性的现有值将被删除。

因此,您可能需要致电channels.list以获取要更新brandingSettings部分的频道对象

使用google-api-nodejs-client进行API调用:

  • channelBanners.insert

    youtube.channelBanners.insert({
        media: {
            mimeType: "image/jpeg",
            body: fs.createReadStream('banner.jpeg')
        }
    }, function(err, uploadResponse, response) {
    
    });
    

可用mimeTypeimage/jpegimage/pngapplication/octet-stream

  • channels.list

    youtube.channels.list({
        part: "brandingSettings",
        mine: true
    }, function(err, channelListRsp, response) {
    
    });
    
  • channels.update

    channelListRsp.items[0].brandingSettings.image.bannerExternalUrl = uploadResponse.url;
    
    youtube.channels.update({
        part: "brandingSettings",
        resource: channelListRsp.items[0]
    }, function(err, channelUpdateResp, response) {
    
    });
    

更新在当前用户的频道列表中找到的第一个频道的横幅的完整示例:

youtube = google.youtube({
    version: 'v3',
    auth: oauth2Client
});

youtube.channelBanners.insert({
    media: {
        mimeType: "image/jpeg",
        body: fs.createReadStream('banner.jpeg')
    }
}, function(err, uploadResponse, response) {

    if (err)
        console.error("channelBanners.insert error : ", err);
    if (response)
        console.log('channelBanners.insert : ' + response.statusCode);

    if (uploadResponse && uploadResponse.url) {

        console.log("setting channel brandingSettings : " + uploadResponse.url);

        youtube.channels.list({
            part: "brandingSettings",
            mine: true
        }, function(err, channelListRsp, response) {

            if (err)
                console.error('channels.list error : ', err);
            if (response)
                console.log('channels.list : ' + response.statusCode);

            if (channelListRsp && channelListRsp.items && channelListRsp.items.length > 0) {

                console.log("updating banner for channel id : " + channelListRsp.items[0].id);

                // set the url
                channelListRsp.items[0].brandingSettings.image.bannerExternalUrl = uploadResponse.url;

                //update channel brandingSettings
                youtube.channels.update({
                    part: "brandingSettings",
                    resource: channelListRsp.items[0]
                }, function(err, channelUpdateResp, response) {

                    if (err)
                        console.error('channels.update error : ', err);
                    if (response)
                        console.log('channels.update : ' + response.statusCode);
                    if (channelUpdateResp)
                        console.log(channelUpdateResp);
                });
            }
        });
    }
});