更新
感谢易卜拉欣,我现在认为离此更近了。
使用此处提供的示例(https://developers.google.com/youtube/partner/docs/v1/contentOwners/list),我收到另一个Forbidden错误:
调用GET googleapis时遇到错误.... / youtube / partner / v1 / contentOwners?fetchMine = true:(403)Forbidden
...
在下面的链接上从API资源管理器中尝试此操作时,我可以获取YouTube CMS帐户详细信息。 https://developers.google.com/youtube/partner/docs/v1/contentOwners/list
另请注意"开发者帐户"与我们的" Youtube CMS帐户相关联#34; - 并且是YouTube合作伙伴。
希望有人可以帮助找出导致此问题的原因(403)我在尝试从YouTube CMS帐户中提取频道时遇到的禁止错误。
以下是一些细节以及我到目前为止所做的工作:
操作系统:Linux,语言:PHP 5
到目前为止,这些测试尝试获取频道的结果:
测试1)当我将参数:mine
设置为true
时,它不会返回错误,当我转到/youtube.com/时,它返回的频道不存在信道/ {channelID_returned}
测试2)当我将参数:forUsername
设置为SomeYoutubeUsername
时,它返回用户的频道并确认返回的频道ID是正确且有效的。
测试3)这是我真正想要完成的事情,我已将managedByMe
设置为true
并将onBehalfOfContentOwner
设置为CMSContentOwner
,然后它返回(403)禁止错误:
Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error calling .... etc.etc (403) Forbidden
请注意:我尝试使用" Google oAuth Web Application"从CMS帐户中获取频道。流动,它工作。
完整代码:
<?php
ini_set('display_errors',1);
// Initialize...
$key_Path = '...omitted...';
set_include_path( '...omitted...' );
require_once 'Google/Client.php';
require_once 'Google/Service/YouTube.php';
// Setup Credentials
$client_id = '...omitted...';
$service_account_name = ''...omitted...';
$key_file_location = $key_Path.''...omitted....p12';
$client = new Google_Client();
$client->setApplicationName("'...omitted...");
$youtube = new Google_Service_YouTube($client);
/************************************************
If we have an access token, we can carry on.
Otherwise, we'll get one with the help of an
assertion credential. In other examples the list
of scopes was managed by the Client, but here
we have to list them manually. We also supply
the service account
************************************************/
$service_token = get_Configuration( 'GOOGLE_API' , 'TOKEN' );
//$client->revokeToken( $service_token );
if ( !empty($service_token) ) {
$client->setAccessToken($service_token);
}
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
$service_account_name,
array(
'https://www.googleapis.com/auth/youtube',
'https://www.googleapis.com/auth/youtube.readonly',
'https://www.googleapis.com/auth/youtubepartner',
'https://www.googleapis.com/auth/youtubepartner-channel-audit'
),
$key
);
$cred->sub = '...ommited...';
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
/************************************************
We're just going to make the same call as in the
simple query as an example.
************************************************/
$service_token = $client->getAccessToken();
$params = array( //'mine' => true,
//'forUsername' => ''...omitted...',
'managedByMe' => true,
'onBehalfOfContentOwner' => ''...omitted...' // CMS Account User ID
);
$channels = $youtube->channels->listChannels( 'contentDetails' , $params );
print_r( $channels );
//$Channels = $youtube->Channels->list('contentDetails','{mine : true}');
?>
答案 0 :(得分:1)
要在此处使用服务帐户,您应该拥有和管理频道,并且频道应该链接到您尝试获取的CMS帐户。然后指定managedbyMe和contentowner的ID(不是名称)。
更多信息:https://developers.google.com/youtube/v3/docs/channels/list#managedByMe
示例:https://developers.google.com/youtube/partner/code_samples/php