Can not insert multiple videos into a playlist - YouTube API v3

前端 未结 3 1886
小鲜肉
小鲜肉 2021-01-13 13:55

I am trying to add multiple videos to a playlist, but only one video is added to the playlist. I can successful create a playlist and insert a video to the playlist, but can

相关标签:
3条回答
  • 2021-01-13 14:30

    I think I now understand why you need to add a delay. You need to delay each insert request before you send the next one.

    My solution is recursion. Only when I get a response from the request am I sending the next request till the end of the array:

    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/>');
        });
    }
    

    Example of how to call this function:

    addVideoToPlayList(destPlaylistId, videosIdArray, 0);
    
    0 讨论(0)
  • 2021-01-13 14:40

    One solution is to add delays for every insert into a playlist. I'm not entirely sure why a delay is needed though.

    I am using a custom loop too with setTimeout();.

    Example implementation using delays:

    // 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);
    }
    
    0 讨论(0)
  • 2021-01-13 14:41

    In addition to Rohan's answer, the function call at the bottom should be:

    function myLoop(video_id) {
        addToPlaylist(video_id);
        setTimeout(function() {
            counter++;
            if(counter < links.length)
                myLoop(links[counter]);
        }, 3000);
    }
    

    It lacked "video_id" as a parameter.

    It worked good for me.

    The whole, working code is:

    // 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);
    }
    
    0 讨论(0)
提交回复
热议问题