Youtube api v3获取用户视频列表

Youtube api v3 Get list of user's videos

有了YouTube API v2,就可以轻松获取视频。只需发送这样的查询:

http://gdata.youtube.com/feeds/mobile/videos?最大结果=5&alt=rss&orderby=published&author=onedirectionvevo

YouTube API v2还有一个用于构建查询的交互式演示页面:http://gdata.youtube.com/demo/index.html

有了YouTube API v3,我不知道相应的方法。请给我指出API v3的方法。

谢谢您!


channels list方法将返回一个JSON,其中包含有关频道的一些信息,包括"上载"播放列表的播放列表ID:

1
https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=OneDirectionVEVO&key={YOUR_API_KEY}

使用播放列表ID,您可以使用播放列表项列表方法获取视频:

1
https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=UUbW18JZRgko_mOGm5er8Yzg&key={YOUR_API_KEY}

您可以在文档页面的末尾测试这些内容。


这应该可以做到。此代码只获取并输出标题,但您可以获取任何需要的详细信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Get Uploads Playlist
$.get(
  "https://www.googleapis.com/youtube/v3/channels",{
   part : 'contentDetails',
   forUsername : 'USER_CHANNEL_NAME',
   key: 'YOUR_API_KEY'},
   function(data) {
      $.each( data.items, function( i, item ) {
          pid = item.contentDetails.relatedPlaylists.uploads;
          getVids(pid);
      });
  }
);

//Get Videos
function getVids(pid){
    $.get(
       "https://www.googleapis.com/youtube/v3/playlistItems",{
        part : 'snippet',
        maxResults : 20,
        playlistId : pid,
        key: 'YOUR_API_KEY'},
        function(data) {
            var results;
            $.each( data.items, function( i, item ) {
                results = '
<li>
'+ item.snippet.title +'
</li>
';
                $('#results').append(results);
            });
        }
    );
}


<!--In your HTML -->
<ul id="results">
</ul>


API的v3发生了很大变化。下面是一个视频,它引导您通过v3 api调用来获取在给定通道中上载的视频列表,并使用api资源管理器进行实时演示。

YouTube开发者现场直播:在v3中获取频道上传-https://www.youtube.com/watch?V=Rjulmco7v2m


如果考虑配额成本,那么遵循这个简单的算法可能是有益的。

首先从https://www.youtube.com/feeds/videos.xml获取数据?通道_id=..这是一个简单的XML提要,它将为您提供视频ID,但您不能进一步指定"部件"(统计信息等)。

使用该列表中的视频ID,在/video s API端点上执行查询,该端点允许视频ID的逗号分隔列表,该列表只会导致1个配额成本,任何其他部件参数加上0-2。正如@chrismacp指出的那样,使用/search端点比较简单,但是配额成本为100,这可以快速增加。

这里有一个资源考虑(CPU、内存等),因为您正在进行第二次调用,但我相信在许多情况下,这是一个有用的方法。


以防它对这里的任何人都有帮助,这就是我发现的,到目前为止似乎对我很有效。在提出此请求之前,我正在通过OAuth 2.0对成员进行身份验证,这将为我提供经过身份验证的成员视频。和往常一样,您的个人里程可能会有所不同:d

1
2
3
4
5
6
curl https://www.googleapis.com/youtube/v3/search -G \
-d part=snippet \
-d forMine=true \
-d type=video \
-d order=date \
-d access_token={AUTHENTICATED_ACCESS_TOKEN}


您发布的请求实际上是3.0 API中的搜索,而不是播放列表请求。这样做也比较容易。不过,您确实需要为通道ID删除用户名。

例如,获取https://www.googleapis.com/youtube/v3/playlistitems?part=snippet&playlistid=uughcvgz0zspe5hjhwyilwha&key=您的API密钥


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
function tplawesome(e,t){res=e;for(var n=0;n<t.length;n++){res=res.replace(/\{\{(.*?)\}\}/g,function(e,r){return t[n][r]})}return res}



$(function() {


    $(".form-control").click(function(e) {


       e.preventDefault();


       // prepare the request


       var request = gapi.client.youtube.search.list({


            part:"snippet",


            type:"video",


            q: encodeURIComponent($("#search").val()).replace(/%20/g,"+"),


            maxResults: 20,


            order:"viewCount",


            publishedAfter:"2017-01-01T00:00:00Z"


       });


       // execute the request


       request.execute(function(response) {


          var results = response.result;


          $("#results").html("");


          $.each(results.items, function(index, item) {


            $.get("tpl/item.html", function(data) {


                $("#results").append(tplawesome(data, [{"title":item.snippet.title,"videoid":item.id.videoId ,"descrip":item.snippet.description ,"date":item.snippet.publishedAt ,"channel":item.snippet.channelTitle ,"kind":item.id.kind ,"lan":item.id.etag}]));


            });


           


          });


          resetVideoHeight();


       });


    });


   


    $(window).on("resize", resetVideoHeight);


});



function resetVideoHeight() {


    $(".video").css("height", $("#results").width() * 9/16);


}



function init() {


    gapi.client.setApiKey("YOUR API KEY .... USE YOUR KEY");


    gapi.client.load("youtube","v3", function() {


        // yt api is ready


    });


}

