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中,可以通过以下代码实现。
要求
取数后调用
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 |
。