api - 使用YOUTUBE google-api-php-client更新视频

标签 api youtube youtube-api google-api-php-client

我正在尝试使用Youtube API更新视频元数据。我使用的API是google-api-php-client。
该API在上传和删除过程中效果很好,但是当我要更新视频信息时,我不知道必须使用哪些参数。

这是代码:

try
        {

            // Build the Needed Video Information
            $snippet = new Google_VideoSnippet();
            $snippet->setTitle($_POST['videoTitle']);
            $snippet->setDescription($_POST['videoDescription']);
            $snippet->setTags(array($_POST['videoTags']));
            $snippet->setCategoryId(22);

            // Set the Video Info and Status in the Main Tag
            $video = new Google_Video();
            $video->setSnippet($snippet);

            // Send the video to the Google Youtube API
            $created_file = $youtube->videos->update('snippet', $video, array(
                WHAT PARAMETERS!!!???!!
            ));

            // Get the information of the uploaded video
            print_r($createdFile);
        }
        catch (Exception $ex)
        {
            echo $ex;
        }

有人知道吗? ?我想继续使用此API,因为我的所有应用程序都使用它。

在此先谢谢您。

最佳答案

要更新视频,首先您需要使用带有ID = video_id的视频->列表,然后更新所需的部分,将所有子部分包装到视频本身中,放入Google对象中,然后发送更新请求。 (我们将努力简化此过程)

这是一个更新标签示例,最终可以更新视频,您可以使用它。

/**
 * This sample adds new tags to a YouTube video by:
 *
 * 1. Retrieving the video with "youtube.videos.list" method setting the "id" parameter
 * 2. Appending new tags to Video Resource's snippet.tags[] list
 * 3. Updating the video itself via youtube.videos.update API call, supplying a new video via a
 * binary upload to replace the old one.
 *
 * @author Ibrahim Ulukaya
*/

// Call set_include_path() as needed to point to your client library.
require_once 'Google_Client.php';
require_once 'contrib/Google_YouTubeService.php';
session_start();

/* You can acquire an OAuth 2 ID/secret pair from the API Access tab on the Google APIs Console
 <http://code.google.com/apis/console#access>
For more information about using OAuth2 to access Google APIs, please visit:
<https://developers.google.com/accounts/docs/OAuth2>
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);
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
    FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);

// YouTube object used to make all Data API requests.
$youtube = new Google_YoutubeService($client);

if (isset($_GET['code'])) {
  if (strval($_SESSION['state']) !== strval($_GET['state'])) {
    die('The session state did not match.');
  }

  $client->authenticate();
  $_SESSION['token'] = $client->getAccessToken();
  header('Location: ' . $redirect);
}

if (isset($_SESSION['token'])) {
  $client->setAccessToken($_SESSION['token']);
}

// Check if access token successfully acquired
if ($client->getAccessToken()) {
  try{

    // REPLACE with the video ID that you want to update
    $videoId = "VIDEO_ID";

    // Create a video list request
    $listResponse = $youtube->videos->listVideos("snippet",
        array('id' => $videoId));

    $videoList = $listResponse['items'];
    if (empty($videoList)) {
      $htmlBody .= sprintf('<h3>Can\'t find a video with video id: %s</h3>', $videoId);
    } else {
      // Since a unique video id is given, it will only return 1 video.
      $video = $videoList[0];
      $videoSnippet = $video['snippet'];

      $tags = $videoSnippet['tags'];

      // $tags is null if the video didn't have any tags, so we will check for this and
      // create a new list if needed
      if (is_null($tags)) {
        $tags = array("tag1", "tag2");
      } else {
        array_push($tags, "tag1", "tag2");
      }

      // Construct the Google_Video with the updated tags, hence the snippet
      $updateVideo = new Google_Video($video);
      $updateSnippet = new Google_VideoSnippet($videoSnippet);
      $updateSnippet->setTags($tags);
      $updateVideo -> setSnippet($updateSnippet);

      // Create a video update request
      $updateResponse = $youtube->videos->update("snippet", $updateVideo);

      $responseTags = $updateResponse['snippet']['tags'];


    $htmlBody .= "<h3>Video Updated</h3><ul>";
    $htmlBody .= sprintf('<li>Tags "%s" and "%s" added for video %s (%s) </li>',
        array_pop($responseTags), array_pop($responseTags),
        $videoId, $updateResponse['snippet']['title']);

    $htmlBody .= '</ul>';
  }
    } catch (Google_ServiceException $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>Video Updated</title>
    </head>
    <body>
      <?=$htmlBody?>
    </body>
    </html>

关于api - 使用YOUTUBE google-api-php-client更新视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18012683/

相关文章:

api - 什么是 Java EE 认可的 API?

android - 如何在搜索中获取播放列表ID:列表(播放列表类型)

c# - 设置提取的YouTube视频的分辨率

java - 带有分页问题的 Youtube Data API v3 java 搜索

linq - YouTube API观看次数字段LINQ C#

javascript - 卡住整个网站的音乐播放器

java - 是否可以在 java Swing 应用程序中使用 REST 或 web api

iOS 奇迹 API : How to get all Characters

javascript - 如何在 Node js 中使用请求包禁用多个 http(s) 请求?

javascript - 如何使用JS iframe API获取YouTube视频的实际尺寸(无黑边)?