请在此处查看完整的代码https://codingshow.blogspot.com/2018/12/youtube-search-api-website.html


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$.get(
   "https://www.googleapis.com/youtube/v3/channels",{
      part: 'snippet,contentDetails,statistics,brandingSettings',
      id: viewid,
      key: api},
      function(data){

        $.each(data.items, function(i, item){


          channelId = item.id;
          pvideo = item.contentDetails.relatedPlaylists.uploads;
          uploads(pvideo);
});

      });

上载功能可以是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function uploads(pvideo){


       $.get(
       "https://www.googleapis.com/youtube/v3/playlistItems",{
          part: 'snippet',
          maxResults:12,
          playlistId:pvideo,
          key: api},
          function(data){


            $.each(data.items, function(i, item){

                 videoTitle = item.snippet.title;
             videoId = item.id;
            description = item.snippet.description;
            thumb = item.snippet.thumbnails.high.url;
            channelTitle = item.snippet.channelTitle;
            videoDate = item.snippet.publishedAt;
            Catagoryid = item.snippet.categoryId;
            cID = item.snippet.channelId;

            })
          }
        );
     }


在node.js中,可以通过以下代码实现。

要求authKeychannelId作为options对象参数。

取数后调用cb回调。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
async function fetchChannelInfo(options) {
  const channelUrl = `https://www.googleapis.com/youtube/v3/channels?part=contentDetails,statistics&id=${
    options.channelId
  }&key=${options.authKey}`;
  const channelData = await axios.get(channelUrl);

  return channelData.data.items[0];
}
function fetch(options, cb) {
  fetchChannelInfo(options).then((channelData) => {
    options.playlistId = channelData.contentDetails.relatedPlaylists.uploads;
    const paylistUrl = `https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=${
      options.playlistId
    }&key=${options.authKey}`;

    axios
      .get(paylistUrl)
      .then((response) => {
        const payloadData = ;

        const videoList = [];
        response.data.items.forEach((video) => {
          videoList.push({
            publishedAt: video.snippet.publishedAt,
            title: video.snippet.title,
            thumbnails: thumbnails,
            videoId: video.snippet.resourceId.videoId,
          });
        });

        cb(null, videoList);
      })
      .catch((err) => {
        cb(err, null);
      });
  });
}

注意:AXIOS用于RESTful请求。安装

1
npm install axios


下面是一些使用官方google apis节点库的代码(https://github.com/google/google-api-nodejs-client)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const readJson = require("r-json");
const google = require('googleapis');
const Youtube = google.youtube('v3');

// DONT store your credentials in version control
const CREDENTIALS = readJson("/some/directory/credentials.json");

let user ="<youruser>";
let numberItems = 10;

let channelConfig = {
  key: CREDENTIALS.youtube.API_KEY,
  part:"contentDetails",
  forUsername: user
};

Youtube.channels.list(channelConfig, function (error, data) {

  if (error) {
    console.log("Error fetching YouTube user video list", error);
    return;
  }

  // Get the uploads playlist Id
  let uploadsPlaylistId = data.items[0].contentDetails.relatedPlaylists.uploads;

  let playlistConfig = {
    part : 'snippet',
    maxResults : size,
    playlistId : uploadsPlaylistId,
    key: CREDENTIALS.youtube.API_KEY
  };

  // Fetch items from upload playlist
  Youtube.playlistItems.list(playlistConfig, function (error, data) {

    if (error) {
      console.log("Error fetching YouTube user video list", error);
    }

    doSomethingWithYourData(data.items);
  });
});


在php中:我使用pagetoken属性转到播放列表的所有页面。希望它能帮助您。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//step 1: get playlist id

 $response = file_get_contents("https://www.googleapis.com/youtube/v3/channels?key={$api_key}&forUsername={$channelName}&part=contentDetails");
 $searchResponse = json_decode($response,true);
 $data = $searchResponse['items'];
 $pid =  $data[0]['contentDetails']['relatedPlaylists']['uploads'];

//step 2: get all videos in playlist

 $nextPageToken = '';
 while(!is_null($nextPageToken)) {
     $request ="https://www.googleapis.com/youtube/v3/playlistItems?key={$api_key}&playlistId={$pid}&part=snippet&maxResults=50&pageToken=$nextPageToken";

    $response = file_get_contents($request);
    $videos = json_decode($response,true);

    //get info each video here...

   //go next page
    $nextPageToken = $videos['nextPageToken'];
}


请不要使用playlistitems.list,如果您想获得播放列表中超过300个视频的视频。你可以在谷歌链接"https://developers.google.com/youtube/v3/docs/playlistitems/list"的"尝试"部分中进行尝试。它返回未定义。

我也在我的项目中使用过。它只返回未定义的。


另一种方法可能是通过以下方式获取当前OAuth身份验证用户的播放列表:property mine=true

其中,在身份验证之后检索OAuth访问_令牌:https://developers.google.com/youtube/v3/guides/authentication网站

1
https://www.googleapis.com/youtube/v3/playlists?part=id&mine=true&access_token=ya29.0gC7xyzxyzxyz