如何从youtube api获取频道列表?

时间:2016-07-25 07:05:00

标签: javascript youtube-api youtube-data-api youtube-javascript-api

我想从youtube api获取所有频道列表及其统计信息。

我所做的是:

  1. 已注册的控制台应用
  2. 使用的Oauth客户端ID
  3. https://developers.google.com/youtube/v3/docs/channels/list使用此api我收到所有统计信息
  4. 这就是我为获取频道列表所做的工作

    function requestUserUploadsPlaylistId() {
      // See https://developers.google.com/youtube/v3/docs/channels/list
      var request = gapi.client.youtube.channels.list({
        mine: true,
        part: 'statistics'
      });
      request.execute(function(response) {
        playlistId = response.result.items[0].contentDetails.relatedPlaylists.uploads;
        requestVideoPlaylist(playlistId);
      });
    }
    

    但问题是这回归只有一个频道的信息。我的帐户下有20个频道。所以,我需要他们全部在我的桌子上显示它们。

    我还尝试添加 forUsername:'用户名' 参数,但没有成功。

    此外,当我尝试将 managedByMe:true 设置为

    时返回错误
    Global:"required",
    Message:"Required"
    

    无法显示所有频道的列表。你能解释一下吗?

    这就是我想要的

    Channelname ViewsCount
    1               50
    2               51
    

    依旧.....

    忽略我的代码response.result.items[0]我正在检查控制台中的整个响应。和项目一次只包含一个频道。

    编辑: enter image description here

1 个答案:

答案 0 :(得分:1)

更新1:

当您使用managedByMe标志(设置为true)时,您必须为该标志提供所需的参数onBehalfOfContentOwner,该标志是您的内容所有者标识符的字符串必须知道。

要获取正确的内容所有者ID,您需要请求新的访问令牌,并且在登录时选择与您要使用的内容所有者ID相对应的适当用户,并且事情应该正常。

调查this question您似乎需要做的是以CMS用户帐户身份登录,然后您将该用户ID用作内容所有者ID,事后应该根据需要使用

初步回答:

您只访问代码中的items[0],它只显示一个元素,尝试更改代码以使用foreach循环并迭代所有通道,如下所示:

function requestUserUploadsPlaylistId() {
  // See https://developers.google.com/youtube/v3/docs/channels/list
  var request = gapi.client.youtube.channels.list({
    mine: true,
    part: 'statistics'
  });
  request.execute(function(response) {
     response.result.items.forEach(function(anItem) {
        playlistId = anItem.contentDetails.relatedPlaylists.uploads;
        requestVideoPlaylist(playlistId);
     });
  });
}

关于其他错误,您无法同时使用managedByMemine,如果您想要managedByMe用户,则需要清除mine并拥有适当的权限,我建议先使用api explorer来确认一切正常,然后实施反映该代码的代码,它会有更多描述性错误。