✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Cómo usar la API de YouTube para cargar videos en el canal de YouTube

328

Todo el mundo conoce YouTube. YouTube es la plataforma de intercambio de videos número uno del mundo. Podemos usar YouTube para alojar nuestros videos. Esto nos ahorra mucho espacio en el servidor y uno puede incrustar fácilmente el video de YouTube en el sitio web. Cualquiera puede subir el video a YouTube. Todo lo que necesita hacer es iniciar sesión en su cuenta de YouTube y cargar el video. Proceso simple y directo. Pero, ¿qué pasa si alguien necesita subir videos a través de la API de YouTube en un canal de YouTube? ¿Es posible? Sí, es posible. En este artículo, estudiamos cómo usar la API de YouTube para cargar un video usando PHP.

Registre una aplicación y cree credenciales

Para comenzar con la API de YouTube, necesita una cuenta de Google. Una vez que tenga una cuenta de Google, registre su aplicación y obtenga las claves API.

A continuación se muestran los pasos para registrar una aplicación y obtener sus claves API.

  • Vaya a la Consola para desarrolladores de Google https://console.developers.google.com
  • Crea un nuevo proyecto. También puede seleccionar un proyecto existente.
  • Escriba un nombre de su proyecto. Google Console creará un ID de proyecto único.
  • Después de crear un proyecto, aparecerá en la parte superior de la barra lateral izquierda.
  • Haga clic en Biblioteca. Verá la lista de API de Google.
  • Habilita la API de datos de YouTube.
  • Haga clic en Credenciales. Seleccione ID de cliente de Oauth en Crear credenciales. Seleccione el botón de opción para la aplicación web.
  • Dar el nombre. En Orígenes de JavaScript autorizados, ingrese la URL de su dominio. En los URI de redireccionamiento autorizados, proporcione el enlace de la URL de redireccionamiento. En mi caso, pasé la URL http: //localhost/youtube/callback.php.
  • Haga clic en el botón Crear. Obtendrá la identificación del cliente y el secreto del cliente en la ventana emergente. Copie estos detalles. Lo necesitaremos en un momento.

Cómo usar la API de YouTube para cargar videos en el canal de YouTube

Configurar una configuración básica

La carga de videos mediante la API de YouTube requiere que cree un token de acceso. Un token de acceso no es más que un identificador de una cuenta de YouTube.

Pero, el token de acceso expira después de un tiempo. Una vez que expire el token de acceso, obtendrá el error de ‘Acceso no autorizado’. La solución para esto es ejecutar el proceso de autorización nuevamente o regenerar el token de acceso en segundo plano y completar el proceso de carga. En este artículo, busco una segunda solución. Regeneraremos el token de acceso si expira en segundo plano sin interrumpir el proceso de carga. Al hacerlo, no es necesario que realice el proceso de autorización una y otra vez.

Dicho esto, primero debe autorizar la cuenta para generar un token de acceso. Voy a usar la biblioteca Hybridauth para la autorización y para generar el token de acceso. Abra su composer.jsonarchivo y agregue las siguientes líneas en él.

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

Tenga en cuenta que YouTube es un producto de Google y la API de YouTube no es más que una API de Google. Es por eso que estamos usando la biblioteca "google / apiclient". A continuación, ejecute el siguiente comando para la instalación de estas bibliotecas.

composer install

Configuración de la base de datos

En cada llamada a la API, debemos enviar un token de acceso, así que guárdelo en la base de datos. Cree un ‘token’ de tabla en su base de datos utilizando la siguiente consulta.

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

En una parte posterior de este artículo, debemos interactuar con esta tabla de ‘token’ para obtener y actualizar los detalles del token. Eso requiere escribir una conexión a la base de datos y algunas consultas. Cree un archivo class-db.phpy agréguele el siguiente código.

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)");
        }
    }
}

Pase las credenciales de su base de datos en el archivo anterior. Aquí supongo que desea utilizar una sola cuenta de YouTube. Si tiene la intención de utilizar varias cuentas, modifique las consultas anteriores según sus requisitos.

