A service error occurred: %s
An client error occurred: %s
You need to set \$OAUTH2_CLIENT_ID and
\$OAUTH2_CLIENT_ID before proceeding.
END;
} 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();
$htmlBody = << You need to authorize access before proceeding.
END;
}
/**
* Uploads a caption track in draft status that matches the API request parameters.
* (captions.insert)
*
* @param Google_Service_YouTube $youtube YouTube service object.
* @param Google_Client $client Google client.
* @param $videoId the YouTube video ID of the video for which the API should
* return caption tracks.
* @param $captionLanguage language of the caption track.
* @param $captionName name of the caption track.
* @param $captionFile caption track binary file.
* @param $htmlBody html body.
*/
function uploadCaption(Google_Service_YouTube $youtube, Google_Client $client, $videoId,
$captionFile, $captionName, $captionLanguage, &$htmlBody) {
# Insert a video caption.
# Create a caption snippet with video id, language, name and draft status.
$captionSnippet = new Google_Service_YouTube_CaptionSnippet();
$captionSnippet->setVideoId($videoId);
$captionSnippet->setLanguage($captionLanguage);
$captionSnippet->setName($captionName);
# Create a caption with snippet.
$caption = new Google_Service_YouTube_Caption();
$caption->setSnippet($captionSnippet);
// 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(true);
// Create a request for the API's captions.insert method to create and upload a caption.
$insertRequest = $youtube->captions->insert("snippet", $caption);
// Create a MediaFileUpload object for resumable uploads.
$media = new Google_Http_MediaFileUpload(
$client,
$insertRequest,
'*/*',
null,
true,
$chunkSizeBytes
);
$media->setFileSize(filesize($captionFile));
// Read the caption file and upload it chunk by chunk.
$status = false;
$handle = fopen($captionFile, "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);
$htmlBody .= "Inserted video caption track for
";
$captionSnippet = $status['snippet'];
$htmlBody .= sprintf('
';
}
/**
* Returns a list of caption tracks. (captions.listCaptions)
*
* @param Google_Service_YouTube $youtube YouTube service object.
* @param string $videoId The videoId parameter instructs the API to return the
* caption tracks for the video specified by the video id.
* @param $htmlBody - html body.
*/
function listCaptions(Google_Service_YouTube $youtube, $videoId, &$htmlBody) {
// Call the YouTube Data API's captions.list method to retrieve video caption tracks.
$captions = $youtube->captions->listCaptions("snippet", $videoId);
$htmlBody .= "Video Caption Tracks
";
foreach ($captions as $caption) {
$htmlBody .= sprintf('
';
return $captions;
}
/**
* Updates a caption track's draft status to publish it.
* Updates the track with a new binary file as well if it is present. (captions.update)
*
* @param Google_Service_YouTube $youtube YouTube service object.
* @param Google_Client $client Google client.
* @param string $captionId The id parameter specifies the caption ID for the resource
* that is being updated. In a caption resource, the id property specifies the
* caption track's ID.
* @param $htmlBody - html body.
* @param $captionFile caption track binary file.
*/
function updateCaption(Google_Service_YouTube $youtube, Google_Client $client,
$captionId, &$htmlBody, $captionFile) {
// Modify caption's isDraft property to unpublish a caption track.
$updateCaptionSnippet = new Google_Service_YouTube_CaptionSnippet();
$updateCaptionSnippet->setIsDraft(true);
# Create a caption with snippet.
$updateCaption = new Google_Service_YouTube_Caption();
$updateCaption->setSnippet($updateCaptionSnippet);
$updateCaption->setId($captionId);
if ($captionFile == '')
{
// Call the YouTube Data API's captions.update method to update an existing caption track.
$captionUpdateResponse = $youtube->captions->update("snippet", $updateCaption);
$htmlBody .= "Updated caption track
";
$htmlBody .= sprintf('
';
} else {
// 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(true);
// Create a request for the YouTube Data API's captions.update method to update
// an existing caption track.
$captionUpdateRequest = $youtube->captions->update("snippet", $updateCaption);
// Create a MediaFileUpload object for resumable uploads.
$media = new Google_Http_MediaFileUpload(
$client,
$captionUpdateRequest,
'*/*',
null,
true,
$chunkSizeBytes
);
$media->setFileSize(filesize($captionFile));
// Read the caption file and upload it chunk by chunk.
$status = false;
$handle = fopen($captionFile, "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);
$htmlBody .= "Updated caption track
";
$htmlBody .= sprintf('
';
}
}
/**
* Downloads a caption track for a YouTube video. (captions.download)
*
* @param Google_Service_YouTube $youtube YouTube service object.
* @param string $captionId The id parameter specifies the caption ID for the resource
* that is being downloaded. In a caption resource, the id property specifies the
* caption track's ID.
* @param $htmlBody - html body.
*/
function downloadCaption(Google_Service_YouTube $youtube, $captionId, &$htmlBody) {
// Call the YouTube Data API's captions.download method to download an existing caption.
$captionResouce = $youtube->captions->download($captionId, array(
'tfmt' => "srt",
'alt' => "media"
));
$htmlBody .= "Downloaded caption track
";
$htmlBody .= sprintf('
';
}
/**
* Deletes a caption track for a YouTube video. (captions.delete)
*
* @param Google_Service_YouTube $youtube YouTube service object.
* @param string $captionId The id parameter specifies the caption ID for the resource
* that is being deleted. In a caption resource, the id property specifies the
* caption track's ID.
* @param $htmlBody - html body.
*/
function deleteCaption(Google_Service_YouTube $youtube, $captionId, &$htmlBody) {
// Call the YouTube Data API's captions.delete method to delete a caption.
$youtube->captions->delete($captionId);
$htmlBody .= "Deleted caption track
";
$htmlBody .= sprintf('
';
}
?>