【问题标题】:Video uploaded through YouTube Data API is becoming private通过 YouTube 数据 API 上传的视频将变为私有视频
【发布时间】:2021-03-22 04:45:16
【问题描述】:

我尝试使用 YouTube 数据 API 将视频上传到 YouTube 频道,作者:

    "require": {
        "google/apiclient": "^2.7",
        "hybridauth/hybridauth": "~3.4.0",
        "guzzlehttp/guzzle": "^7.0"
    }

视频已成功上传,但 YouTube 将上传到其中的每个视频都标记为私有。有人知道如何解决这种情况吗?

    public function upload_video_on_youtube($id, $arr_data)
    {
        $result_data = array();
        $channel_id = $id;
        $uploaded = false;
        $stopper = 0;
        while ($uploaded == false && $stopper == 0) {
            $arr_data['summary'] = $this->getrandomstring(10);
            $arr_data['title'] = $this->getrandomstring(10);
            $client = new Google_Client();
            $arr_token = $this->getAccessToken($channel_id);
            if ($arr_token['error'] == false) {
                $res = array();
                $accessToken = array(
                    'access_token' => $arr_token['access_token']
                );
                $client->setAccessToken($accessToken);
                $service = new Google_Service_YouTube($client);
                $video = new Google_Service_YouTube_Video();
                $videoSnippet = new Google_Service_YouTube_VideoSnippet();
                $videoSnippet->setDescription($arr_data['summary']);
                $videoSnippet->setTitle($arr_data['title']);
                $video->setSnippet($videoSnippet);
                $videoStatus = new Google_Service_YouTube_VideoStatus();
                $videoStatus->setPrivacyStatus('unlisted');
                $video->setStatus($videoStatus);
                try {
                    $response = $service->videos->insert(
                        'snippet,status',
                        $video,
                        array(
                            'data' => file_get_contents($arr_data['video_path']),
                            'mimeType' => 'video/*',
                            'uploadType' => 'multipart'
                        )
                    );
                    if (isset($response->id)) {
                        $video_id = $response->id;
                        $res['error'] = false;
                        $res['response'] = $video_id;
                        array_push($result_data, $res);
                        $uploaded = true;
                        return $result_data;
                    }
                } catch (Exception $e) {
                    if (401 == $e->getCode()) {
                        // echo ($arr_token['email'] . " Youtube  Access token expired");
                        $refresh_token = $this->get_refersh_token($channel_id);
                        $client = new GuzzleHttp\Client(['base_uri' => 'https://accounts.google.com']);
                        $response = $client->request('POST', '/o/oauth2/token', [
                            'form_params' => [
                                "grant_type" => "refresh_token",
                                "refresh_token" => $refresh_token,
                                "client_id" => $arr_token['client_id'],
                                "client_secret" => $arr_token['client_secret'],
                            ],
                        ]);
                        $data = json_decode($response->getBody());
                        $data->refresh_token = $refresh_token;
                        $this->update_access_token($channel_id, json_encode($data));
                        $uploaded = false;
                    } elseif (403 == $e->getCode()) {
                        // echo ($arr_token['email'] . '  Youtube channel quota exceeded');
                        $channel_id = $channel_id + 1;
                        $uploaded = false;
                    }
                }
            } else if ($arr_token['error'] == true) {
                $res['error'] = true;
                $res['response'] = "Your Daily Upload Quota is Exceeded";
                array_push($result_data, $res);
                $stopper = 1;
                return $result_data;
            }
        }
    }

【问题讨论】:

标签: php google-api youtube-api youtube-data-api guzzle


【解决方案1】:

如果您查看videos.insert 的文档,您会看到所有未通过验证过程的应用上传的视频都将设置为私有。

完成验证流程后,您就可以将视频设为公开

【讨论】:

  • 实际上我正在存储客户端 ID、客户端密码、身份验证密钥、刷新令牌后使用 oath playground 作为重定向 url 进行所有验证..然后我只是使用带有此访问令牌的 videos.insert 方法..但是他们仍然将其标记为私有
  • 好吧,他们的问题是不要使用 Oauth Playground 来生成刷新令牌。那仅用于测试,仍然只允许上传私人视频。您将需要自己的项目,然后您需要完成验证过程,然后您才能上传公共视频。
  • 有什么方法可以上传视频,只需对项目进行一次验证。我需要客户不应该知道视频上传到 youtube。
  • Oauth2 是唯一支持授权对 YouTube api 的请求的方法。您需要用户许可才能将数据上传到他们的帐户。
猜你喜欢
  • 1970-01-01
  • 2014-09-27
  • 2021-09-07
  • 2012-08-19
  • 2013-03-27
  • 2020-06-29
  • 2016-10-31
  • 2015-07-12
  • 2015-08-31
相关资源
最近更新 更多