Я хочу загрузить видео на YouTube через php. Для этого я следовал этому руководству, чтобы получить права (аутентифицироваться), и этому , чтобы загрузить видео.
Аутентификация работает как надо. Пользователь перенаправляется на сайт Google, принимает, что у меня есть право загружать видео YouTube и т. Д., И снова перенаправляется на мой сайт. Там токен доступа сохраняется.
Но если я хочу загрузить видео, я получаю эту ошибку:
Произошла ошибка службы: {"error": {"errors": [{"domain": "global", "reason": "authError", "message": "Неверные учетные данные", "locationType": " header "," location ":" Authorization "}]," code ": 401," message ":" Invalid Credentials "}}
Чтобы протестировать мое приложение, я попытался получить свои загрузки вместо загрузки видео, но произошла та же ошибка.
Я понятия не имею, что вызывает эту ошибку.
Вот мой код с сайта, который перенаправляет пользователя в Google:
$OAUTH2_CLIENT_ID = "Not on Stackoverflow (but here is a code)";
$OAUTH2_CLIENT_SECRET = "Also not on Stackoverflow";
$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->addScope("https://www.googleapis.com/auth/youtube.upload");
$client->addScope("https://www.googleapis.com/auth/youtube");
$client->setRedirectUri("my site(actual link)");
$client->setAccessType('offline'); // offline access
$client->setIncludeGrantedScopes(true); // incremental auth
$auth_url = $client->createAuthUrl();
echo '<a href="' . htmlspecialchars($auth_url) . '">Allow posting on YouTube (click)</a>';
Вот мой код с сайта, на который перенаправлен пользователь из Google:
$OAUTH2_CLIENT_ID = "Not on Stackoverflow (but here is a code)";
$OAUTH2_CLIENT_SECRET = "Also not on Stackoverflow";
$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->addScope("https://www.googleapis.com/auth/youtube.upload");
$client->addScope("https://www.googleapis.com/auth/youtube");
$client->setRedirectUri("my site (actual link)");
$client->setAccessType('offline'); // offline access
$client->setIncludeGrantedScopes(true); // incremental auth
$client->authenticate($_GET['code']);
$access_token = $client->getAccessToken();
//Acces token is being saved
А вот код загрузки (который не работает):
$OAUTH2_CLIENT_ID = "--";
$OAUTH2_CLIENT_SECRET = "--";
$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->addScope("https://www.googleapis.com/auth/youtube.upload");
$client->addScope("https://www.googleapis.com/auth/youtube");
$client->setRedirectUri("https://www.socialme.online/YoutubeFT.php");
$client->setAccessType('offline'); // offline access
$client->setIncludeGrantedScopes(true); // incremental auth
$client->setAccessToken($access_token);
$youtube = new Google_Service_YouTube($client);
try {
$snippet = new Google_Service_YouTube_VideoSnippet();
$snippet->setTitle($Titel);
$snippet->setDescription($Beschreibung);
$snippet->setTags(array("tag1", "tag2"));
$snippet->setCategoryId("22");
$status = new Google_Service_YouTube_VideoStatus();
$status->privacyStatus = "public";
$video = new Google_Service_YouTube_Video();
$video->setSnippet($snippet);
$video->setStatus($status);
$chunkSizeBytes = 1048576;
$client->setDefer(true);
$insertRequest = $youtube->videos->insert("status,snippet", $video);
$media = new Google_Http_MediaFileUpload(
$client,
$insertRequest,
'video/'.$extension,
null,
true,
$chunkSizeBytes
);
$media->setFileSize(filesize($new_path));
// Read the media file and upload it chunk by chunk.
$status = false;
$handle = fopen($new_path, "rb");
while (!$status && !feof($handle)) {
$chunk = fread($handle, $chunkSizeBytes);
$status = $media->nextChunk($chunk);
}
fclose($handle);
$client->setDefer(false);
} catch (Google_Service_Exception $e) {
$htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>',
htmlspecialchars($e->getMessage()));
} catch (Google_Exception $e) {
$htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>',
htmlspecialchars($e->getMessage()));
}
echo $htmlBody;
Я не знаю, что вызывает эту ошибку, тем более что большая часть кода взята из официальных документов Google. URL в redirect_uri
действителен и совпадает с URL-адресом, авторизованным в консоли Google. Ссылка на видео тоже действительна.
Спасибо за помощь.