✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Як використовувати API YouTube для завантаження відео на канал YouTube

50

Всі знають про YouTube. YouTube є платформою для обміну відео відео номер один у світі. Ми можемо використовувати YouTube для розміщення наших відео. Це економить нам багато місця на сервері, і можна легко вставити відео YouTube на веб-сайт. Будь-хто може завантажити відео на YouTube. Все, що вам потрібно зробити, це просто увійти у свій обліковий запис YouTube і завантажити відео. Простий і зрозумілий процес. Але що, якщо комусь потрібно завантажити відео через YouTube API на канал YouTube? Це можливо? Так, це можливо. У цій статті ми вивчаємо, як використовувати API YouTube для завантаження відео за допомогою PHP.

Зареєструйте програму та створіть облікові дані

Для початку роботи з API YouTube вам потрібен обліковий запис Google. Отримавши обліковий запис Google, зареєструйте свою програму та отримайте ключі API.

Нижче наведені кроки для реєстрації програми та отримання ключів API.

  • Перейдіть на Консоль розробника Google https://console.developers.google.com
  • Створіть новий проект. Ви також можете вибрати існуючий проект.
  • Введіть назву вашого проекту. Google Console створить унікальний ідентифікатор проекту.
  • Після створення проекту він з’явиться у верхній частині лівої бічної панелі.
  • Клацніть на Бібліотека. Ви побачите список API Google.
  • Увімкніть API даних YouTube.
  • Клацніть на Повноваження. Виберіть ідентифікатор клієнта Oauth у розділі Створення облікових даних. Виберіть перемикач для веб-програми.
  • Дайте ім’я. У розділі Авторизовані джерела JavaScript введіть URL-адресу вашого домену. В авторизованих URI-адресах переспрямування дайте посилання на URL-адресу переспрямування. У моєму випадку я передав URL-адресу http: //localhost/youtube/callback.php.
  • Клацніть на кнопку Створити. У спливаючому вікні ви отримаєте ідентифікатор клієнта та секрет клієнта. Скопіюйте ці деталі. Це нам знадобиться за мить.

Як використовувати API YouTube для завантаження відео на канал 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і додайте до нього наступний код.

class-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. Якщо ви маєте намір використовувати кілька облікових записів, змініть наведені вище запити відповідно до ваших вимог.

Створити маркер доступу

Ви встановили бібліотеки та створили таблицю для зберігання маркера. Тепер давайте виконаємо процедуру авторизації, захопимо маркер доступу та збережемо його у таблиці ‘token’.

Створіть 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 за допомогою API YouTube

Ви отримали маркер доступу, який буде використовуватися для завантаження відео на канал 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 за допомогою API YouTube

Можливо, вам також знадобиться код для видалення відео за допомогою API YouTube. Для того, щоб видалити відео, вам потрібен додатковий обсяг, 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, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі