【问题标题】:Youtube Data API v3 Account Service in PHP : 403 - Forbidden : YoutubeSignupRequiredPHP 中的 Youtube Data API v3 帐户服务:403 - 禁止:YoutubeSignupRequired
【发布时间】:2013-01-23 13:22:41
【问题描述】:

我为此苦恼了 4 个小时,所以我可能需要一点帮助。

我想做的是将视频存储在 youtube 上,用于我们正在进行的视频比赛。我真的更喜欢通过服务帐户进行 2 条腿 OAuth 访问(我希望即使没有 gmail 帐户的用户也能够向我们发送视频,并且我想将这些视频设为私有或不公开在我们的 youtube 帐户中)。

但它似乎不起作用。我现在的代码是这样的:

function go()
{
require_once 'googleClient/Google_Client.php';
require_once 'googleClient/contrib/Google_YoutubeService.php';

define("CLIENT_ID",'xxxxxxx.apps.googleusercontent.com');
define("SERVICE_ACCOUNT_NAME",'xxxxxxx@developer.gserviceaccount.com');
define("KEY_FILE", 'googleClient/verylonghashtagprivacystuff-privatekey.p12');
define("SECRET_FILE", 'client_secrets.json');

$client = new Google_Client();
$client->setApplicationName("My Contest App");

$key = file_get_contents(KEY_FILE);
$secret = file_get_contents(SECRET_FILE);


$GAC = new Google_AssertionCredentials( SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/youtube.upload',
            'https://www.googleapis.com/auth/youtube'), 
$key ,'notasecret','http://oauth.net/grant_type/jwt/1.0/bearer');

$client->setAssertionCredentials($GAC);

$client::$auth->refreshTokenWithAssertion();
$client->setClientId(CLIENT_ID); // Did tried to put that one sooner
$client->setClientSecret($secret); // Did tried to put that one sooner
$json = $client->getAccessToken();

$accessToken = json_decode($json)->access_token;
$video = array();
$video["snippet"] = array();


$snippet = new Google_VideoSnippet();
$snippet->setTitle("Contest Video USERNAME");
$snippet->setDescription("Video for contest 2013 USERNAME.");
$snippet->setTags(array("Contest","Whatever","2013"));
$snippet->setCategoryId("22"); //Did tried "Entertainment".

$status = new Google_VideoStatus();
$status->setPrivacyStatus("unlisted");

$video = new Google_Video();
$video->setSnippet($snippet);
$video->setStatus($status);
$client->setAccessToken($json);

$youtube = new Google_YoutubeService($client);
$url = '/projet_video.mp4';

$response = $youtube->videos->insert(
"status,snippet", 
$video, 
array(  'data' => file_get_contents($url),'mimeType' => "video/*")); 
//Did tried video/mp4


return $response ;}

结果是:

error": {  "errors": [   {
    "domain": "youtube.header",
    "reason": "youtubeSignupRequired",
    "message": "Forbidden",
    "locationType": "header",
    "location": "Authorization"
}], "code": 403,  "message": "Forbidden" }

【问题讨论】:

  • 如果我添加“onBehalfOfContentOwner”,我得到一个全新的错误 500,没有错误文本 (null)。
  • 我很确定这与 stackoverflow.com/questions/14453505/… 的回答相同
  • 感谢您回答我们。我认为最好自己提出问题,因为他没有提供太多代码,而且我们似乎使用不同的语言。我会尝试您的回答并尽快发布反馈。然而这很奇怪。我用来创建客户端 API ID 的 google 帐户,以及诸如此类的东西(API ON 等)是我们用来将视频发布到 youtube 的帐户。我以为它以某种方式联系在一起。谢谢
  • “用户已有 YouTube 频道”。如果我给你 googledev 帐户或 yt 帐户的电子邮件,对你有帮助吗?
  • 如果您能传递登录电子邮件地址和/或 YouTube 频道 ID 和/或 YouTube 旧频道名称 - jeffy at google dot com,那就太好了

标签: php youtube-api


【解决方案1】:

服务帐户不适用于 YouTube API

服务帐户不适用于 YouTube API 调用,因为它是关联的 YouTube 频道,并且您不能将新的或现有的频道与服务帐户相关联。使用服务帐号调用 YouTube API 会返回错误,错误类型设置为未授权,原因设置为 youtubeSignupRequired。

来源:https://developers.google.com/youtube/v3/guides/moving_to_oauth#service_accounts

【讨论】:

    【解决方案2】:

    在与 OP 进行离线跟踪后,问题归结为各种 YouTube API 不支持服务帐户,至少目前不支持。您需要使用与您要访问的 YouTube 频道相关联的实际 Google 帐户的凭据通过其中一个流程 described in the docs(不包括服务帐户流程)。

    【讨论】:

    • 你是怎么得出这个结论的?我问是因为有一个选项可以在服务中启用“YouTube Data API v3”。
    • 您可以为任何 API 控制台项目启用 YouTube 数据 API v3。这与您在通过 OAuth 2 流程时需要使用的帐户正交。 YouTube 目前不支持服务帐户——事情就是这样。
    • 知道 YouTube 何时支持服务帐户?我们真的很想升级到 v3,但因为我们需要服务帐户功能而无法升级。
    • 我向您保证,您不需要服务帐户。理论上您可以使用服务帐户执行的任何操作,您都可以使用 OAuth 2 的已安装应用程序流程并使用刷新令牌来生成新的访问令牌,而无需进一步的用户交互。见developers.google.com/youtube/v3/guides/moving_to_oauth
    【解决方案3】:

    我解决了,我的答案在这里:How to insert video youtube api v3 through service account with ruby享受!

    您遇到的错误是因为您没有在将电影上传到的电子邮件中添加人员标签。如果您使用我的答案中的代码,这一切都已解决并且可以正常工作

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 2019-01-11
      • 2020-08-28
      • 2016-06-05
      • 1970-01-01
      相关资源
      最近更新 更多