【问题标题】:How to set advanced settings while uploading videos to Youtube using google-youtube api php如何在使用 google-youtube api php 将视频上传到 Youtube 时设置高级设置
【发布时间】:2013-10-08 04:56:51
【问题描述】:

我在下面创建了将视频上传到 youtube 的 php 脚本,并且上传正常。

我希望能够为上传的视频设置高级设置,如下所示:

  • 允许 cmets 应该是“批准”而不是“全部”
  • 我还需要能够设置视频位置(这将来自 我网站上的数据库)
  • 我应该还需要能够设置录制日期(到日期 上传)
  • 我也不希望公开视频统计信息

我环顾四周,但我无法从 google 找到任何关于此的文档,而且我认为 google 没有为 API 提供完整的文档。

任何链接也可以。谢谢

require_once '../google_api/Google_Client.php';
require_once '../google_api/contrib/Google_YouTubeService.php';
$OAUTH2_CLIENT_ID = '514750847005.apps.googleusercontent.com';
$OAUTH2_CLIENT_SECRET = '9mvQL0NPv1zEOty0tZw71O4t';

$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 = 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']);
        }
        if ($client->getAccessToken()) {
            try {
                $snippet = new Google_VideoSnippet();
                $snippet->setTitle($title);
                $snippet->setDescription($desc);
                $snippet->setTags($tags);
                $snippet->setCategoryId(22);

                $status = new Google_VideoStatus();
                $status->privacyStatus = "public";

                $today = date("Y-m-d\TH:i:s");
                $recordingDetails = new Google_VideoRecordingDetails();
                $recordingDetails->setRecordingDate($today);

                $video = new Google_Video();
                $video->setSnippet($snippet);
                $video->setStatus($status);
                $video->setRecordingDetails($recordingDetails);

                // Size of each chunk of data in bytes. Setting it higher leads faster upload (less chunks,
                // for reliable connections). Setting it lower leads better recovery (fine-grained chunks)
                $chunkSizeBytes = 1 * 1024 * 1024;

                // Create a MediaFileUpload with resumable uploads
                $media = new Google_MediaFileUpload('video/*', null, true, $chunkSizeBytes);
                $media->setFileSize(filesize($vd_file));

                // Create a video insert request
                $insertResponse = $youtube->videos->insert("status,snippet", $video, array('mediaUpload' => $media));

                $uploadStatus = false;

                // Read file and upload chunk by chunk
                $handle = fopen($vd_file, "rb");
                while (!$uploadStatus && !feof($handle)) {
                    $chunk = fread($handle, $chunkSizeBytes);
                    $uploadStatus = $media->nextChunk($insertResponse, $chunk);
                }

                fclose($handle);
                msg_add('suces', 'message', 'Youtube video upload was successful');
            } catch (Google_ServiceException $e) {
                $message = sprintf('<p>A service error occurred: <code>%s</code></p>', htmlspecialchars($e->getMessage()));
                msg_add('err', 'message', $message);
            } catch (Google_Exception $e) {
                $message = sprintf('<p>An client error occurred: <code>%s</code></p>', htmlspecialchars($e->getMessage()));
                msg_add('err', 'message', $message);
            }

【问题讨论】:

    标签: php video youtube youtube-api


    【解决方案1】:

    您所做的只是一个视频->插入通话。您正在编辑 sn-p、status 和 recordingDetails。您可以通过将其他字段添加到 VIDEOS 资源来做更多事情。

    在插入之前填写VIDEOS资源的任何字段,应该这样做。

    【讨论】:

    • 感谢@ibrahim-ulukaya 的回答。但是当我浏览该列表时,我找不到更改大多数设置的选项。例如,我无法更改视频统计信息的可见性,也无法将 cmets 从默认的“全部”更改为“已批准”。如果您还查看代码,您会注意到我添加了一个 Google_VideoRecordingDetails 对象。这是尝试设置录制日期和位置(使用经度和纬度),但上传后它们不显示。我的看法是 youtube 只在视频资源中发送这些字段,但在插入时不会读取它们。
    【解决方案2】:

    我遇到了类似的情况,我试图在插入时设置位置,但它不起作用。我的代码通过在part 参数中包含“recordingDetails”来正确设置位置,该参数是一个逗号分隔列表 (docs)。我正在使用 C#,所以对我来说它看起来像这样:

    var videosInsertRequest = youtubeService.Videos.Insert(video, "snippet,status,recordingDetails", fileStream, "video/*");
    

    从您的示例来看,在 php 中应该是这样的

    $insertResponse = $youtube->videos->insert("status,snippet,recordingDetails", $video, array('mediaUpload' => $media));
    

    【讨论】:

      【解决方案3】:

      允许 cmets 应该是“批准”而不是“全部”

      这似乎是一个 youtube 错误:

      https://code.google.com/p/gdata-issues/issues/detail?id=7664

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-23
        • 2013-03-27
        • 2011-05-13
        • 1970-01-01
        • 2011-10-09
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        相关资源
        最近更新 更多