WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Как использовать YouTube API для загрузки видео на канал YouTube

1 498

Все знают о YouTube. YouTube – это платформа номер один для обмена видео в мире. Мы можем использовать YouTube для размещения наших видео. Это экономит много места на сервере, и можно легко встроить видео YouTube на веб-сайт. Любой желающий может загрузить видео на YouTube. Все, что вам нужно сделать, это просто войти в свою учетную запись YouTube и загрузить видео. Простой и понятный процесс. Но что, если кому-то нужно загрузить видео через YouTube API на канал YouTube? Является ли это возможным? Да, это возможно. В этой статье мы изучаем, как использовать YouTube API для загрузки видео с помощью PHP.

Зарегистрируйте приложение и создайте учетные данные

Чтобы начать работу с YouTube API, вам потребуется учетная запись Google. После того, как у вас будет учетная запись Google, зарегистрируйте свое приложение и получите ключи API.

Ниже приведены шаги для регистрации приложения и получения ключей API.

  • Перейдите в консоль разработчика Google. https://console.developers.google.com
  • Создайте новый проект. Вы также можете выбрать существующий проект.
  • Введите название вашего проекта. Консоль Google создаст уникальный идентификатор проекта.
  • После создания проекта он появится в верхней части левой боковой панели.
  • Щелкните Библиотека. Вы увидите список API Google.
  • Включите API данных YouTube.
  • Нажмите на учетные данные. Выберите Идентификатор клиента Oauth в разделе Создать учетные данные. Установите переключатель для веб-приложения.
  • Дайте имя. В разделе «Авторизованные источники JavaScript» введите URL-адрес вашего домена. В URI авторизованного перенаправления укажите ссылку на URL перенаправления. В моем случае я передал URL http: //localhost/youtube/callback.php.
  • Нажмите на кнопку «Создать». Во всплывающем окне вы получите идентификатор клиента и секрет клиента. Скопируйте эти данные. Нам это понадобится через минуту.

Как использовать YouTube API для загрузки видео на канал YouTube

Установить базовую конфигурацию

Для загрузки видео с помощью API YouTube необходимо создать токен доступа. Токен доступа – это не что иное, как идентификатор учетной записи YouTube.

Но токен доступа истекает через некоторое время. По истечении срока действия токена доступа вы получите сообщение об ошибке «Несанкционированный доступ». Решением для этого является повторный запуск процесса авторизации или повторное создание токена доступа в фоновом режиме и завершение процесса загрузки. В этой статье я предлагаю второе решение. Мы повторно сгенерируем токен доступа, если срок его действия истечет в фоновом режиме, не прерывая процесс загрузки. При этом вам не нужно повторять процесс авторизации снова и снова.

При этом вам необходимо сначала авторизовать учетную запись для создания токена доступа. Я собираюсь использовать библиотеку Hybridauth для авторизации и генерации токена доступа. Откройте свой composer.jsonфайл и добавьте в него следующие строки.

{
    "require": {
        "google/apiclient": "2.0",
        "hybridauth/hybridauth": "~3.0"
    }
}

Имейте в виду, что YouTube – это продукт Google, а YouTube API – это не что иное, как Google API. Вот почему мы используем библиотеку «google / apiclient». Затем выполните приведенную ниже команду для установки этих библиотек.

composer install

Конфигурация базы данных

При каждом вызове API нам нужно отправлять токен доступа, поэтому сохраните его в базе данных. Создайте «токен» таблицы в своей базе данных, используя запрос ниже.

