Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 not insert multiple videos to the playlist.

Below is a simple way that I am doing this. The function addTheseVideosToPlaylist() is specifically where I am failing. createPlaylist() and addToPlaylist() are also shown.

There is a global playlistId to keep track of created playlist.

var playlistId

I create a playlist like this:

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

I add a video to the created playlist given a valid video id like below:

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();
}

The two above functions are fairly standard and work fine. However I have problems when adding multiple videos to a playlist like below in addTheseVideosToPlaylist(). I have an array of valid video ids and for each id, I will add it to the created playlist. The problem is that not all of the videos are added to the playlist, only one video is added.

function addTheseVideosToPlaylist() {
    var links = [
        "wtLJPvx7-ys",
        "K3meJyiYWFw",
        "3TtVsy98ces"
    ]
    for(i = 0; i < links.length; i++)
        addToPlaylist(links[i]);
}

All in all, I am successful in creating a playlist and adding a video to the playlist, but when I try to insert multiple videos to a playlist by adding each link in an array, the playlist only contains one video.

How can I resolve this problem?

like image 387
Rohan Avatar asked Jan 09 '23 20:01

Rohan


1 Answers

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);
like image 133
visionix visionix Avatar answered Jan 18 '23 09:01

visionix visionix