YouTube API v3:获取指定用户名

时间:2016-08-13 22:58:56

标签: javascript angularjs youtube youtube-data-api

如何使用YouTube JavaScript API v3以便我可以获取所有频道以及给定用户名的所有播放列表,如JSON等?

我使用了以下参考资料

https://stackoverflow.com/a/18767785/799593似乎不再起作用了。

==> Channels

以下是我的代码,调用频道终点。它基本上使用AngularJS执行HTTP GET操作,其中“id”是ChannelID,由“query”参数传递。

var getUrl = 'https://www.googleapis.com/youtube/v3/channels';
this.get = function (apiKey, query) {
    var parameters = {
        kind: 'youtube#channel',
        part: 'contentDetails',
        id: query,
        maxResults: 3,
        key: apiKey
    }
    return $http({
        url: getUrl,
        method: 'GET',
        params: parameters
    })
};

此查询基本上只能返回给定YouTube频道的上传视频和喜欢视频的ID。相反,我希望获得给定用户的所有频道列表。

我也尝试过:

this.getByUserName = function (apiKey, query) {
var parameters = {
    kind: 'youtube#channel',
    part: 'contentDetails',
    forUsername: query,
    maxResults: 5,
    key: apiKey
}
return $http({
    url: getUrl,
    method: 'GET',
    params: parameters
})

};

但它似乎只返回“主要频道”,换句话说,如果我用forUsername =“Google”查询,我得到UCK8sQmJBp8GCxrOtXWBpyEA ......所以与我在“思想中 - 的解释相矛盾”在下面,正确的层次结构可能实际上只为每个用户帐户链接一个频道,并且此类频道可以有多个播放列表。但实际上这确实看起来很混乱,并且过度思考来自谷歌/ YouTube。

e.g。如果用户通过“Google”,则API会回复我们在https://www.youtube.com/user/Google/channels

上看到的所有频道

==> Playlists

这看起来相对简单,但API似乎仅限于以逗号分隔的YouTube播放列表ID列表,但问题是如何在给定UserID的情况下将它们放在首位?

我有兴趣获得相当于https://www.youtube.com/user/UserID/playlists的结果,但以下是我现在所拥有的。

var getUrl = 'https://www.googleapis.com/youtube/v3/playlists';
this.get = function (apiKey, query) {
    var parameters = {
        kind: 'youtube#playlist',
        part: 'contentDetails',
        id: query,
        maxResults: 10,
        pageToken: '',
        key: apiKey
    }
    return $http({
        url: getUrl,
        method: 'GET',
        params: parameters
    })
};

我将以YouTube的层次结构的“思维导图”和带有链接的Google注释示例结束我的问题。我不确定这是否是正确的表示,但我相信如果我知道正确的层次结构,它可能会给我一个关于如何使用YouTube JavaScript API v3为特定用户获取YouTube频道和播放列表的提示。

http://i.imgur.com/GWoZvCE.png (全尺寸图片位于:http://i.imgur.com/GWoZvCE.png

1 个答案:

答案 0 :(得分:0)

我已经在ReacJS中编写了仅用于播放列表的代码。希望这会给您一些想法。我正在使用Google API。它为我工作。只需用您的替换我的频道ID和api键即可。

import React, { Component } from "react";

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      items: [],
      isLoaded: false
    };
  }

  componentDidMount() {
    fetch(
      "https://www.googleapis.com/youtube/v3/playlists?part=snippet&channelId=<YOUR-CHANNEL-ID>&key=<YOUR-API-KEY>"
    )
      .then(res => res.json())
      .then(json => {
        this.setState({
          isLoaded: true,
          items: json.items
        });
      });
  }

  render() {
    var { isLoaded, items } = this.state;
    var i=0;
    if (!isLoaded) return <div>Loading...</div>;
    return (
      <div>
        <ul>
        {
          items.map(item => (
            <li key={item.id}>
              Playlist: {items[i++].snippet.title}
            </li>
          ))
        }
        </ul>
      </div>
    );
  }
}

export default App;

这是输出sample output