CREATE TABLE `token` ( `id` int(11) NOT NULL AUTO_INCREMENT,
 `access_token` text NOT NULL,
 PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

В более поздней части этой статьи нам нужно будет взаимодействовать с этой таблицей «токенов» для получения и обновления сведений о токенах. Для этого потребуется написать соединение с базой данных и несколько запросов. Создайте файл class-db.phpи добавьте в него следующий код.

класс-db.php

<?php
class DB {
    private $dbHost     = "DB_HOST";
    private $dbUsername = "DB_USERNAME";
    private $dbPassword = "DB_PASSWORD";
    private $dbName     = "DB_NAME";
     
    public function __construct(){
        if(!isset($this->db)){
            // Connect to the database
            $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
            if($conn->connect_error){
                die("Failed to connect with MySQL: ". $conn->connect_error);
            }else{
                $this->db = $conn;
            }
        }
    }
 
    public function is_table_empty() {
        $result = $this->db->query("SELECT id FROM token");
        if($result->num_rows) {
            return false;
        }
 
        return true;
    }
 
    public function get_access_token() {
        $sql = $this->db->query("SELECT access_token FROM token");
        $result = $sql->fetch_assoc();
        return json_decode($result['access_token']);
    }
 
    public function get_refersh_token() {
        $result = $this->get_access_token();
        return $result->refresh_token;
    }
 
    public function update_access_token($token) {
        if($this->is_table_empty()) {
            $this->db->query("INSERT INTO token(access_token) VALUES('$token')");
        } else {
            $this->db->query("UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)");
        }
    }
}

Передайте учетные данные своей базы данных в указанном выше файле. Здесь я предполагаю, что вы хотите использовать одну учетную запись YouTube. Если вы собираетесь использовать несколько учетных записей, измените приведенные выше запросы в соответствии с вашими требованиями.

Создать токен доступа

Вы установили библиотеки и создали таблицу для хранения токена. Теперь давайте выполним процесс авторизации, возьмем токен доступа и сохраним его в таблице токенов.

Создайте config.phpфайл и запишите конфигурацию в соответствии с рекомендациями библиотеки HybridAuth.

config.php

<?php
require_once 'vendor/autoload.php';
require_once 'class-db.php';
 
define('GOOGLE_CLIENT_ID', 'PASTE_CLIENT_ID_HERE');
define('GOOGLE_CLIENT_SECRET', 'PASTE_CLIENT_SECRET_HERE');
 
$config = [
    'callback' => 'YOUR_DOMAIN_URL/callback.php',
    'keys'     => [
                    'id' => GOOGLE_CLIENT_ID,
                    'secret' => GOOGLE_CLIENT_SECRET
                ],
    'scope'    => 'https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload',
    'authorize_url_parameters' => [
            'approval_prompt' => 'force', // to pass only when you need to acquire a new refresh token.
            'access_type' => 'offline'
    ]
];
 
$adapter = new HybridauthProviderGoogle( $config );

Замените заполнители фактическими значениями ваших учетных данных Google. Добавьте тот же URL-адрес обратного вызова, который вы передали при создании консольного приложения. Это означает, что когда пользователь завершит процесс авторизации, он будет перенаправлен на callback.phpфайл.

В callback.phpфайле мы получим данные токена доступа и сохраним их в базе данных.

callback.php

<?php
require_once 'config.php';
 
try {
    $adapter->authenticate();
    $token = $adapter->getAccessToken();
    $db = new DB();
    if($db->is_table_empty()) {
        $db->update_access_token(json_encode($token));
        echo "Access token inserted successfully.";
    }
}
catch( Exception $e ){
    echo $e->getMessage() ;
}

Перейдите в свой браузер и запустите YOUR_DOMAIN_URL / callback.php, вы выполните перенаправление в учетную запись Google, завершите процесс авторизации, и вы должны увидеть сообщение об успешном завершении. Проверьте “токен” таблицы базы данных. В нем должны храниться данные вашего токена. А это значит, что вы можете загрузить видео на свой канал YouTube.

Загрузите видео на канал YouTube с помощью YouTube API

У вас есть токен доступа, который будет использоваться для загрузки видео на канал YouTube через Google API. Но, как я упоминал ранее, срок действия токена доступа истечет через некоторое время, и мы восстановим его в фоновом режиме, не запрашивая повторную авторизацию.

Мы можем сделать это с помощью referh_token. Если вы посмотрите на столбец access_token в таблице, вы увидите, что он также содержит запись refresh_token. Используя «refresh_token», мы вызываем конечную точку «/ o / oauth2 / token» и регенерируем токен доступа в фоновом режиме.

Затем вам понадобится HTML-форма, с помощью которой вы можете просмотреть видео и отправить его на сервер для загрузки. Давайте создадим простую HTML-форму следующим образом.

index.php

<form method="post" enctype="multipart/form-data">
    <p><input type="text" name="title" placeholder="Enter Video Title" /></p>
    <p><textarea name="summary" cols="30" rows="10" placeholder="Video description"></textarea></p>
    <p><input type="file" name="file"/></p>
    <input type="submit" name="submit" value="Submit" />
</form>

Форма имеет 3 поля – заголовок, описание и файл. После отправки этой формы видео должно быть загружено на ваш канал YouTube вместе с предоставленным названием и описанием.

index.php

<?php
require_once 'config.php';
 
if (isset($_POST['submit'])) {
    $arr_data = array(
        'title' => $_POST['title'],
        'summary' => $_POST['summary'],
        'video_path' => $_FILES['file']['tmp_name'],
    );
    upload_video_on_youtube($arr_data);
}
 
function upload_video_on_youtube($arr_data) {
 
    $client = new Google_Client();
 
    $db = new DB();
 
    $arr_token = (array) $db->get_access_token();
    $accessToken = array(
        'access_token' => $arr_token['access_token'],
        'expires_in' => $arr_token['expires_in'],
    );
 
    $client->setAccessToken($accessToken);
 
    $service = new Google_Service_YouTube($client);
 
    $video = new Google_Service_YouTube_Video();
 
    $videoSnippet = new Google_Service_YouTube_VideoSnippet();
    $videoSnippet->setDescription($arr_data['summary']);
    $videoSnippet->setTitle($arr_data['title']);
    $video->setSnippet($videoSnippet);
 
    $videoStatus = new Google_Service_YouTube_VideoStatus();
    $videoStatus->setPrivacyStatus('public');
    $video->setStatus($videoStatus);
 
    try {
        $response = $service->videos->insert(
            'snippet,status',
            $video,
            array(
                'data' => file_get_contents($arr_data['video_path']),
                'mimeType' => 'video/*',
                'uploadType' => 'multipart'
            )
        );
        echo "Video uploaded successfully. Video id is ". $response->id;
    } catch(Exception $e) {
        if( 401 == $e->getCode()) {
            $refresh_token = $db->get_refersh_token();
 
            $client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
 
            $response = $client->request('POST', '/o/oauth2/token', [
                'form_params' => [
                    "grant_type" => "refresh_token",
                    "refresh_token" => $refresh_token,
                    "client_id" => GOOGLE_CLIENT_ID,
                    "client_secret" => GOOGLE_CLIENT_SECRET,
                ],
            ]);
 
            $data = (array) json_decode($response->getBody());
            $data['refresh_token'] = $refresh_token;
 
            $db->update_access_token(json_encode($data));
 
            upload_video_on_youtube($arr_data);
        } else {
            //echo $e->getMessage(); //print the error just in case your video is not uploaded.
        }
    }
}
?>

Приведенный выше код берет видеофайл из HTML-формы и загружает его через API на ваш канал YouTube. Если срок действия вашего токена доступа истек, он регенерирует токен в фоновом режиме и продолжает процесс, не нарушая его.

Загрузить собственный значок на видео YouTube

Если вы создаете собственное приложение, которое управляет видео на YouTube, вероятно, вы хотите загрузить миниатюру на видео YouTube. Для загрузки персонализированного значка необходимо, чтобы пользователи подтвердили свой номер телефона в своей учетной записи YouTube. Посетите ссылкуhttps://www.youtube.com/features и проверьте номер телефона.

После подтверждения номера телефона вы можете использовать нашу предыдущую форму и код с небольшими изменениями и установить собственный эскиз для загруженного видео. Сначала добавьте поле формы, которое позволяет загружать изображения. Рекомендуемый размер эскиза YouTube составляет 1280x720.

<p>
    <label>Image</label>
    <input type="file" name="image" accept="image/*" />
</p>

В форме отправки мы построили массив, $arr_dataкоторый содержит все данные формы. Добавьте новую пару для изображения в массив $arr_dataследующим образом.

$arr_data = array(
    'title' => $_POST['title'],
    'summary' => $_POST['summary'],
    'video_path' => $_FILES['file']['tmp_name'],
    'image_path' => $_FILES['image']['tmp_name'], // here we are passing image
);

Затем, после того, как наш код загрузит видео на YouTube, мы должны взять идентификатор видео и назначить видео собственный эскиз.

<?php
...
...
echo "Video uploaded successfully. Video id is ". $response->id;
 
//upload thumbnail
$videoId = $response->id;
 
$chunkSizeBytes = 1 * 1024 * 1024;
 
$client->setDefer(true);
 
$setRequest = $service->thumbnails->set($videoId);
 
$media = new Google_Http_MediaFileUpload(
    $client,
    $setRequest,
    'image/png',
    null,
    true,
    $chunkSizeBytes
);
$imagePath = $arr_data['image_path'];
$media->setFileSize(filesize($imagePath));
 
$status = false;
$handle = fopen($imagePath, "rb");
 
while (!$status && !feof($handle)) {
    $chunk  = fread($handle, $chunkSizeBytes);
    $status = $media->nextChunk($chunk);
}
 
fclose($handle);
 
$client->setDefer(false);
echo "<br>Thumbanil: ". $status['items'][0]['default']['url'];

Удалить видео с канала YouTube с помощью YouTube API

Вам также может понадобиться код для удаления видео с помощью YouTube API. Чтобы удалить видео, вам понадобится дополнительная область, https://www.googleapis.com/auth/youtubeкоторую я уже включил выше в файл конфигурации. Это означает, что токен доступа, созданный с помощью описанных выше шагов, можно использовать для удаления видео.

Ниже приведен код, который удалит видео с вашего канала YouTube.

<?php
require_once 'config.php';
 
delete_video('VIDEO_ID_HERE');
 
function delete_video($id) {
     
    $client = new Google_Client();
      
    $db = new DB();
     
    $arr_token = (array) $db->get_access_token();
    $accessToken = array(
        'access_token' => $arr_token['access_token'],
        'expires_in' => $arr_token['expires_in'],
    );
     
    try {
        $client->setAccessToken($accessToken);
        $service = new Google_Service_YouTube($client);
        $service->videos->delete($id);
    } catch(Exception $e) {
        if( 401 == $e->getCode()) {
            $refresh_token = $db->get_refersh_token();
  
            $client = new GuzzleHttpClient(['base_uri' => 'https://accounts.google.com']);
  
            $response = $client->request('POST', '/o/oauth2/token', [
                'form_params' => [
                    "grant_type" => "refresh_token",
                    "refresh_token" => $refresh_token,
                    "client_id" => GOOGLE_CLIENT_ID,
                    "client_secret" => GOOGLE_CLIENT_SECRET,
                ],
            ]);
  
            $data = (array) json_decode($response->getBody());
            $data['refresh_token'] = $refresh_token;
  
            $db->update_access_token(json_encode($data));
  
            delete_video($id);
        } else {
            //echo $e->getMessage(); //print the error just in case your video is not uploaded.
        }
    }
}

Это оно! Надеюсь, вы узнали, как загрузить видео на канал YouTube с помощью API YouTube. Я хотел бы услышать ваши мысли или предложения в разделе комментариев ниже.

Статьи по Теме

Источник записи: artisansweb.net

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее