Я следовал документам и образцам кода из руководства по документации, то есть здесь: https://developers.google.com/youtube/v3/docs/commentThreads/insert Но когда я выполняю скрипт, он всегда возвращает ответ с кодом ошибки: 403
сообщение: "Insufficient Permission"
Вот полный объект ответа:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "insufficientPermissions",
"message": "Insufficient Permission"
}
],
"code": 403,
"message": "Insufficient Permission"
}
}
Я потратил много времени на отладку и серфинг в Интернете, чтобы выяснить, как решить проблему, но не нашел ни одного ресурса, где я мог бы найти решение этой проблемы.проблема.Я был бы очень благодарен, если бы кто-нибудь мог дать мне подсказку или решение по этому поводу или сказать мне, если я что-то упустил.
PS Я также использовал другие методы API в моем приложении, такие как лайк видео, подпискаканал, логин с гуглом и все это отлично сработало.не, почему эта вставка комментария не работает.
Любая помощь будет оценена.Спасибо.
Вот мой сценарий API для выполнения вызова API.
<?php
// filename: api.php
class GoogleApi {
private $client_id;
private $client_secret;
private $redirect_uri;
private $client; // stored client instance
private $yt_service; // youtube service instance for making all api calls
public function __construct($client_id, $client_secret, $redirect_uri, $token = '') {
$this->client_id = $client_id;
$this->client_secret = $client_secret;
$this->redirect_uri = $redirect_uri;
// create google client instance
$this->client = $this->getClient();
if(!empty($token)) {
// set / refresh access token
$this->setRefreshAccessToken($token);
// Define an object that will be used to make all API requests.
$this->yt_service = new Google_Service_YouTube($this->client);
}
}
// Get a google client instance
// docs: https://developers.google.com/youtube/v3/guides/auth/server-side-web-apps
private function getClient($redirect_uri = '') {
if (!empty($redirect_uri)) {
$this->redirect_uri = $redirect_uri;
}
$client = new Google_Client();
$client->setAuthConfig('client_secrets.json');
$client->setScopes([
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/userinfo.profile",
"https://www.googleapis.com/auth/plus.me",
"https://www.googleapis.com/auth/plus.profiles.read",
"https://www.googleapis.com/auth/youtube"
]);
// available scopes: https://developers.google.com/identity/protocols/googlescopes
$client->setRedirectUri($this->redirect_uri);
$client->setState(mt_rand());
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->setIncludeGrantedScopes(true); // incremental auth
return $client;
}
public function setRefreshAccessToken($accessToken) {
// Set the access token
$this->client->setAccessToken($accessToken);
// Refresh the token if it's expired.
if ($this->client->isAccessTokenExpired()) {
// update access token
$this->client->fetchAccessTokenWithRefreshToken($this->client->getRefreshToken());
}
}
// Insert a comment on video
// docs: https://developers.google.com/youtube/v3/docs/commentThreads/insert
public function commentVideo($videoId, $commentText) {
$this->client->addScope('https://www.googleapis.com/auth/youtube');
$this->client->addScope('https://www.googleapis.com/auth/youtube.force-ssl');
# Create a comment snippet with text.
$commentSnippet = new Google_Service_YouTube_CommentSnippet();
$commentSnippet->setTextOriginal($commentText);
# Create a top-level comment with snippet.
$topLevelComment = new Google_Service_YouTube_Comment();
$topLevelComment->setSnippet($commentSnippet);
# Create a comment thread snippet with channelId and top-level comment.
$commentThreadSnippet = new Google_Service_YouTube_CommentThreadSnippet();
// $commentThreadSnippet->setChannelId($CHANNEL_ID);
$commentThreadSnippet->setVideoId($videoId); // Insert video comment
$commentThreadSnippet->setTopLevelComment($topLevelComment);
# Create a comment thread with snippet.
$commentThread = new Google_Service_YouTube_CommentThread();
$commentThread->setSnippet($commentThreadSnippet);
# Call the YouTube Data API's commentThreads.insert method to create a comment.
$response = $this->yt_service->commentThreads->insert('snippet', $commentThread);
// print_r($response);
return $response;
}
}
?>
А вот сценарий для моей конечной точки (я выполняю вызов ajax для этого сценария).
<php
// filename: comment.php
require_once("api.php");
// Insert a comment on youtube video.
if(empty($_POST['token'])) {
return die('parameter `token` is required.');
}
if(empty($_POST['videoId'])) {
return die('parameter `videoId` is required.');
}
if(empty($_POST['commentText'])) {
return die('parameter `commentText` is required.');
}
try {
// GoogleApi class instance
$api = new GoogleApi(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_CALLBACK, $_POST['token']);
$data = $api->commentVideo($_POST['videoId'], $_POST['commentText']);
// send response.
echo json_encode($result);
} catch(Exception $err) {
return die($err -> getMessage());
}
?>