Как обновить access token и загрузить видео на youtube?

103
23 августа 2019, 19:10

Как обновить маркер доступа (с помощью маркера обновления) и загрузить видео на youtube?

authenticate.php

<?php
$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('https://www.googleapis.com/auth/youtube');
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? 'https' : 'http';
$redirect = filter_var($protocol . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
    FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);
// Define an object that will be used to make all API requests.
$youtube = new Google_Service_YouTube($client);
if (isset($_GET['code'])) {
    if (strval($_SESSION['state']) !== strval($_GET['state'])) {
        die('The session state did not match.');
    }
    $client->authenticate($_GET['code']);
    $_SESSION['token'] = $client->getAccessToken();
    exit;
}
if (isset($_SESSION['token'])) {
    $client->setAccessToken($_SESSION['token']);
}

config.php

<?php
require_once 'google-api-php-client-2.2.0/vendor/autoload.php';
// Call set_include_path() as needed to point to your client library.
// require_once 'Google/Client.php';
// require_once 'Google/Service/YouTube.php';
session_start();
/*
 * You can acquire an OAuth 2.0 client ID and client secret from the
 * Google Developers Console <https://console.developers.google.com/>
 * For more information about using OAuth 2.0 to access Google APIs, please see:
 * <https://developers.google.com/youtube/v3/guides/authentication>
 * Please ensure that you have enabled the YouTube Data API for your project.
 */
$OAUTH2_CLIENT_ID = '';
$OAUTH2_CLIENT_SECRET = '';
require_once 'inc/authenticate.php';

upload.php

<?php
if (!empty($_POST['video_path'])) {
    try{
        // REPLACE this value with the path to the file you are uploading.
        $videoPath = $_POST['video_path'];
        // Create a snippet with title, description, tags and category ID
        // Create an asset resource and set its snippet metadata and type.
        // This example sets the video's title, description, keyword tags, and
        // video category.
        $snippet = new Google_Service_YouTube_VideoSnippet();
        if (!empty($_POST['video_title'])) {
            $snippet->setTitle($_POST['video_title']);
        }
        if (!empty($_POST['video_description'])) {
            $snippet->setDescription($_POST['video_description']);
        }
        if (!empty($_POST['video_tags'])) {
            $video_tags = array_filter(array_map('trim', explode(',', $_POST['video_tags'])));
            $snippet->setTags($video_tags);
        }
        // Numeric video category. See
        // https://developers.google.com/youtube/v3/docs/videoCategories/list
        // $snippet->setCategoryId("22");
        // Set the video's status to "public". Valid statuses are "public",
        // "private" and "unlisted".
        $status = new Google_Service_YouTube_VideoStatus();
        if (!empty($_POST['video_status']) && in_array($_POST['video_status'], array('public', 'private', 'unlisted'))) {
            $status->privacyStatus = $_POST['video_status'];
        }
        // Associate the snippet and status objects with a new video resource.
        $video = new Google_Service_YouTube_Video();
        $video->setSnippet($snippet);
        $video->setStatus($status);
        // Specify the size of each chunk of data, in bytes. Set a higher value for
        // reliable connection as fewer chunks lead to faster uploads. Set a lower
        // value for better recovery on less reliable connections.
        $chunkSizeBytes = 1 * 1024 * 1024;
        // Setting the defer flag to true tells the client to return a request which can be called
        // with ->execute(); instead of making the API call immediately.
        $client->setDefer(true);
        // Create a request for the API's videos.insert method to create and upload the video.
        $insertRequest = $youtube->videos->insert('status,snippet', $video);
        // Create a MediaFileUpload object for resumable uploads.
        $media = new Google_Http_MediaFileUpload(
            $client,
            $insertRequest,
            'video/*',
            null,
            true,
            $chunkSizeBytes
        );
        // $media->setFileSize(filesize($videoPath));
        $headers = array_change_key_case(get_headers($videoPath, true));
        $media->setFileSize(intval($headers['content-length']));
        // Read the media file and upload it chunk by chunk.
        $status = false;
        $handle = fopen($videoPath, 'rb');
        while (!$status && !feof($handle)) {
            $chunk = stream_get_contents($handle, $chunkSizeBytes);
            $status = $media->nextChunk($chunk);
        }
        fclose($handle);
        // If you want to make other calls after the file upload, set setDefer back to false
        $client->setDefer(false);
        $video_url = 'https://www.youtube.com/watch?v=' . $status['id'];
        ?>
        <div class="alert alert-success">
            <h3 class="alert-heading">Video Uploaded</h3>
            <p><a href="<?php echo $video_url; ?>" class="alert-link"><?php echo $video_url; ?></a></p>
        </div>
        <?php
    } catch (Google_Service_Exception $e) {
        ?>
        <div class="alert alert-danger">
            <p>A service error occurred: <code><?php echo htmlspecialchars($e->getMessage()); ?></code></p>
        </div>
        <?php
    } catch (Google_Exception $e) {
        ?>
        <div class="alert alert-danger">
            <p>An client error occurred: <code><?php echo htmlspecialchars($e->getMessage()); ?></code></p>
        </div>
        <?php
    }
    $_SESSION['token'] = $client->getAccessToken();
}

youtube-uploader

Как добавить файл refresh_token, чтобы предотвратить сброс авторизации.

{"access_token":"ya29.GluQBs6GFi_0sG1VgmLUZ0....","expires_in":3600,"refresh_token":"1\/cLxr6ox0...","scope":"https:\/\/www.googleapis.com\/auth\/userinfo.email https:\/\/www.googleapis.com\/auth\/userinfo.profile","token_type":"Bearer","id_token":"eyJhbGc..","created":1547330141}

Я нашел информацию, но не смог реализовать ее в вышеприведенном коде.

PHP серверная Сторона YouTube V3 OAUTH API руководство по загрузке видео

[примеры] авторизация (получение маркера доступа и обновления) oauth 2.0 с Google и работа с Google API на PHP

Я могу получить маркер обновления и сохранить все в файл или session, но как я могу интегрировать проверку и обновление маркера в код выше?

Помогите пожалуйста!

READ ALSO
Перенос socket сервера на yii2

Перенос socket сервера на yii2

Всем хорошего времени сутокНачал разбираться с сокетами

111
Авторизация на сайте посредством curl

Авторизация на сайте посредством curl

Авторизируюсь на сайте через cURL записываю куки в файл

93
telegram api php sendMessage

telegram api php sendMessage

Использую API telegram для отправки сообщений в каналНужно получить результат, как показано на примере ниже, что бы вверху был текст, внизу изображение

134
Виджет для подключения к каналу telegram

Виджет для подключения к каналу telegram

Стоит задача сделать данный виджет,

117