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

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

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); 

在调用插入方法之后,我必须调用channels.update方法,它在node.js上也没有例子

从频道横幅插入 ,你必须打电话:

  • channelBanners.insert ,并从响应中获取url字段
  • channels.update与以前检索到的URL

您还需要channels.update请求的频道ID。 还要注意, 从频道更新 :

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

所以你可能想调用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); }); } }); } });