Created
March 11, 2018 03:09
-
-
Save malikkurosaki/9f3aa296b6cec3857278eb8984044400 to your computer and use it in GitHub Desktop.
direct upload from server to youtube channel use youtube api v3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
include_once "auth.php"; | |
if(isset($_GET['u'])){ | |
$vTitle = $_GET['u']; | |
$tTitle = str_replace("/"," ",$vTitle); | |
$t1 = $_GET['t1']; | |
$t2 = $_GET['t2']; | |
$dcs = $_GET['dcs']; | |
if ($client->getAccessToken()) { | |
$htmlBody = ''; | |
try{ | |
// REPLACE this value with the path to the file you are uploading. | |
$videoPath = "source/video.mp4"; | |
// 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($tTitle); | |
$snippet->setDescription($dcs); | |
$snippet->setTags(array($t1,$t2)); | |
// Numeric video category. See | |
// https://developers.google.com/youtube/v3/docs/videoCategories/list | |
$snippet->setCategoryId("22"); | |
// 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(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); | |
// If you want to make other calls after the file upload, set setDefer back to false | |
$client->setDefer(false); | |
$htmlBody .= "<h3>Video uploaded</h3><ul>"; | |
$htmlBody .= sprintf('<li>%s (%s)</li>', | |
$status['snippet']['title'], | |
$status['id']); | |
$htmlBody .= '</ul>'; | |
} 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())); | |
} | |
$_SESSION[$tokenSessionKey] = $client->getAccessToken(); | |
} elseif ($OAUTH2_CLIENT_ID == 'REPLACE_ME') { | |
$htmlBody = <<<END | |
<h3>Client Credentials Required</h3> | |
<p> | |
You need to set <code>\$OAUTH2_CLIENT_ID</code> and | |
<code>\$OAUTH2_CLIENT_ID</code> before proceeding. | |
<p> | |
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 = <<<END | |
<h3>Authorization Required</h3> | |
<p>You need to <a href="$authUrl">authorize access</a> before proceeding.<p> | |
END; | |
} | |
} | |
?> | |
<?=$htmlBody?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment