Hassan Shahbaz
Hassan Shahbaz

Reputation: 606

Upload Video to Specific Playlist in youtube

I want upload video to specific Playlist in youtube.I have One playlist in my channel but when i upload video it uploads in channel not in playlist.

I want to get list (Title,ID etc) of my playlist and upload video to one of that playlist which i have already created how to do that.I have read this about google but could not understand how to that.

Here is the script which currently add video to channel.

<?php

$key = file_get_contents('text.txt');

set_include_path(get_include_path() . PATH_SEPARATOR . 'YoutubeAPI');
require_once 'Google/Client.php';
require_once 'Google/Service/YouTube.php';

$application_name = 'My APP NAME';
$client_secret = 'SECRET';
$client_id = 'CLIENT ID';
$scope = array('https://www.googleapis.com/auth/youtube.upload', 'https://www.googleapis.com/auth/youtube', 'https://www.googleapis.com/auth/youtubepartner');

$videoPath = "Video/vdeo.mp4";
$videoTitle = "Tutorial";
$videoDescription = "A must watch video";
$videoCategory = "22";
$videoTags = array("youtube", "tutorial");


try {
    // Client init
    $client = new Google_Client();
    //$client->setApplicationName($application_name);
    $client->setClientId($client_id);
    $client->setAccessType('offline');
    $client->setAccessToken($key);
    $client->setScopes($scope);
    $client->setClientSecret($client_secret);

    if ($client->getAccessToken()) {

        /**
         * Check to see if our access token has expired. If so, get a new one and save it to file for future use.
         */
        if ($client->isAccessTokenExpired()) {
            $newToken = json_decode($client->getAccessToken());
            $client->refreshToken($newToken->refresh_token);
            file_put_contents('text.txt', $client->getAccessToken());
        }

        $youtube = new Google_Service_YouTube($client);



        // Create a snipet with title, description, tags and category id
        $snippet = new Google_Service_YouTube_VideoSnippet();
        $snippet->setTitle($videoTitle);
        $snippet->setDescription($videoDescription);
        $snippet->setCategoryId($videoCategory);
        $snippet->setTags($videoTags);

        // Create a video status with privacy status. Options are "public", "private" and "unlisted".
        $status = new Google_Service_YouTube_VideoStatus();
        $status->setPrivacyStatus('public');

        // Create a YouTube video with snippet and status
        $video = new Google_Service_YouTube_Video();
        $video->setSnippet($snippet);
        $video->setStatus($status);

        // Size of each chunk of data in bytes. Setting it higher leads faster upload (less chunks,
        // for reliable connections). Setting it lower leads better recovery (fine-grained chunks)
        $chunkSizeBytes = 1 * 1024 * 1024;

        // Setting the defer flag to true tells the client to return a request which can be called
        // with ->execute(); instead of making the API call immediately.
        $client->setDefer(true);

        // Create a request for the API's videos.insert method to create and upload the video.
        $insertRequest = $youtube->videos->insert("status,snippet", $video);

        // Create a MediaFileUpload object for resumable uploads.
        $media = new Google_Http_MediaFileUpload(
                $client, $insertRequest, 'video/*', null, true, $chunkSizeBytes
        );
        $media->setFileSize(filesize($videoPath));


        // Read the media file and upload it chunk by chunk.
        $status = false;
        $handle = fopen($videoPath, "rb");
        while (!$status && !feof($handle)) {
            $chunk = fread($handle, $chunkSizeBytes);
            $status = $media->nextChunk($chunk);
        }

        fclose($handle);

        /**
         * Video has successfully been upload, now lets perform some cleanup functions for this video
         */
        if ($status->status['uploadStatus'] == 'uploaded') {
            // Actions to perform for a successful upload
        }
        print_r($status);
        // If you want to make other calls after the file upload, set setDefer back to false
        $client->setDefer(true);
    } else {
        // @TODO Log error
        echo 'Problems creating the client';
    }
} catch (Google_Service_Exception $e) {
    print "Caught Google service Exception " . $e->getCode() . " message is " . $e->getMessage();
    print "Stack trace is " . $e->getTraceAsString();
} catch (Exception $e) {
    print "Caught Google service Exception " . $e->getCode() . " message is " . $e->getMessage();
    print "Stack trace is " . $e->getTraceAsString();
}

Thanks in advance.

Upvotes: 0

Views: 3908

Answers (1)

Android Enthusiast
Android Enthusiast

Reputation: 4950

Yes, it is correct. When uploading video it will redirect to your channel. You cannot upload video directly into a playlist. From channel, you can put video in eplaylist. To do that you have to execute 2(two) steps listed below:

Step 1: Retrieve the appropriate playlist ID

Call the playlist.list method to retrieve the playlists in the currently authenticated user's channel. The sample request above for retrieving the current user's playlists demonstrates this request. The application calling the API could process the API response to display a list of playlists, using each playlist's ID as a key.

Step 2: Add a video to the playlist

Call the playlistItems.insert method to add a video to the playlist. This request must be authorized using OAuth 2.0. The request body is a playlistItem resource that specifies at least the following values:

The snippet.playlistId identifies the playlist to which you are adding the favorite video. This is the playlist ID you obtained in step 1. The snippet.resourceId.kind contains the value youtube#video. The snippet.resourceId.videoId identifies the video that you are adding as a favorite. The property value is a unique YouTube video ID.

To complete the request in the APIs Explorer, you need to set values for the snippet.playlistId and snippet.resourceId.videoId properties. https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.playlistItems.insert?part=snippet

Upvotes: 1

Related Questions