无法将多个视频插入播放列表 - YouTube API v3
Can not insert multiple videos into a playlist - YouTube API v3
我正在尝试将多个视频添加到播放列表,但只有一个视频添加到播放列表。我可以成功创建一个播放列表并插入一个视频到播放列表,但是不能插入多个视频到播放列表。
下面是我执行此操作的一种简单方法。函数 addTheseVideosToPlaylist() 正是我失败的地方。还显示了 createPlaylist() 和 addToPlaylist()。
有一个全局 playlistId 来跟踪创建的播放列表。
var playlistId
我创建了一个这样的播放列表:
function createPlaylist() {
var request = gapi.client.youtube.playlists.insert({
part: 'snippet,status',
resource: {
snippet: {
title: 'hard coded title',
description: 'Hard Coded Description'
},
status: {
privacyStatus: 'private'
}
}
});
request.execute(function(response) {
var result = response.result;
if (result) {
playlistId = result.id;
console.log("created playlist " + playlistId)
}
});
}
我将一个视频添加到创建的播放列表中,给出了如下所示的有效视频 ID:
function addToPlaylist(id, startPos, endPos) {
console.log("In addToPlaylist with " + id +
"sending to playlist : " + playlistId);
var details = {
videoId: id,
kind: 'youtube#video'
}
var request = gapi.client.youtube.playlistItems.insert({
part: 'snippet',
resource: {
snippet: {
playlistId: playlistId,
resourceId: details
}
}
}).execute();
}
以上两个函数比较标准,可以正常使用。但是,在将多个视频添加到播放列表时遇到问题,如下所示,在 addTheseVideosToPlaylist() 中。我有一组有效的视频 ID,对于每个 ID,我会将其添加到创建的播放列表中。问题是不是所有的视频都添加到播放列表,只添加了一个视频。
function addTheseVideosToPlaylist() {
var links = [
"wtLJPvx7-ys",
"K3meJyiYWFw",
"3TtVsy98ces"
]
for(i = 0; i < links.length; i++)
addToPlaylist(links[i]);
}
总而言之,我成功创建了播放列表并将视频添加到播放列表,但是当我尝试通过将每个 link 添加到数组中来将多个视频插入播放列表时,播放列表仅包含一个视频。
我该如何解决这个问题?
一种解决方案是为每次插入播放列表添加延迟。我不完全确定为什么需要延迟。
我也在使用自定义循环 setTimeout();
。
使用延迟的示例实现:
// Global array holds links and a global counter variable
var links = [
"wtLJPvx7-ys",
"K3meJyiYWFw",
"3TtVsy98ces"
]
var counter = 0;
function addVideosToPlaylist() {
myLoop(links[0]);
}
function myLoop() {
addToPlaylist(video_id);
setTimeout(function() {
counter++;
if (counter < links.length)
myLoop(links[counter]);
}, 3000);
}
加上Rohan的回答,最下面的函数调用应该是:
function myLoop(video_id) {
addToPlaylist(video_id);
setTimeout(function() {
counter++;
if(counter < links.length)
myLoop(links[counter]);
}, 3000);
}
它缺少 "video_id" 作为参数。
它对我很有用。
整个工作代码是:
// Global array holds links and a global counter variable
var links = [
"wtLJPvx7-ys",
"K3meJyiYWFw",
"3TtVsy98ces"
]
var counter = 0;
function addVideosToPlaylist() {
myLoop(links[0]);
}
function myLoop(video_id) {
addToPlaylist(video_id);
setTimeout(function() {
counter++;
if(counter < links.length)
myLoop(links[counter]);
}, 3000);
}
我想我现在明白你为什么需要添加延迟了。您需要在发送下一个插入请求之前延迟每个插入请求。
我的解决方案是递归。只有当我收到请求的响应时,我才会发送下一个请求直到数组末尾:
function addVideoToPlayList(pId, videosIdArray, index)
{
var vId = videosIdArray[index];
var details = {
videoId: vId,
kind: 'youtube#video'
}
var request = gapi.client.youtube.playlistItems.insert({
part: 'snippet',
resource: {
snippet: {
playlistId: pId,
resourceId: details
}
}
});
request.execute(function(response) {
console.log(response);
if(videosIdArray.length == index+1)
{
// End!
}
else{
addVideoToPlayList(pId,videosIdArray,++index);
}
$('#status').html(
$('#status').html() + '<pre>' +
JSON.stringify(response.result) + '</pre><br/>');
});
}
如何调用此函数的示例:
addVideoToPlayList(destPlaylistId, videosIdArray, 0);
我正在尝试将多个视频添加到播放列表,但只有一个视频添加到播放列表。我可以成功创建一个播放列表并插入一个视频到播放列表,但是不能插入多个视频到播放列表。
下面是我执行此操作的一种简单方法。函数 addTheseVideosToPlaylist() 正是我失败的地方。还显示了 createPlaylist() 和 addToPlaylist()。
有一个全局 playlistId 来跟踪创建的播放列表。
var playlistId
我创建了一个这样的播放列表:
function createPlaylist() {
var request = gapi.client.youtube.playlists.insert({
part: 'snippet,status',
resource: {
snippet: {
title: 'hard coded title',
description: 'Hard Coded Description'
},
status: {
privacyStatus: 'private'
}
}
});
request.execute(function(response) {
var result = response.result;
if (result) {
playlistId = result.id;
console.log("created playlist " + playlistId)
}
});
}
我将一个视频添加到创建的播放列表中,给出了如下所示的有效视频 ID:
function addToPlaylist(id, startPos, endPos) {
console.log("In addToPlaylist with " + id +
"sending to playlist : " + playlistId);
var details = {
videoId: id,
kind: 'youtube#video'
}
var request = gapi.client.youtube.playlistItems.insert({
part: 'snippet',
resource: {
snippet: {
playlistId: playlistId,
resourceId: details
}
}
}).execute();
}
以上两个函数比较标准,可以正常使用。但是,在将多个视频添加到播放列表时遇到问题,如下所示,在 addTheseVideosToPlaylist() 中。我有一组有效的视频 ID,对于每个 ID,我会将其添加到创建的播放列表中。问题是不是所有的视频都添加到播放列表,只添加了一个视频。
function addTheseVideosToPlaylist() {
var links = [
"wtLJPvx7-ys",
"K3meJyiYWFw",
"3TtVsy98ces"
]
for(i = 0; i < links.length; i++)
addToPlaylist(links[i]);
}
总而言之,我成功创建了播放列表并将视频添加到播放列表,但是当我尝试通过将每个 link 添加到数组中来将多个视频插入播放列表时,播放列表仅包含一个视频。
我该如何解决这个问题?
一种解决方案是为每次插入播放列表添加延迟。我不完全确定为什么需要延迟。
我也在使用自定义循环 setTimeout();
。
使用延迟的示例实现:
// Global array holds links and a global counter variable
var links = [
"wtLJPvx7-ys",
"K3meJyiYWFw",
"3TtVsy98ces"
]
var counter = 0;
function addVideosToPlaylist() {
myLoop(links[0]);
}
function myLoop() {
addToPlaylist(video_id);
setTimeout(function() {
counter++;
if (counter < links.length)
myLoop(links[counter]);
}, 3000);
}
加上Rohan的回答,最下面的函数调用应该是:
function myLoop(video_id) {
addToPlaylist(video_id);
setTimeout(function() {
counter++;
if(counter < links.length)
myLoop(links[counter]);
}, 3000);
}
它缺少 "video_id" 作为参数。
它对我很有用。
整个工作代码是:
// Global array holds links and a global counter variable
var links = [
"wtLJPvx7-ys",
"K3meJyiYWFw",
"3TtVsy98ces"
]
var counter = 0;
function addVideosToPlaylist() {
myLoop(links[0]);
}
function myLoop(video_id) {
addToPlaylist(video_id);
setTimeout(function() {
counter++;
if(counter < links.length)
myLoop(links[counter]);
}, 3000);
}
我想我现在明白你为什么需要添加延迟了。您需要在发送下一个插入请求之前延迟每个插入请求。
我的解决方案是递归。只有当我收到请求的响应时,我才会发送下一个请求直到数组末尾:
function addVideoToPlayList(pId, videosIdArray, index)
{
var vId = videosIdArray[index];
var details = {
videoId: vId,
kind: 'youtube#video'
}
var request = gapi.client.youtube.playlistItems.insert({
part: 'snippet',
resource: {
snippet: {
playlistId: pId,
resourceId: details
}
}
});
request.execute(function(response) {
console.log(response);
if(videosIdArray.length == index+1)
{
// End!
}
else{
addVideoToPlayList(pId,videosIdArray,++index);
}
$('#status').html(
$('#status').html() + '<pre>' +
JSON.stringify(response.result) + '</pre><br/>');
});
}
如何调用此函数的示例:
addVideoToPlayList(destPlaylistId, videosIdArray, 0);