drvntaomy06331839 2016-11-09 19:05
浏览 31

将视频上传到特定的播放列表

I am uploading video to my channel with youtube data api. This works perfectly but when i upload video it uploads in my channel. I want it to upload in given playlist.(I have some already created playlists). Is there any way i can give playlistId in following code. I dont want to use playlistitem.insert.
thanks in Advance

    $OAUTH2_CLIENT_ID = 'ds';
    $OAUTH2_CLIENT_SECRET = 'sd';

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('https://www.googleapis.com/auth/youtube');
// Define an object that will be used to make all API requests.
$youtube = new Google_Service_YouTube($client);

$tokenExisted = $this->Token->find('first');

 if(!empty($tokenExisted)){

$token = $tokenExisted['Token']['token'];
$refreshToken = $tokenExisted['Token']['ref_token'];
$client->refreshToken($refreshToken);
$token = $client->getAccessToken();

}





if (isset($token)) {

  $client->setAccessToken($token);

}

if ($client->isAccessTokenExpired()){    

$refreshToken = $tokenExisted['Token']['ref_token'];
$client->refreshToken($refreshToken);
$token = $client->getAccessToken();

}else{

 $token = $client->getAccessToken();
}
$token=json_encode($token);

// Check to ensure that the access token was successfully acquired.
 if ($token) {
 try{
// REPLACE this value with the path to the file you are uploading.
$videoPath = $dest . '/' . $img_name . '.' . $image['1'];


// Create a snippet with title, description, tags and category ID
// Create an asset resource and set its snippet metadata and type.
// This example sets the video's title, description, keyword tags, and
// video category.
$snippet = new Google_Service_YouTube_VideoSnippet();
$snippet->setTitle($input['title']);
$snippet->setDescription($input['description']);
//$snippet->playlistId($playlistId);

// Numeric video category. See
// https://developers.google.com/youtube/v3/docs/videoCategories/list 
$snippet->setCategoryId($input['category']);

// Set the video's status to "public". Valid statuses are "public",
// "private" and "unlisted".
$status = new Google_Service_YouTube_VideoStatus();
$status->privacyStatus = "public";

// Associate the snippet and status objects with a new video resource.
$video = new Google_Service_YouTube_Video();
$video->setSnippet($snippet);
$video->setStatus($status);

// Specify the size of each chunk of data, in bytes. Set a higher value for
// reliable connection as fewer chunks lead to faster uploads. Set a lower
// value for better recovery on less reliable connections.
$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(false);

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

// If you want to make other calls after the file upload, set setDefer back to false
//$client->setDefer(false);



} catch (Google_Service_Exception $e) {
$htmlBody = sprintf('<p>A service error occurred: <code>%s</code></p>',
    htmlspecialchars($e->getMessage()));
} catch (Google_Exception $e) {
$htmlBody = sprintf('<p>An client error occurred: <code>%s</code></p>',
    htmlspecialchars($e->getMessage()));
}


  } else {
 // If the user hasn't authorized the app, initiate the OAuth flow

 $state = mt_rand();
 $client->setState($state);
 $_SESSION['state'] = $state;

 $authUrl = $client->createAuthUrl();

 }
  • 写回答

1条回答 默认 最新

  • dongwu9647 2016-11-10 14:55
    关注

    According to this SO answer, you cannot upload video directly into a playlist. It's normal that when uploading video, it will redirect to your channel. Once it's uploaded in the channel, you can now put it in the playlist.

    If the video is already uploaded, you can follow this Adding a video to a playlist documentation. You can add a video to a playlist by using a VideoEntry object.

    Here's a sample code retrieves a VideoEntry object with a known entry ID and then adds it to the playlist corresponding to the PlaylistListEntry object. Since the request does not specify a position where the video will appear in the playlist, the new video is added to the end of the playlist.

    $postUrl = $playlistToAddTo->getPlaylistVideoFeedUrl();
    // video entry to be added
    $videoEntryToAdd = $yt->getVideoEntry('4XpnKHJAok8');
    
    // create a new Zend_Gdata_PlaylistListEntry, passing in the underling DOMElement of the VideoEntry
    $newPlaylistListEntry = $yt->newPlaylistListEntry($videoEntryToAdd->getDOM());
    
    // post
    try {
      $yt->insertEntry($newPlaylistListEntry, $postUrl);
    } catch (Zend_App_Exception $e) {
      echo $e->getMessage();
    }
    

    Here's a related SO post which might help:

    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码