Как загрузить видео на Ютуб через 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

Что делать?


Ответы (0 шт):