Generar token de acceso

Ha instalado las bibliotecas y ha creado una tabla para almacenar el token. Ahora hagamos el proceso de autorización, tomemos el token de acceso y almacénelo en la tabla ‘token’.

Cree un config.phparchivo y escriba una configuración según las pautas de la biblioteca 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 );

Reemplace los marcadores de posición con los valores reales de sus credenciales de Google. Agregue la misma URL de devolución de llamada que pasó mientras creaba la aplicación de consola. Significa que cuando el usuario completa el proceso de autorización, lo redireccionará al callback.phparchivo.

En el callback.phparchivo, obtendremos los detalles del token de acceso y los almacenaremos en la base de datos.

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() ;
}

Diríjase a su navegador y ejecute YOUR_DOMAIN_URL / callback.php, lo redireccionará a la cuenta de Google, completará el proceso de autorización y debería ver el mensaje de éxito. Verifique el ‘token’ de la tabla de la base de datos. Debería tener los detalles de su token almacenados. Y eso significa que está listo para subir un video a su canal de YouTube.

Cargar video en el canal de YouTube usando la API de YouTube

Obtuvo el token de acceso que se utilizará para cargar el video en el canal de YouTube a través de la API de Google. Pero como mencioné antes, el token de acceso caducaría después de un tiempo y lo regeneraremos en segundo plano sin solicitar el proceso de autorización nuevamente.

Podemos hacerlo usando ‘referh_token’. Si observa la columna ‘access_token’ en la tabla, verá que también contiene la entrada de ‘refresh_token’. Usando el ‘refresh_token’ llamamos al punto final ‘/ o / oauth2 / token’ y regeneramos el token de acceso en segundo plano.

A continuación, necesita el formulario HTML a través del cual puede navegar por el video y enviarlo al servidor para cargarlo. Creemos un formulario HTML simple de la siguiente manera.

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>

El formulario tiene 3 campos: título, descripción y archivo. Al enviar este formulario, el video debe cargarse en su canal de YouTube junto con el título y la descripción proporcionados.

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.
        }
    }
}
?>

El código anterior toma un archivo de video del formulario HTML y lo carga a través de API en su canal de YouTube. Si su token de acceso ha expirado, regenera el token en segundo plano y continúa el proceso sin romperlo.

Cargar una miniatura personalizada en un video de YouTube

Si está creando una aplicación personalizada que administra videos de YouTube, probablemente esté buscando cargar una miniatura en el video de YouTube. Para cargar una miniatura personalizada, los usuarios deben verificar su número de teléfono con su cuenta de YouTube. Visita el enlacehttps://www.youtube.com/features y realice la verificación del número de teléfono.

Una vez que haya verificado el número de teléfono, puede usar nuestro formulario y código anteriores con pequeñas modificaciones y configurar la miniatura personalizada para el video subido. Primero, agregue el campo del formulario que permite cargar imágenes. El tamaño de miniatura de YouTube recomendado es 1280x720.

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

En el envío del formulario, hemos creado una matriz $arr_dataque contiene todos los datos del formulario. Agregue el nuevo par de imagen a la matriz de la $arr_datasiguiente manera.

$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
);

A continuación, después de que nuestro código cargue el video en YouTube, tenemos que tomar la identificación del video y asignar una miniatura personalizada al video.

<?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'];

Eliminar video del canal de YouTube usando la API de YouTube

Es posible que también desee un código para eliminar videos usando la API de YouTube. Para eliminar un video, necesita un alcance adicional https://www.googleapis.com/auth/youtubeque ya he incluido anteriormente en un archivo de configuración. Significa que el token de acceso generado siguiendo los pasos anteriores se puede usar para eliminar un video.

A continuación se muestra el código que eliminará un video de su canal de 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.
        }
    }
}

¡Eso es! Espero que sepas cómo subir un video al canal de YouTube usando la API de YouTube. Me gustaría escuchar sus pensamientos o sugerencias en la sección de comentarios a continuación.

Artículos relacionados

Fuente de grabación: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More