Загрузить на YouTube через Google API V3 (PHP) с токеном обновления и доступа - PullRequest
1 голос
/ 03 июня 2019

Я хочу разработать одно успокаивающее приложение, в котором пользователи будут загружать видео на YouTube через некоторый интерфейс администратора.Так как пользователи будут загружать только от моего имени и по одному каналу, я хочу выполнить аутентификацию только один раз, а затем использовать токен обновления для получения токена доступа.

Итак, я сделал следующее

  1. Я посетил https://developers.google.com и выбрал и авторизовал все API данных Youtube v3 API с моей электронной почтой
  2. Обмен кода авторизации для токенов (так что теперь у меня есть код авторизации, обновление и токен доступа)
  3. Реализация кода (застрял здесь, не представляете, да?)

$client = new Google_Client();

$client->setApplicationName('myApp');
$client->setClientId('<client-id>');
$client->setClientSecret('<client-secret>');
$client->setDeveloperKey('<dev-key>'); // <- do I really need that
$client->setScopes('https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtubepartner https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtubepartner-channel-audit https://www.googleapis.com/auth/youtube.readonly');
$client->refreshToken('<my-refresh-token>');
$client->setAuthConfig('client_secrets.json'); // <- is that the same as setting clientId and ClientSecret???
$client->setAccessType('offline');
$client->setApprovalPrompt('force');

$accessToken = $client->getAccessToken();
if (is_null($accessToken) || $client->isAccessTokenExpired()) {
    // How to refresh token with REFRESH token?
    dd($_GET);
}


// Define service object for making API requests.
$service = new Google_Service_YouTube($client);

// Define the $video object, which will be uploaded as the request body.
$video = new Google_Service_YouTube_Video();

// Add 'snippet' object to the $video object.
$videoSnippet = new Google_Service_YouTube_VideoSnippet();
$videoSnippet->setCategoryId('1');
$videoSnippet->setChannelId('<my-channel-id>');
$videoSnippet->setDescription('Description of uploaded video.');
$videoSnippet->setTags(['tag', 'tag2', 'tag3']);
$videoSnippet->setTitle('Test video upload.');
$video->setSnippet($videoSnippet);

// Add 'status' object to the $video object.
$videoStatus = new Google_Service_YouTube_VideoStatus();
$videoStatus->setEmbeddable(true);
$videoStatus->setLicense('youtube');
$videoStatus->setPrivacyStatus('private');
$video->setStatus($videoStatus);

$queryParams = [
    'stabilize' => false
];

// TODO: For this request to work, you must replace "YOUR_FILE"
//       with a pointer to the actual file you are uploading.
//       The maximum file size for this operation is 64GB.
$response = $service->videos->insert(
    'snippet,status',
    $video,
    $queryParams,
    array(
        'data' => file_get_contents($fullFilePath),
        'mimeType' => 'video/*',
        'uploadType' => 'multipart'
    )
);
print_r($response);

Итак, теперь у меня есть несколько проблем, с которыми я не знаю, как справиться.

  1. Какие $client->.... функции должны присутствовать, если я уже авторизован (через игровую площадку OAuth)
  2. Как обновить токен с помощью обновления токена?

Пока что единственный ответ, который я получаю, это Google_Service_Exception

Message: { "error": { "errors": [ { "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Login Required" } }

Это мой второй день попытки загрузить видео через API с помощью PHP, и это сводит меня с ума.Я надеюсь, что вы, ребята, поможете мне.

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, и я предоставлю.Спасибо !!

ОБНОВЛЕНИЕ

После добавления следующего кода

$client->setAccessToken('<ACCESS_TOKEN>');

я получаю следующие ошибки

div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>An uncaught Exception was encountered</h4>

<p>Type: Google_Service_Exception</p>
<p>Message: {
 "error": {
  "errors": [
   {
    "domain": "youtube.quota",
    "reason": "quotaExceeded",
    "message": "The request cannot be completed because you have exceeded your \u003ca href=\"/youtube/v3/getting-started#quota\"\u003equota\u003c/a\u003e."
   }
  ],
  "code": 403,
  "message": "The request cannot be completed because you have exceeded your \u003ca href=\"/youtube/v3/getting-started#quota\"\u003equota\u003c/a\u003e."
 }
}
</p>
<p>Filename: /home/vagrant/workspace/spot-scouting-adminpage/rest/vendor/google/apiclient/src/Google/Http/REST.php</p>
<p>Line Number: 118</p>

Какиеэто, конечно, неправда, так как я никогда не делал ни одного успешного запроса в Google.Вот проф: enter image description here

Возможно, проблема в том, что вы сгенерировали ключ доступа через developers.google.com???

1 Ответ

0 голосов
/ 07 июня 2019

Вы пропустили только маленький шаг для установки токена доступа. Как только вы получите токен доступа, установите его с клиентом Google:

$client->setAccessToken($accessToken);

А затем воспользуйтесь сервисом YouTube:

$service = new Google_Service_YouTube($client);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...