ตัวอย่างโค้ดต่อไปนี้ซึ่งใช้ไลบรารีของไคลเอ็นต์ Google APIs สำหรับ PHP มีให้ใช้งานสำหรับ YouTube Content ID API
หมายเหตุ: ตัวอย่างเหล่านี้จะนำเข้าบริการ YouTubePartner ดูเอกสารเกี่ยวกับไลบรารีของไคลเอ็นต์เพื่อดาวน์โหลดการเชื่อมโยง API ของ Content ID ของ YouTube ที่สร้างขึ้นซึ่งจำเป็นต่อการเรียกใช้ตัวอย่างเหล่านี้
อัปโหลดและสร้างรายได้จากวิดีโอ (การให้สิทธิ์บัญชีบริการ)
หมายเหตุ: ตัวอย่างนี้ใช้การให้สิทธิ์บัญชีบริการ
ตัวอย่างโค้ดนี้จะอัปโหลดวิดีโอ YouTube และใช้นโยบายการสร้างรายได้กับวิดีโอดังกล่าว หากต้องการสร้างรายได้จากวิดีโอ คุณต้องอ้างสิทธิ์วิดีโอด้วยเนื้อหาในระบบการจัดการสิทธิ์ของ YouTube ตัวอย่างนี้อัปโหลดวิดีโอ สร้างเนื้อหาใหม่ อ้างสิทธิ์วิดีโอโดยใช้เนื้อหา และนำนโยบายการสร้างรายได้ไปใช้กับวิดีโอ
โค้ดจะดำเนินการขั้นตอนเหล่านี้
โดยจะดึงรหัสเจ้าของเนื้อหาที่เชื่อมโยงกับผู้ใช้ที่ให้สิทธิ์คำขอด้วยการเรียกใช้เมธอด
youtubePartner.contentOwners.listAPI โดยตั้งค่าพารามิเตอร์fetchMineเป็นtrueโดยจะเรียกใช้เมธอด
videos.insertของ Data API เพื่อเพิ่มวิดีโอลงในช่องที่เจ้าของเนื้อหาจัดการ การเรียก API นี้ตั้งค่าพารามิเตอร์การมอบสิทธิ์onBehalfOfContentOwnerเป็นรหัสเจ้าของเนื้อหาที่ดึงข้อมูลมาจากขั้นตอนก่อนหน้า นอกจากนี้ยังเป็นการตั้งค่าพารามิเตอร์การมอบสิทธิ์onBehalfOfContentOwnerChannelเพื่อระบุช่องทางที่เหมาะสม
สำหรับการอัปโหลด โปรแกรมจะใช้คลาสGoogle_MediaFileUploadที่ตั้งค่าพารามิเตอร์resumable uploadเป็นtrueเพื่ออัปโหลดวิดีโอทีละรายการ หากการอัปโหลดถูกขัดจังหวะ การพยายามอัปโหลดซ้ำหลังจากนั้นจะสามารถดำเนินการต่อจากจุดที่ใกล้กับจุดที่การลองซ้ำก่อนหน้านี้ล้มเหลว ซึ่งเป็นคุณลักษณะที่มีประโยชน์สำหรับโปรแกรมที่ต้องการอัปโหลดวิดีโอขนาดใหญ่เมื่ออัปโหลดเนื้อหาวิดีโอแล้ว โค้ดจะต้องสร้างออบเจ็กต์เนื้อหาเพื่อระบุว่าเนื้อหานั้นเป็นเนื้อหาที่คุณเป็นเจ้าของ เนื้อหาคือทรัพย์สินทางปัญญาในระบบการจัดการสิทธิ์ของ YouTube และเจ้าของเนื้อหาสามารถใช้เนื้อหาดังกล่าวเพื่อกำหนดนโยบายเพื่อติดตาม สร้างรายได้ หรือบล็อกวิดีโอที่ตรงกับเนื้อหาของเนื้อหา
โค้ดจะใช้เมธอดyoutubePartner.assets.insertAPI เพื่อสร้างเนื้อหาสำหรับวิดีโอที่อัปโหลด จากนั้นจึงสร้างการเป็นเจ้าของโดยเรียกใช้เมธอดyoutubePartner.ownership.updateตัวอย่างโค้ดจะสร้างนโยบายการสร้างรายได้ที่จะใช้เมื่ออ้างสิทธิ์วิดีโอ
โค้ดนี้เรียกใช้
youtubePartner.claims.insertเพื่ออ้างสิทธิ์วิดีโอที่อัปโหลดว่าเป็นการจับคู่เนื้อหาที่สร้างใหม่ การอ้างสิทธิ์จะมีผลกับวิดีโอที่นโยบายการสร้างรายได้สร้างขึ้นในขั้นตอนก่อนหน้าสุดท้าย ตัวอย่างโค้ดเรียกเมธอด
youtubePartner.videoAdvertisingOptions.updateเพื่อเปิดใช้โฆษณา TrueView ในสตรีมเพื่อแสดงระหว่างเล่นวิดีโอ
เมธอด API ของ Content ID ทั้งหมดของ YouTube จะใช้พารามิเตอร์การมอบสิทธิ์ onBehalfOfContentOwner โดยตั้งค่าให้เป็นรหัสของเจ้าของเนื้อหา ยกเว้นเมธอด youtubePartner.contentOwners.list
<?php /** * This sample uploads, claims and monetizes a video by : * * 1. Finding the content owner ID via "youtubePartner.contentOwners.listContentOwners" method * 2. Uploading the video via "youtube.videos.insert" with utilizing "Google_MediaFileUpload" * 3. Creating an asset via "youtubePartner.assets.insert" method * 4. Creating ownership on the asset via "youtubePartner.ownership.update" method * 5. Claiming the video with the asset and a policy via "youtubePartner.claims.insert" * 6. Enabling the TrueView advertising on the video via "youtubePartner.videoAdvertisingOptions.update" * * @author Ibrahim Ulukaya */ // Call set_include_path() as needed to point to your client library. require_once 'Google/Client.php'; require_once 'Google/Service/YouTube.php'; require_once 'Google/Service/YouTubePartner.php'; session_start(); /* * You can acquire an OAuth 2.0 service account name and private key file from the * Google API Console <https://console.cloud.google.com/> * For more information about using OAuth 2.0 Service Accounts to access Google APIs, please see: * <https://developers.google.com/accounts/docs/OAuth2ServiceAccount> * Please ensure that you have enabled the YouTube Data API for your project. */ $OAUTH2_SERVICE_ACCOUNT_NAME = 'REPLACE ME'; // Make sure you keep your key.p12 file in a secure location, and isn't // readable by others. $OAUTH2_KEY_FILE = '/super/secret/path/to/key.p12'; $client = new Google_Client(); // Define an object that will be used to make all API requests. $youtube = new Google_Service_YouTube($client); // YouTube Partner object used to make Content ID API requests. $youtubePartner = new Google_Service_YouTubePartner($client); if (isset($_SESSION['service_token'])) { $client->setAccessToken($_SESSION['service_token']); } /* Load the key in PKCS 12 format. You need to download this from the * Google API Console when the service account was created. * Please read https://developers.google.com/youtube/partner/guides/oauth2_for_service_accounts * for info on configuration. */ $key = file_get_contents($OAUTH2_KEY_FILE); $cred = new Google_Auth_AssertionCredentials( $OAUTH2_SERVICE_ACCOUNT_NAME, array('https://www.googleapis.com/auth/youtubepartner'), $key); $client->setAssertionCredentials($cred); if($client->getAuth()->isAccessTokenExpired()) { $client->getAuth()->refreshTokenWithAssertion($cred); } $_SESSION['service_token'] = $client->getAccessToken(); try{ // Call the contentOwners.list method to retrieve the ID of the content // owner associated with the currently authenticated user's account. $contentOwnersListResponse = $youtubePartner->contentOwners->listContentOwners( array('fetchMine' => true)); $contentOwnerId = $contentOwnersListResponse['items'][0]['id']; // REPLACE this value with the path to the file you are uploading. $videoPath = "/path/to/file.mp4"; // REPLACE this value with the ID that uniquely identifies the channel that // you are uploading to. $channelId = "CHANNEL_ID"; // 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("Test title"); $snippet->setDescription("Test description"); $snippet->setTags(array("tag1", "tag2")); // 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, array('onBehalfOfContentOwner' => $contentOwnerId, 'onBehalfOfContentOwnerChannel' => $channelId)); // 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); // Set defer back to false to be able to make other calls after the file upload. $client->setDefer(false); $videoId = $status['id']; // Create an asset resource and set its metadata and type. Assets support // many metadata fields, but this sample only sets a title and description. $asset = new Google_Service_YouTubePartner_Asset(); $metadata = new Google_Service_YouTubePartner_Metadata(); $metadata->setTitle("Test asset title"); $metadata->setDescription("Test asset description"); $asset->setMetadata($metadata); $asset->setType("web"); // Insert the asset resource. Extract its unique asset ID from the API // response. $assetInsertResponse = $youtubePartner->assets->insert($asset, array('onBehalfOfContentOwner' => $contentOwnerId)); $assetId = $assetInsertResponse['id']; // Create a territory owner with owner, ratio, type and territories // Set the asset's ownership data. This example identifies the content // owner associated with the authenticated user's account as the asset's // owner. It indicates that the content owner owns 100% of the asset // worldwide. $owners = new Google_Service_YouTubePartner_TerritoryOwners(); $owners->setOwner($contentOwnerId); $owners->setRatio(100); $owners->setType("exclude"); $owners->setTerritories(array()); // Create ownership with a territory owner $ownership = new Google_Service_YouTubePartner_RightsOwnership(); $ownership->setGeneral(array($owners)); // Update the asset's ownership with the rights data defined above. $ownershipUpdateResponse = $youtubePartner->ownership->update($assetId, $ownership, array('onBehalfOfContentOwner' => $contentOwnerId)); // Define a monetization policy for the asset. $policy = new Google_Service_YouTubePartner_Policy(); $policyRule = new Google_Service_YouTubePartner_PolicyRule(); $policyRule->setAction("monetize"); $policy->setRules(array($policyRule)); // Create a claim resource. Identify the video being claimed, the asset // that represents the claimed content, the type of content being claimed, // and the policy that you want to apply to the claimed video. $claim = new Google_Service_YouTubePartner_Claim(); $claim->setAssetId($assetId); $claim->setVideoId($videoId); $claim->setPolicy($policy); $claim->setContentType("audiovisual"); // Insert the created claim. $claimInsertResponse = $youtubePartner->claims->insert($claim, array('onBehalfOfContentOwner' => $contentOwnerId)); # Enable ads for the video. This example enables the TrueView ad format. $option = new Google_Service_YouTubePartner_VideoAdvertisingOption(); $option->setAdFormats(array("trueview_instream")); $setAdvertisingResponse = $youtubePartner->videoAdvertisingOptions->update( $videoId, $option, array('onBehalfOfContentOwner' => $contentOwnerId)); $htmlBody .= "<h3>Video Uploaded</h3><ul>"; $htmlBody .= sprintf('<li>%s (%s) for content owner %s</li>', $status['snippet']['title'], $videoId, $contentOwnerId); $htmlBody .= "<h3>Asset created</h3><ul>"; $htmlBody .= sprintf('<li>%s</li>', $assetId); $htmlBody .= "<h3>Claim uploaded</h3><ul>"; $htmlBody .= sprintf('<li>%s with policy "%s"</li>', $claimInsertResponse['id'], $claimInsertResponse['policy']['rules'][0]['action']); $htmlBody .= "<h3>Advertising Option Added</h3><ul>"; $htmlBody .= sprintf('<li>%s</li>', $setAdvertisingResponse['adFormats'][0]); $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())); } ?> <!doctype html> <html> <head> <title>Claim Uploaded</title> </head> <body> <?=$htmlBody?> </body> </html>
อัปโหลดและสร้างรายได้จากวิดีโอ
ตัวอย่างโค้ดนี้จะอัปโหลดวิดีโอ YouTube และใช้นโยบายการสร้างรายได้กับวิดีโอดังกล่าว หากต้องการสร้างรายได้จากวิดีโอ คุณต้องอ้างสิทธิ์วิดีโอด้วยเนื้อหาในระบบการจัดการสิทธิ์ของ YouTube ตัวอย่างนี้อัปโหลดวิดีโอ สร้างเนื้อหาใหม่ อ้างสิทธิ์วิดีโอโดยใช้เนื้อหา และนำนโยบายการสร้างรายได้ไปใช้กับวิดีโอ
โค้ดจะดำเนินการขั้นตอนเหล่านี้
โดยจะดึงรหัสเจ้าของเนื้อหาที่เชื่อมโยงกับผู้ใช้ที่ให้สิทธิ์คำขอด้วยการเรียกใช้เมธอด
youtubePartner.contentOwners.listAPI โดยตั้งค่าพารามิเตอร์fetchMineเป็นtrueโดยจะเรียกใช้เมธอด
videos.insertของ Data API เพื่อเพิ่มวิดีโอลงในช่องที่เจ้าของเนื้อหาจัดการ การเรียก API นี้ตั้งค่าพารามิเตอร์การมอบสิทธิ์onBehalfOfContentOwnerเป็นรหัสเจ้าของเนื้อหาที่ดึงข้อมูลมาจากขั้นตอนก่อนหน้า นอกจากนี้ยังเป็นการตั้งค่าพารามิเตอร์การมอบสิทธิ์onBehalfOfContentOwnerChannelเพื่อระบุช่องทางที่เหมาะสม
สำหรับการอัปโหลด โปรแกรมจะใช้คลาสGoogle_MediaFileUploadที่ตั้งค่าพารามิเตอร์resumable uploadเป็นtrueเพื่ออัปโหลดวิดีโอทีละรายการ หากการอัปโหลดถูกขัดจังหวะ การพยายามอัปโหลดซ้ำหลังจากนั้นจะสามารถดำเนินการต่อจากจุดที่ใกล้กับจุดที่การลองซ้ำก่อนหน้านี้ล้มเหลว ซึ่งเป็นคุณลักษณะที่มีประโยชน์สำหรับโปรแกรมที่ต้องการอัปโหลดวิดีโอขนาดใหญ่เมื่ออัปโหลดเนื้อหาวิดีโอแล้ว โค้ดจะต้องสร้างออบเจ็กต์เนื้อหาเพื่อระบุว่าเนื้อหานั้นเป็นเนื้อหาที่คุณเป็นเจ้าของ เนื้อหาคือทรัพย์สินทางปัญญาในระบบการจัดการสิทธิ์ของ YouTube และเจ้าของเนื้อหาสามารถใช้เนื้อหาดังกล่าวเพื่อกำหนดนโยบายเพื่อติดตาม สร้างรายได้ หรือบล็อกวิดีโอที่ตรงกับเนื้อหาของเนื้อหา
โค้ดจะใช้เมธอดyoutubePartner.assets.insertAPI เพื่อสร้างเนื้อหาสำหรับวิดีโอที่อัปโหลด จากนั้นจึงสร้างการเป็นเจ้าของโดยเรียกใช้เมธอดyoutubePartner.ownership.updateตัวอย่างโค้ดจะสร้างนโยบายการสร้างรายได้ที่จะใช้เมื่ออ้างสิทธิ์วิดีโอ
โค้ดนี้เรียกใช้
youtubePartner.claims.insertเพื่ออ้างสิทธิ์วิดีโอที่อัปโหลดว่าเป็นการจับคู่เนื้อหาที่สร้างใหม่ การอ้างสิทธิ์จะมีผลกับวิดีโอที่นโยบายการสร้างรายได้สร้างขึ้นในขั้นตอนก่อนหน้าสุดท้าย ตัวอย่างโค้ดเรียกเมธอด
youtubePartner.videoAdvertisingOptions.updateเพื่อเปิดใช้โฆษณา TrueView ในสตรีมเพื่อแสดงระหว่างเล่นวิดีโอ
เมธอด API ของ Content ID ทั้งหมดของ YouTube จะใช้พารามิเตอร์การมอบสิทธิ์ onBehalfOfContentOwner โดยตั้งค่าให้เป็นรหัสของเจ้าของเนื้อหา ยกเว้นเมธอด youtubePartner.contentOwners.list
<?php /** * This sample uploads, claims and monetizes a video by : * * 1. Finding the content owner ID via "youtubePartner.contentOwners.listContentOwners" method * 2. Uploading the video via "youtube.videos.insert" with utilizing "Google_MediaFileUpload" * 3. Creating an asset via "youtubePartner.assets.insert" method * 4. Creating ownership on the asset via "youtubePartner.ownership.update" method * 5. Claiming the video with the asset and a policy via "youtubePartner.claims.insert" * 6. Enabling the TrueView advertising on the video via "youtubePartner.videoAdvertisingOptions.update" * * @author Ibrahim Ulukaya */ // Call set_include_path() as needed to point to your client library. require_once 'Google/Client.php'; require_once 'Google/Service/YouTube.php'; require_once 'Google/Service/YouTubePartner.php'; session_start(); /* * You can acquire an OAuth 2.0 client ID and client secret from the * Google API Console <https://console.cloud.google.com/> * For more information about using OAuth 2.0 to access Google APIs, please see: * <https://developers.google.com/youtube/v3/guides/authentication> * Please ensure that you have enabled the YouTube Data API for your project. */ $OAUTH2_CLIENT_ID = 'REPLACE ME'; $OAUTH2_CLIENT_SECRET = 'REPLACE ME'; $client = new Google_Client(); $client->setClientId($OAUTH2_CLIENT_ID); $client->setClientSecret($OAUTH2_CLIENT_SECRET); $client->setScopes('https://www.googleapis.com/auth/youtubepartner'); $redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'], FILTER_SANITIZE_URL); $client->setRedirectUri($redirect); // Define an object that will be used to make all API requests. $youtube = new Google_Service_YouTube($client); // YouTube Partner object used to make Content ID API requests. $youtubePartner = new Google_Service_YouTubePartner($client); if (isset($_GET['code'])) { if (strval($_SESSION['state']) !== strval($_GET['state'])) { die('The session state did not match.'); } $client->authenticate($_GET['code']); $_SESSION['token'] = $client->getAccessToken(); header('Location: ' . $redirect); } if (isset($_SESSION['token'])) { $client->setAccessToken($_SESSION['token']); } // Check to ensure that the access token was successfully acquired. if ($client->getAccessToken()) { try{ // Call the contentOwners.list method to retrieve the ID of the content // owner associated with the currently authenticated user's account. $contentOwnersListResponse = $youtubePartner->contentOwners->listContentOwners( array('fetchMine' => true)); $contentOwnerId = $contentOwnersListResponse['items'][0]['id']; // REPLACE this value with the path to the file you are uploading. $videoPath = "/path/to/file.mp4"; // REPLACE this value with the ID that uniquely identifies the channel that // you are uploading to. $channelId = "CHANNEL_ID"; // 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("Test title"); $snippet->setDescription("Test description"); $snippet->setTags(array("tag1", "tag2")); // 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, array('onBehalfOfContentOwner' => $contentOwnerId, 'onBehalfOfContentOwnerChannel' => $channelId)); // 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); // Set defer back to false to be able to make other calls after the file upload. $client->setDefer(false); $videoId = $status['id']; // Create an asset resource and set its metadata and type. Assets support // many metadata fields, but this sample only sets a title and description. $asset = new Google_Service_YouTubePartner_Asset(); $metadata = new Google_Service_YouTubePartner_Metadata(); $metadata->setTitle("Test asset title"); $metadata->setDescription("Test asset description"); $asset->setMetadata($metadata); $asset->setType("web"); // Insert the asset resource. Extract its unique asset ID from the API // response. $assetInsertResponse = $youtubePartner->assets->insert($asset, array('onBehalfOfContentOwner' => $contentOwnerId)); $assetId = $assetInsertResponse['id']; // Create a territory owner with owner, ratio, type and territories // Set the asset's ownership data. This example identifies the content // owner associated with the authenticated user's account as the asset's // owner. It indicates that the content owner owns 100% of the asset // worldwide. $owners = new Google_Service_YouTubePartner_TerritoryOwners(); $owners->setOwner($contentOwnerId); $owners->setRatio(100); $owners->setType("exclude"); $owners->setTerritories(array()); // Create ownership with a territory owner $ownership = new Google_Service_YouTubePartner_RightsOwnership(); $ownership->setGeneral(array($owners)); // Update the asset's ownership with the rights data defined above. $ownershipUpdateResponse = $youtubePartner->ownership->update($assetId, $ownership, array('onBehalfOfContentOwner' => $contentOwnerId)); // Define a monetization policy for the asset. $policy = new Google_Service_YouTubePartner_Policy(); $policyRule = new Google_Service_YouTubePartner_PolicyRule(); $policyRule->setAction("monetize"); $policy->setRules(array($policyRule)); // Create a claim resource. Identify the video being claimed, the asset // that represents the claimed content, the type of content being claimed, // and the policy that you want to apply to the claimed video. $claim = new Google_Service_YouTubePartner_Claim(); $claim->setAssetId($assetId); $claim->setVideoId($videoId); $claim->setPolicy($policy); $claim->setContentType("audiovisual"); // Insert the created claim. $claimInsertResponse = $youtubePartner->claims->insert($claim, array('onBehalfOfContentOwner' => $contentOwnerId)); # Enable ads for the video. This example enables the TrueView ad format. $option = new Google_Service_YouTubePartner_VideoAdvertisingOption(); $option->setAdFormats(array("trueview_instream")); $setAdvertisingResponse = $youtubePartner->videoAdvertisingOptions->update( $videoId, $option, array('onBehalfOfContentOwner' => $contentOwnerId)); $htmlBody .= "<h3>Video Uploaded</h3><ul>"; $htmlBody .= sprintf('<li>%s (%s) for content owner %s</li>', $status['snippet']['title'], $videoId, $contentOwnerId); $htmlBody .= "<h3>Asset created</h3><ul>"; $htmlBody .= sprintf('<li>%s</li>', $assetId); $htmlBody .= "<h3>Claim uploaded</h3><ul>"; $htmlBody .= sprintf('<li>%s with policy "%s"</li>', $claimInsertResponse['id'], $claimInsertResponse['policy']['rules'][0]['action']); $htmlBody .= "<h3>Advertising Option Added</h3><ul>"; $htmlBody .= sprintf('<li>%s</li>', $setAdvertisingResponse['adFormats'][0]); $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['token'] = $client->getAccessToken(); } 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; } ?> <!doctype html> <html> <head> <title>Claim Uploaded</title> </head> <body> <?=$htmlBody?> </body> </html>
สร้าง จัดการ และใช้ป้ายกำกับเนื้อหา
ตัวอย่างโค้ดต่อไปนี้สร้างชุดการเรียก API ที่สาธิตวิธีสร้างและใช้ป้ายกำกับเนื้อหาเพื่อจัดหมวดหมู่และค้นหารายการในคลังชิ้นงาน
<?php /** * This sample creates, manages and uses asset labels by: * * 1. Finding the content owner ID with "youtubePartner.contentOwners.list" method * 2. Creating an asset label with "youtubePartner.assetLabels.insert" method * 3. Retrieving existing asset labels with "youtubePartner.assetLabels.list" method * 4. Creating an asset with "youtubePartner.assets.insert" method * 5. Setting labels of an existing asset with "youtubePartner.assets.update" method * 4. Searching assets based on their labels with "youtubePartner.assetSearch.list" method * * @author Ibrahim Ulukaya */ // Call set_include_path() as needed to point to your local copy of the client library. require_once 'Google/Client.php'; require_once 'Google/Service/YouTube.php'; require_once 'Google/Service/YouTubePartner.php'; session_start(); /* * You can acquire an OAuth 2.0 service account name and private key file from the * Google API Console <https://console.cloud.google.com/> * For more information about using OAuth 2.0 Service Accounts to access Google APIs, please see: * <https://developers.google.com/accounts/docs/OAuth2ServiceAccount> * Please ensure that you have enabled the YouTube Data API and the YouTube Content ID API for * your project. */ $OAUTH2_SERVICE_ACCOUNT_NAME = 'REPLACE ME'; // Make sure that you keep your key.p12 file in a secure location and that the file isn't // readable by others. $OAUTH2_KEY_FILE = '/super/secret/path/to/key.p12'; $client = new Google_Client(); // Define an object that will be used to make Data API requests. $youtube = new Google_Service_YouTube($client); // YouTube Partner object used to make Content ID API requests. $youtubePartner = new Google_Service_YouTubePartner($client); if (isset($_SESSION['service_token'])) { $client->setAccessToken($_SESSION['service_token']); } /* Load the key in PKCS 12 format. You need to download the key from the * Google API Console when the service account is created. * Please read https://developers.google.com/youtube/partner/guides/oauth2_for_service_accounts * for info on configuration. */ $key = file_get_contents($OAUTH2_KEY_FILE); $cred = new Google_Auth_AssertionCredentials( $OAUTH2_SERVICE_ACCOUNT_NAME, array('https://www.googleapis.com/auth/youtubepartner'), $key); $client->setAssertionCredentials($cred); if($client->getAuth()->isAccessTokenExpired()) { $client->getAuth()->refreshTokenWithAssertion($cred); } $_SESSION['service_token'] = $client->getAccessToken(); try { // Call the contentOwners.list method to retrieve the ID of the content // owner associated with the currently authenticated user's account. $contentOwnersListResponse = $youtubePartner->contentOwners->listContentOwners( array('fetchMine' => true)); $contentOwnerId = $contentOwnersListResponse['items'][0]['id']; // Create an asset label and set its name. $assetLabel = new Google_Service_YouTubePartner_AssetLabel(); $assetLabel->setLabelName("label1"); try { // Insert the asset label resource. Extract its unique name from the API response. $assetLabelsInsertResponse = $youtubePartner->assetLabels->insert($assetLabel, array('onBehalfOfContentOwner' => $contentOwnerId)); $assetLabelName = $assetLabelsInsertResponse['labelName']; } catch (Google_Service_Exception $e) { // This error indicates that there is already an asset label with the same name. if ($e->getCode() == 409) { $assetLabelName = "label1"; } else { throw $e; } } // Retrieve asset labels that have been defined by the content owner. $assetLabelsListResponseBefore = $youtubePartner->assetLabels->listAssetLabels( array('onBehalfOfContentOwner' => $contentOwnerId)); // Create an asset resource and set its metadata and type. Assets support // many metadata fields, but this sample only sets a title. $asset = new Google_Service_YouTubePartner_Asset(); $metadata = new Google_Service_YouTubePartner_Metadata(); $metadata->setTitle("asset1"); $asset->setMetadata($metadata); $asset->setType("web"); // Call the assets.insert() method to create the asset resource. Extract its unique asset ID from the API // response. $assetInsertResponse1 = $youtubePartner->assets->insert($asset, array('onBehalfOfContentOwner' => $contentOwnerId)); $assetId1 = $assetInsertResponse1['id']; // Modify the list of asset labels associated with the asset resource, then call // the assets.update() method to update the resource. $assetInsertResponse1['label'] = array($assetLabelName,"label2"); $assetUpdateResponse1 = $youtubePartner->assets->update($assetId1, $assetInsertResponse1, array('onBehalfOfContentOwner' => $contentOwnerId)); // Call the assets.insert() method to create another asset. // This code reuses the $asset and $metadata variables created earlier, // but updates the title in the metadata before creating the asset. // The code then extracts the unique asset ID from the API response. $metadata->setTitle("asset2"); $assetInsertResponse2 = $youtubePartner->assets->insert($asset, array('onBehalfOfContentOwner' => $contentOwnerId)); $assetId2 = $assetInsertResponse2['id']; // Modify the list of asset labels associated with the asset resource, then call // the assets.update() method to update the resource. $assetInsertResponse2['label'] = array("label2"); $assetUpdateResponse2 = $youtubePartner->assets->update($assetId2, $assetInsertResponse2, array('onBehalfOfContentOwner' => $contentOwnerId)); // Retrieve asset labels that have been defined by the content owner. This list of labels // can be compared to the list retrieved earlier to see the effect of the API call. $assetLabelsListResponseAfter = $youtubePartner->assetLabels->listAssetLabels( array('onBehalfOfContentOwner' => $contentOwnerId)); /* * AssetSearch may not be able to return the expected results right away, as there is a delay * in indexing the assets with labels for the asset search after they are added. * If you run this code sample a second time, you should see the assets created in * the previous run. */ // Search for assets having both 'label1' and 'label2' labels. // The results should include "asset1" after indexing is succesfully finished. $assetSearchResponse1 = $youtubePartner->assetSearch->listAssetSearch( array('labels' => "label1, label2", 'onBehalfOfContentOwner' => $contentOwnerId)); // Search for assets having at least one of 'label1' and 'label2' labels. // The results should include "asset1" and "asset2" after indexing is succesfully finished. $assetSearchResponse2 = $youtubePartner->assetSearch->listAssetSearch( array('labels' => "label1, label2", 'includeAnyProvidedlabel' => true, 'onBehalfOfContentOwner' => $contentOwnerId)); $htmlBody .= "<h3>Content owner</h3><ul>"; $htmlBody .= sprintf('<li>Content owner %s</li>', $contentOwnerId); $htmlBody .= '</ul>'; $htmlBody .= "<h3>Asset label created</h3><ul>"; $htmlBody .= sprintf('<li>%s</li>', $assetLabelName); $htmlBody .= '</ul>'; $htmlBody .= "<h3>Asset Labels Before</h3><ul>"; foreach ($assetLabelsListResponseBefore['items'] as $labelItem) { $htmlBody .= sprintf('<li>%s</li>', $labelItem['labelName']); } $htmlBody .= '</ul>'; $htmlBody .= "<h3>Asset created</h3><ul>"; $htmlBody .= sprintf('<li>%s</li>', $assetId1); $htmlBody .= '</ul>'; $htmlBody .= "<h3>Added asset labels</h3><ul>"; $htmlBody .= sprintf('<li>%s %s to %s</li>', $assetInsertResponse1['label'][0], $assetInsertResponse1['label'][1], $assetId1); $htmlBody .= '</ul>'; $htmlBody .= "<h3>Asset created</h3><ul>"; $htmlBody .= sprintf('<li>%s</li>', $assetId2); $htmlBody .= '</ul>'; $htmlBody .= "<h3>Added asset labels</h3><ul>"; $htmlBody .= sprintf('<li>%s to %s</li>', $assetInsertResponse2['label'][0], $assetId2); $htmlBody .= '</ul>'; $htmlBody .= "<h3>Asset Labels After</h3><ul>"; foreach ($assetLabelsListResponseAfter['items'] as $labelItem) { $htmlBody .= sprintf('<li>%s</li>', $labelItem['labelName']); } $htmlBody .= '</ul>'; $htmlBody .= "<h3>Asset labeled with label1 and label2 </h3><ul>"; foreach ($assetSearchResponse1['items'] as $assetItem) { $htmlBody .= sprintf('<li>%s</li>', $assetItem['id']); } $htmlBody .= '</ul>'; $htmlBody .= "<h3>Asset labeled with label1 and/or label2 </h3><ul>"; foreach ($assetSearchResponse2['items'] as $assetItem) { $htmlBody .= sprintf('<li>%s</li>', $assetItem['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())); } ?> <!doctype html> <html> <head> <title>Assets Labels Example</title> </head> <body> <?=$htmlBody?> </body> </html>
อัปโหลดข้อมูลอ้างอิง (การให้สิทธิ์บัญชีบริการ)
หมายเหตุ: ตัวอย่างนี้ใช้การให้สิทธิ์บัญชีบริการ
ตัวอย่างโค้ดนี้แสดงวิธีอัปโหลดข้อมูลอ้างอิงโดยใช้ API สำหรับ Content ID ของ YouTube ข้อมูลอ้างอิงแสดงถึงเนื้อหาจริงของเนื้อหา YouTube จะเปรียบเทียบวิดีโอที่อัปโหลดใหม่กับไลบรารีข้อมูลอ้างอิงเพื่อวัตถุประสงค์ในการสร้างการอ้างสิทธิ์โดยอัตโนมัติให้เจ้าของเนื้อหา ในการอัปโหลดข้อมูลอ้างอิง เราต้องสร้างเนื้อหาที่ระบุข้อมูลการเป็นเจ้าของและ AssetMatchPolicy ก่อน
โดยโค้ดด้านล่างได้ดำเนินการตามขั้นตอนต่อไปนี้
- โดยจะดึงรหัสเจ้าของเนื้อหาที่เชื่อมโยงกับผู้ใช้ที่ให้สิทธิ์คำขอด้วยการเรียกใช้เมธอด
youtubePartner.contentOwners.listAPI โดยตั้งค่าพารามิเตอร์fetchMineเป็นtrue - โดยจะเรียกใช้เมธอด
youtubePartner.assets.insertเพื่อสร้างชิ้นงาน - และจะตั้งค่าข้อมูลการเป็นเจ้าของเนื้อหาโดยเรียกใช้เมธอด
youtubePartner.ownership.update - เรียก
youtubePartner.assetMatchPolicy.updateเพื่อกำหนดนโยบายการจับคู่ของเนื้อหาสำหรับเนื้อหา - โดยเรียกใช้เมธอด
youtubePartner.references.insertเพื่ออัปโหลดข้อมูลอ้างอิงของเนื้อหา สำหรับการอัปโหลด โปรแกรมจะใช้คลาสGoogle_MediaFileUploadโดยตั้งค่าพารามิเตอร์resumable uploadเป็นtrueเพื่ออัปโหลดวิดีโอทีละรายการ หากการอัปโหลดถูกขัดจังหวะ การพยายามอัปโหลดซ้ำหลังจากนั้นจะสามารถดำเนินการต่อจากจุดที่ใกล้กับจุดที่การลองซ้ำก่อนหน้านี้ล้มเหลว ซึ่งเป็นคุณลักษณะที่มีประโยชน์สำหรับโปรแกรมที่ต้องการอัปโหลดวิดีโอขนาดใหญ่
เมธอด API ของ Content ID ทั้งหมดของ YouTube จะใช้พารามิเตอร์การมอบสิทธิ์ onBehalfOfContentOwner โดยตั้งค่าให้เป็นรหัสของเจ้าของเนื้อหา ยกเว้นเมธอด youtubePartner.contentOwners.list
<?php /** * This sample creates an asset, asset ownership, match policy and uploads a reference video by: * * 1. Finding the content owner ID with "youtubePartner.contentOwners.list" method * 2. Creating an asset with "youtubePartner.assets.insert" method * 3. Configure ownership on the asset with "youtubePartner.ownership.update" method * 4. Configure the asset's match policy with "youtubePartner.assetMatchPolicy.update" method * 5. Creating a refererence with "youtubePartner.reference.insert" method * 6. Uploading a reference video with "youtube.videos.insert" utilizing "Google_MediaFileUpload" * * @author Ibrahim Ulukaya */ // Call set_include_path() as needed to point to your client library. require_once 'Google/Client.php'; require_once 'Google/Service/YouTube.php'; require_once 'Google/Service/YouTubePartner.php'; session_start(); /* * You can acquire an OAuth 2.0 service account name and private key file from the * Google API Console <https://console.cloud.google.com/> * For more information about using OAuth 2.0 Service Accounts to access Google APIs, please see: * <https://developers.google.com/accounts/docs/OAuth2ServiceAccount> * Please ensure that you have enabled the YouTube Data API for your project. */ $OAUTH2_SERVICE_ACCOUNT_NAME = 'REPLACE ME'; // Make sure you keep your key.p12 file in a secure location, and isn't // readable by others. $OAUTH2_KEY_FILE = '/super/secret/path/to/key.p12'; $client = new Google_Client(); // Define an object that will be used to make all API requests. $youtube = new Google_Service_YouTube($client); // YouTube Partner object used to make Content ID API requests. $youtubePartner = new Google_Service_YouTubePartner($client); if (isset($_SESSION['service_token'])) { $client->setAccessToken($_SESSION['service_token']); } /* Load the key in PKCS 12 format. You need to download this from the * Google API Console when the service account was created. * Please read https://developers.google.com/youtube/partner/guides/oauth2_for_service_accounts * for info on configuration. */ $key = file_get_contents($OAUTH2_KEY_FILE); $cred = new Google_Auth_AssertionCredentials( $OAUTH2_SERVICE_ACCOUNT_NAME, array('https://www.googleapis.com/auth/youtubepartner'), $key); $client->setAssertionCredentials($cred); if($client->getAuth()->isAccessTokenExpired()) { $client->getAuth()->refreshTokenWithAssertion($cred); } $_SESSION['service_token'] = $client->getAccessToken(); try{ // REPLACE this value with the path to the file you are uploading // as a reference. $referenceVideoPath = "/path/to/file.mp4"; // Call the contentOwners.list method to retrieve the ID of the content // owner associated with the currently authenticated user's account. $contentOwnersListResponse = $youtubePartner->contentOwners->listContentOwners( array('fetchMine' => true)); $contentOwnerId = $contentOwnersListResponse['items'][0]['id']; // Create an asset resource and set its metadata and type. Assets support // many metadata fields, but this sample only sets a title and description. $asset = new Google_Service_YouTubePartner_Asset(); $metadata = new Google_Service_YouTubePartner_Metadata(); $metadata->setTitle("Test asset title"); $metadata->setDescription("Test asset description"); $asset->setMetadata($metadata); $asset->setType("web"); // Insert the asset resource. Extract its unique asset ID from the API // response. $assetInsertResponse = $youtubePartner->assets->insert($asset, array('onBehalfOfContentOwner' => $contentOwnerId)); $assetId = $assetInsertResponse['id']; // Set the asset's ownership data. This example identifies the content // owner associated with the authenticated user's account as the asset's // owner. It indicates that the content owner owns 100% of the asset in // Great Britain and Poland. $owners = new Google_Service_YouTubePartner_TerritoryOwners(); $owners->setOwner($contentOwnerId); $owners->setRatio(100); $owners->setType("include"); $owners->setTerritories(array("PL","GB")); // Define the rights that the owner owns for the asset. $ownership = new Google_Service_YouTubePartner_RightsOwnership(); $ownership->setGeneral(array($owners)); // Update the asset's ownership with the rights data defined above. $ownershipUpdateResponse = $youtubePartner->ownership->update($assetId, $ownership, array('onBehalfOfContentOwner' => $contentOwnerId)); $requiredTerritories = new Google_Service_YouTubePartner_TerritoryCondition(); $requiredTerritories->setTerritories(array()); $requiredTerritories->setType("exclude"); // Create a "track" policy for the asset. The policy specifies the // conditions when the policy will be applied by defining a duration, // territories where the policy applies, and the type of content that an // uploaded video must match. $everywherePolicyCondition = new Google_Service_YouTubePartner_Conditions(); $everywherePolicyCondition->setContentMatchType(array("video")); $everywherePolicyCondition->setRequiredTerritories($requiredTerritories); $everywherePolicyCondition->setReferenceDuration(array("low" => 10)); // Create a policy rule and associate the conditions with the rule. $trackEverywhereRule = new Google_Service_YouTubePartner_PolicyRule(); $trackEverywhereRule->setAction("track"); $trackEverywhereRule->setConditions($everywherePolicyCondition); // Associate the policy rule with an assetMatchPolicy resource. $assetMatchPolicy = new Google_Service_YouTubePartner_AssetMatchPolicy(); $assetMatchPolicy->setRules(array($trackEverywhereRule)); // Update the asset's match policy $youtubePartner->assetMatchPolicy->update($assetId, $assetMatchPolicy, array('onBehalfOfContentOwner' => $contentOwnerId)); // 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 reference resource. Set the asset ID associated with the // reference, and identify the type of reference content being uploaded. $reference = new Google_Service_YouTubePartner_Reference(); $reference->setAssetId($assetId); $reference->setContentType("video"); // Create a request for the API's references.insert method to insert the reference resource // while uploading the reference video. $insertRequest = $youtubePartner->references->insert($reference, array('onBehalfOfContentOwner' => $contentOwnerId)); // Create a MediaFileUpload object for resumable uploads. $media = new Google_Http_MediaFileUpload( $client, $insertRequest, 'video/*', null, true, $chunkSizeBytes ); $media->setFileSize(filesize($referenceVideoPath)); // Read the media file and upload it chunk by chunk. $status = false; $handle = fopen($referenceVideoPath, "rb"); while (!$status && !feof($handle)) { $chunk = fread($handle, $chunkSizeBytes); $status = $media->nextChunk($chunk); } fclose($handle); // Set defer back to false to be able to make other calls after the file upload. $client->setDefer(false); $htmlBody .= "<h3>Content owner</h3><ul>"; $htmlBody .= sprintf('<li>Content owner %s</li>', $contentOwnerId); $htmlBody .= '</ul>'; $htmlBody .= "<h3>Asset created</h3><ul>"; $htmlBody .= sprintf('<li>%s</li>', $assetId); $htmlBody .= '</ul>'; $htmlBody .= "<h3>Asset ownership has been created</h3>"; $htmlBody .= "<h3>Asset match policy has been created</h3>"; $htmlBody .= "<h3>Reference has been created</h3><ul>"; $htmlBody .= sprintf('<li>%s</li>', $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())); } ?> <!doctype html> <html> <head> <title>Reference Uploaded</title> </head> <body> <?=$htmlBody?> </body> </html>
อัปโหลดข้อมูลอ้างอิง
ตัวอย่างโค้ดนี้แสดงวิธีอัปโหลดข้อมูลอ้างอิงโดยใช้ API สำหรับ Content ID ของ YouTube ข้อมูลอ้างอิงแสดงถึงเนื้อหาจริงของเนื้อหา YouTube จะเปรียบเทียบวิดีโอที่อัปโหลดใหม่กับไลบรารีข้อมูลอ้างอิงเพื่อวัตถุประสงค์ในการสร้างการอ้างสิทธิ์โดยอัตโนมัติให้เจ้าของเนื้อหา ในการอัปโหลดข้อมูลอ้างอิง เราต้องสร้างเนื้อหาที่ระบุข้อมูลการเป็นเจ้าของและ AssetMatchPolicy ก่อน
โดยโค้ดด้านล่างได้ดำเนินการตามขั้นตอนต่อไปนี้
- โดยจะดึงรหัสเจ้าของเนื้อหาที่เชื่อมโยงกับผู้ใช้ที่ให้สิทธิ์คำขอด้วยการเรียกใช้เมธอด
youtubePartner.contentOwners.listAPI โดยตั้งค่าพารามิเตอร์fetchMineเป็นtrue - โดยจะเรียกใช้เมธอด
youtubePartner.assets.insertเพื่อสร้างชิ้นงาน - และจะตั้งค่าข้อมูลการเป็นเจ้าของเนื้อหาโดยเรียกใช้เมธอด
youtubePartner.ownership.update - เรียก
youtubePartner.assetMatchPolicy.updateเพื่อกำหนดนโยบายการจับคู่ของเนื้อหาสำหรับเนื้อหา - โดยเรียกใช้เมธอด
youtubePartner.references.insertเพื่ออัปโหลดข้อมูลอ้างอิงของเนื้อหา สำหรับการอัปโหลด โปรแกรมจะใช้คลาสGoogle_MediaFileUploadโดยตั้งค่าพารามิเตอร์resumable uploadเป็นtrueเพื่ออัปโหลดวิดีโอทีละรายการ หากการอัปโหลดถูกขัดจังหวะ การพยายามอัปโหลดซ้ำหลังจากนั้นจะสามารถดำเนินการต่อจากจุดที่ใกล้กับจุดที่การลองซ้ำก่อนหน้านี้ล้มเหลว ซึ่งเป็นคุณลักษณะที่มีประโยชน์สำหรับโปรแกรมที่ต้องการอัปโหลดวิดีโอขนาดใหญ่
เมธอด API ของ Content ID ทั้งหมดของ YouTube จะใช้พารามิเตอร์การมอบสิทธิ์ onBehalfOfContentOwner โดยตั้งค่าให้เป็นรหัสของเจ้าของเนื้อหา ยกเว้นเมธอด youtubePartner.contentOwners.list
<?php /** * This sample creates an asset, asset ownership, match policy and uploads a reference video by: * * 1. Finding the content owner ID with "youtubePartner.contentOwners.list" method * 2. Creating an asset with "youtubePartner.assets.insert" method * 3. Configure ownership on the asset with "youtubePartner.ownership.update" method * 4. Configure the asset's match policy with "youtubePartner.assetMatchPolicy.update" method * 5. Creating a refererence with "youtubePartner.reference.insert" method * 6. Uploading a reference video with "youtube.videos.insert" utilizing "Google_MediaFileUpload" * * @author Ibrahim Ulukaya */ // Call set_include_path() as needed to point to your client library. require_once 'Google/Client.php'; require_once 'Google/Service/YouTube.php'; require_once 'Google/Service/YouTubePartner.php'; session_start(); /* * You can acquire an OAuth 2.0 client ID and client secret from the * Google API Console <https://console.cloud.google.com/> * For more information about using OAuth 2.0 to access Google APIs, please see: * <https://developers.google.com/youtube/v3/guides/authentication> * Please ensure that you have enabled the YouTube Data API for your project. */ $OAUTH2_CLIENT_ID = 'REPLACE ME'; $OAUTH2_CLIENT_SECRET = 'REPLACE ME'; $client = new Google_Client(); $client->setClientId($OAUTH2_CLIENT_ID); $client->setClientSecret($OAUTH2_CLIENT_SECRET); $client->setScopes('https://www.googleapis.com/auth/youtubepartner'); $redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'], FILTER_SANITIZE_URL); $client->setRedirectUri($redirect); // Define an object that will be used to make all API requests. $youtube = new Google_Service_YouTube($client); // YouTube Partner object used to make Content ID API requests. $youtubePartner = new Google_Service_YouTubePartner($client); if (isset($_GET['code'])) { if (strval($_SESSION['state']) !== strval($_GET['state'])) { die('The session state did not match.'); } $client->authenticate($_GET['code']); $_SESSION['token'] = $client->getAccessToken(); header('Location: ' . $redirect); } if (isset($_SESSION['token'])) { $client->setAccessToken($_SESSION['token']); } // Check to ensure that the access token was successfully acquired. if ($client->getAccessToken()) { try{ // REPLACE this value with the path to the file you are uploading // as a reference. $referenceVideoPath = "/path/to/file.mp4"; // Call the contentOwners.list method to retrieve the ID of the content // owner associated with the currently authenticated user's account. $contentOwnersListResponse = $youtubePartner->contentOwners->listContentOwners( array('fetchMine' => true)); $contentOwnerId = $contentOwnersListResponse['items'][0]['id']; // Create an asset resource and set its metadata and type. Assets support // many metadata fields, but this sample only sets a title and description. $asset = new Google_Service_YouTubePartner_Asset(); $metadata = new Google_Service_YouTubePartner_Metadata(); $metadata->setTitle("Test asset title"); $metadata->setDescription("Test asset description"); $asset->setMetadata($metadata); $asset->setType("web"); // Insert the asset resource. Extract its unique asset ID from the API // response. $assetInsertResponse = $youtubePartner->assets->insert($asset, array('onBehalfOfContentOwner' => $contentOwnerId)); $assetId = $assetInsertResponse['id']; // Set the asset's ownership data. This example identifies the content // owner associated with the authenticated user's account as the asset's // owner. It indicates that the content owner owns 100% of the asset in // Great Britain and Poland. $owners = new Google_Service_YouTubePartner_TerritoryOwners(); $owners->setOwner($contentOwnerId); $owners->setRatio(100); $owners->setType("include"); $owners->setTerritories(array("PL","GB")); // Define the rights that the owner owns for the asset. $ownership = new Google_Service_YouTubePartner_RightsOwnership(); $ownership->setGeneral(array($owners)); // Update the asset's ownership with the rights data defined above. $ownershipUpdateResponse = $youtubePartner->ownership->update($assetId, $ownership, array('onBehalfOfContentOwner' => $contentOwnerId)); $requiredTerritories = new Google_Service_YouTubePartner_TerritoryCondition(); $requiredTerritories->setTerritories(array()); $requiredTerritories->setType("exclude"); // Create a "track" policy for the asset. The policy specifies the // conditions when the policy will be applied by defining a duration, // territories where the policy applies, and the type of content that an // uploaded video must match. $everywherePolicyCondition = new Google_Service_YouTubePartner_Conditions(); $everywherePolicyCondition->setContentMatchType(array("video")); $everywherePolicyCondition->setRequiredTerritories($requiredTerritories); $everywherePolicyCondition->setReferenceDuration(array("low" => 10)); // Create a policy rule and associate the conditions with the rule. $trackEverywhereRule = new Google_Service_YouTubePartner_PolicyRule(); $trackEverywhereRule->setAction("track"); $trackEverywhereRule->setConditions($everywherePolicyCondition); // Associate the policy rule with an assetMatchPolicy resource. $assetMatchPolicy = new Google_Service_YouTubePartner_AssetMatchPolicy(); $assetMatchPolicy->setRules(array($trackEverywhereRule)); // Update the asset's match policy $youtubePartner->assetMatchPolicy->update($assetId, $assetMatchPolicy, array('onBehalfOfContentOwner' => $contentOwnerId)); // 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 reference resource. Set the asset ID associated with the // reference, and identify the type of reference content being uploaded. $reference = new Google_Service_YouTubePartner_Reference(); $reference->setAssetId($assetId); $reference->setContentType("video"); // Create a request for the API's references.insert method to insert the reference resource // while uploading the reference video. $insertRequest = $youtubePartner->references->insert($reference, array('onBehalfOfContentOwner' => $contentOwnerId)); // Create a MediaFileUpload object for resumable uploads. $media = new Google_Http_MediaFileUpload( $client, $insertRequest, 'video/*', null, true, $chunkSizeBytes ); $media->setFileSize(filesize($referenceVideoPath)); // Read the media file and upload it chunk by chunk. $status = false; $handle = fopen($referenceVideoPath, "rb"); while (!$status && !feof($handle)) { $chunk = fread($handle, $chunkSizeBytes); $status = $media->nextChunk($chunk); } fclose($handle); // Set defer back to false to be able to make other calls after the file upload. $client->setDefer(false); $htmlBody .= "<h3>Content owner</h3><ul>"; $htmlBody .= sprintf('<li>Content owner %s</li>', $contentOwnerId); $htmlBody .= '</ul>'; $htmlBody .= "<h3>Asset created</h3><ul>"; $htmlBody .= sprintf('<li>%s</li>', $assetId); $htmlBody .= '</ul>'; $htmlBody .= "<h3>Asset ownership has been created</h3>"; $htmlBody .= "<h3>Asset match policy has been created</h3>"; $htmlBody .= "<h3>Reference has been created</h3><ul>"; $htmlBody .= sprintf('<li>%s</li>', $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['token'] = $client->getAccessToken(); } 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; } ?> <!doctype html> <html> <head> <title>Reference Uploaded</title> </head> <body> <?=$htmlBody?> </body> </html>
ดึงข้อมูลช่องที่จัดการของเจ้าของเนื้อหา (การให้สิทธิ์บัญชีบริการ)
หมายเหตุ: ตัวอย่างนี้ใช้การให้สิทธิ์บัญชีบริการ
ตัวอย่างโค้ดนี้แสดงวิธีเรียกข้อมูลช่องที่จัดการโดยเจ้าของเนื้อหา
ตัวอย่างโค้ดจะเริ่มโดยการเรียกใช้เมธอด youtubePartner.contentOwners.list API โดยตั้งค่าพารามิเตอร์ mine เป็น true คำขอนี้จะดึงข้อมูลรหัสเจ้าของเนื้อหาของผู้ใช้ที่ได้รับอนุญาต จากนั้นโค้ดจะเรียกใช้เมธอด youtube.channels.list ของ Data API เพื่อดึงข้อมูลช่องที่เจ้าของเนื้อหาจัดการ การเรียกนี้ใช้พารามิเตอร์การมอบสิทธิ์ โดยตั้งค่าพารามิเตอร์ onBehalfOfContentOwner เป็นรหัสเจ้าของเนื้อหาและพารามิเตอร์ managedByMe เป็น true
<?php /** * This sample lists channels that are managed by the authorized account's content ID by: * * 1. Finding the content owner ID with "youtubePartner.contentOwners.listContentOwners" method * 2. Listing channels with "youtube.channels.list" method and delegation parameters * 3. Utilizing pageToken to retrieve next set of results, repeating the process if necessary * * @author Ibrahim Ulukaya */ // Call set_include_path() as needed to point to your client library. require_once 'Google/Client.php'; require_once 'Google/Service/YouTube.php'; require_once 'Google/Service/YouTubePartner.php'; session_start(); /* * You can acquire an OAuth 2.0 service account name and private key file from the * Google API Console <https://console.cloud.google.com/> * For more information about using OAuth 2.0 Service Accounts to access Google APIs, please see: * <https://developers.google.com/accounts/docs/OAuth2ServiceAccount> * Please ensure that you have enabled the YouTube Data API for your project. */ $OAUTH2_SERVICE_ACCOUNT_NAME = 'REPLACE ME'; // Make sure you keep your key.p12 file in a secure location, and isn't // readable by others. $OAUTH2_KEY_FILE = '/super/secret/path/to/key.p12'; $client = new Google_Client(); // Define an object that will be used to make all API requests. $youtube = new Google_Service_YouTube($client); // YouTube Partner object used to make Content ID API requests. $youtubePartner = new Google_Service_YouTubePartner($client); if (isset($_SESSION['service_token'])) { $client->setAccessToken($_SESSION['service_token']); } /* Load the key in PKCS 12 format. You need to download this from the * Google API Console when the service account was created. * Please read https://developers.google.com/youtube/partner/guides/oauth2_for_service_accounts * for info on configuration. */ $key = file_get_contents($OAUTH2_KEY_FILE); $cred = new Google_Auth_AssertionCredentials( $OAUTH2_SERVICE_ACCOUNT_NAME, array('https://www.googleapis.com/auth/youtubepartner'), $key); $client->setAssertionCredentials($cred); if($client->getAuth()->isAccessTokenExpired()) { $client->getAuth()->refreshTokenWithAssertion($cred); } $_SESSION['service_token'] = $client->getAccessToken(); try{ // Call the contentOwners.list method to retrieve the ID of the content // owner associated with the currently authenticated user's account. $contentOwnersListResponse = $youtubePartner->contentOwners->listContentOwners( array('fetchMine' => true)); $contentOwnerId = $contentOwnersListResponse['items'][0]['id']; // Call the YouTube Data API's channels.list method to retrieve a list of // channels that the content owner manages. $listResponse = $youtube->channels->listChannels("snippet", array('onBehalfOfContentOwner' => $contentOwnerId, 'managedByMe' => true, 'maxResults' => 50)); $channels = ''; while (!empty($listResponse['items'])) { foreach ($listResponse['items'] as $listResult) { $channels .= sprintf('<li>%s (%s)</li>', $listResult['snippet']['title'], $listResult['id']); } // If the API response returns a pageToken, use that value to request the // next set of results. $pageToken = $listResponse['pageToken']; if(is_null($pageToken)) break; $listResponse = $youtube->channels->listChannels("snippet", array('onBehalfOfContentOwner' => $contentOwnerId, 'managedByMe' => true, 'maxResults' => 50, 'pageToken' => $pageToken)); } $htmlBody .= <<<END <h3>Channels</h3> <ul>$channels</ul> END; } 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())); } ?> <!doctype html> <html> <head> <title>My Managed Channels</title> </head> <body> <?=$htmlBody?> </body> </html>