Как загрузить видео на Ютуб через API на PHP
$client_id = '0000000-0000000.apps.googleusercontent.com';
$client_secret = '00000-0000000';
$redirect_uri = 'https://site.ru/start.php';
$params = array(
'client_id' => $client_id,
'redirect_uri' => $redirect_uri,
'response_type' => 'code',
'scope' => 'https://www.googleapis.com/auth/youtube.upload',
'state' => '123',
'access_type' => 'offline'
);
$url = 'https://accounts.google.com/o/oauth2/v2/auth?' . urldecode(http_build_query($params));
echo '<a href="' . $url . '">Авторизация через Google</a>';
if (!empty($_GET['code'])) {
// Отправляем код для получения токена (POST-запрос).
$params = array(
'client_id' => $client_id,
'client_secret' => $client_secret ,
'redirect_uri' => $redirect_uri,
'grant_type' => 'authorization_code',
'code' => $_GET['code']
);
print_r($params);
$ch = curl_init('https://oauth2.googleapis.com/token');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$data = curl_exec($ch);
curl_close($ch);
$data = json_decode($data, true);
print_r($data);
Таким образом я авторизовываюсь и получаю access_token а вот дальше беда
$attachment = '{
"snippet": {
"categoryId": "22",
"description": "Description of uploaded video.",
"title": "Test video upload.",
"tags": [
"музыка, песня, классика"
],
"defaultLanguage": "ru",
"thumbnails": {
"default": {
"url": "https://site.ru/uploads/1676160370-457638317-1676156600.jpg"
}
}
},
"status": {
"privacyStatus": "private",
"license": "youtube"
}
}';
$ch = curl_init('https://youtube.googleapis.com/youtube/v3/videos?key=00000000000');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: multipart/form-data", 'Authorization: Bearer access_token', 'Accept: application/json', 'Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$result = json_decode(curl_exec($ch),true);
curl_close($ch);
print_r($result);
В результате возвращается ошибка
[message] => Request contains an invalid argument. [domain] => global [reason] => badRequest
Что делать?