Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Comment utiliser l’API YouTube pour télécharger une vidéo sur la chaîne YouTube

377

Tout le monde connaît YouTube. YouTube est la première plateforme de partage de vidéos au monde. Nous pouvons utiliser YouTube pour héberger nos vidéos. Cela nous permet d’économiser beaucoup d’espace sur le serveur et on peut facilement intégrer la vidéo YouTube sur le site Web. N’importe qui peut télécharger la vidéo sur YouTube. Tout ce que vous avez à faire est de vous connecter à votre compte YouTube et de télécharger la vidéo. Processus simple et direct. Mais que se passe-t-il si quelqu’un a besoin de télécharger des vidéos via l’API YouTube sur une chaîne YouTube ? C’est possible? Oui c’est possible. Dans cet article, nous étudions comment utiliser l’API YouTube pour télécharger une vidéo en utilisant PHP.

Enregistrer une application et créer des informations d’identification

Pour commencer avec l’API YouTube, vous avez besoin d’un compte Google. Une fois que vous avez un compte Google, enregistrez votre application et obtenez les clés API.

Vous trouverez ci-dessous les étapes pour enregistrer une application et obtenir vos clés API.

  • Accédez à la console développeur de Google https://console.developers.google.com
  • Créer un nouveau projet. Vous pouvez également sélectionner un projet existant.
  • Tapez un nom de votre projet. Google Console créera un ID de projet unique.
  • Après avoir créé un projet, il apparaîtra en haut de la barre latérale gauche.
  • Cliquez sur Bibliothèque. Vous verrez la liste des API Google.
  • Activez l’API de données YouTube.
  • Cliquez sur les informations d’identification. Sélectionnez Oauth Client id sous Créer des informations d’identification. Sélectionnez le bouton radio pour l’application Web.
  • Donnez le Nom. Sous Origines JavaScript autorisées, saisissez l’URL de votre domaine. Dans les URI de redirection autorisés, indiquez le lien de l’URL de redirection. Dans mon cas, j’ai passé l’URL http://localhost/youtube/callback.php.
  • Cliquez sur le bouton Créer. Vous obtiendrez l’ID client et le secret client dans la fenêtre contextuelle. Copiez ces détails. Nous en aurons besoin dans un instant.

Comment utiliser l'API YouTube pour télécharger une vidéo sur la chaîne YouTube

Configurer une configuration de base

Pour télécharger une vidéo à l’aide de l’API YouTube, vous devez créer un jeton d’accès. Un jeton d’accès n’est rien d’autre qu’un identifiant d’un compte YouTube.

Mais, le jeton d’accès expire après un certain temps. Une fois le jeton d’accès expiré, vous obtiendrez l’erreur « Accès non autorisé ». La solution consiste à exécuter à nouveau le processus d’autorisation ou à régénérer le jeton d’accès en arrière-plan et à terminer le processus de téléchargement. Dans cet article, je vais pour une deuxième solution. Nous allons régénérer le jeton d’accès s’il a expiré en arrière-plan sans interrompre le processus de téléchargement. Ce faisant, vous n’avez pas besoin de refaire le processus d’autorisation encore et encore.

Cela étant dit, vous devez d’abord autoriser le compte à générer un jeton d’accès. Je vais utiliser la bibliothèque Hybridauth pour l’autorisation et pour générer un jeton d’accès. Ouvrez votre composer.jsonfichier et ajoutez-y les lignes ci-dessous.

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

Gardez une note YouTube est le produit de Google et l’API YouTube n’est rien d’autre qu’une API Google. C’est pourquoi nous utilisons la bibliothèque "google/apiclient". Ensuite, exécutez la commande ci-dessous pour l’installation de ces bibliothèques.

composer install

Configuration de la base de données

À chaque appel d’API, nous devons envoyer un jeton d’accès, donc stockez-le dans la base de données. Créez une table ‘token’ dans votre base de données à l’aide de la requête ci-dessous.

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

Dans la suite de cet article, nous devons interagir avec cette table de « jeton » pour récupérer et mettre à jour les détails du jeton. Cela nécessite l’écriture d’une connexion à la base de données et quelques requêtes. Créez un fichier class-db.phpet ajoutez-y le code suivant.

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

Transmettez vos identifiants de base de données dans le fichier ci-dessus. Ici, je suppose que vous souhaitez utiliser un seul compte YouTube. Si vous avez l’intention d’utiliser plusieurs comptes, modifiez les requêtes ci-dessus selon vos besoins.

Générer un jeton d’accès

Vous avez installé les bibliothèques et créé une table pour stocker le jeton. Faisons maintenant le processus d’autorisation, récupérons le jeton d’accès et stockons-le dans la table ‘token’.

Créez un config.phpfichier et écrivez une configuration conformément aux directives de la bibliothèque 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 );

Remplacez les espaces réservés par les valeurs réelles de vos informations d’identification Google. Ajoutez la même URL de rappel que celle que vous avez transmise lors de la création de l’application console. Cela signifie que lorsque l’utilisateur termine le processus d’autorisation, il sera redirigé vers le callback.phpfichier.

Dans le callback.phpfichier, nous allons récupérer les détails du jeton d’accès et les stocker dans la base de données.

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

Rendez-vous sur votre navigateur et exécutez YOUR_DOMAIN_URL/callback.php, vous serez redirigé vers le compte Google, terminerez le processus d’autorisation et vous devriez voir le message de réussite. Vérifiez la table de base de données ‘token’. Il devrait avoir les détails de votre jeton stockés. Et cela signifie que vous êtes prêt à télécharger une vidéo sur votre chaîne YouTube.

Télécharger une vidéo sur la chaîne YouTube à l’aide de l’API YouTube

Vous avez le jeton d’accès qui sera utilisé pour télécharger la vidéo sur la chaîne YouTube via l’API Google. Mais comme je l’ai mentionné précédemment, le jeton d’accès expirerait après un certain temps et nous le régénérerons en arrière-plan sans demander à nouveau le processus d’autorisation.

Nous pouvons le faire en utilisant ‘refersh_token’. Si vous regardez la colonne ‘access_token’ dans le tableau, vous verrez qu’elle contient également l’entrée ‘refresh_token’. En utilisant le « refresh_token », nous appelons le point de terminaison « /o/oauth2/token » et régénérons le jeton d’accès en arrière-plan.

Ensuite, vous avez besoin du formulaire HTML à travers lequel vous pouvez parcourir la vidéo et l’envoyer au serveur pour la télécharger. Créons un formulaire HTML simple comme suit.

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>

Le formulaire comporte 3 champs: titre, description et fichier. Lors de la soumission de ce formulaire, la vidéo doit être téléchargée sur votre chaîne YouTube avec le titre et la description fournis.

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

Le code ci-dessus prend un fichier vidéo du formulaire HTML et le télécharge via l’API sur votre chaîne YouTube. Si votre jeton d’accès a expiré, il régénère le jeton en arrière-plan et poursuit le processus sans le casser.

Télécharger une vignette personnalisée sur une vidéo YouTube

Si vous créez une application personnalisée qui gère les vidéos YouTube, vous cherchez probablement à télécharger une vignette sur une vidéo YouTube. Pour télécharger une miniature personnalisée, les utilisateurs doivent vérifier leur numéro de téléphone avec leur compte YouTube. Visitez le lienhttps://www.youtube.com/features et procédez à la vérification du numéro de téléphone.

Une fois que vous avez vérifié le numéro de téléphone, vous pouvez utiliser notre formulaire et notre code précédents avec de petites modifications et définir la vignette personnalisée pour la vidéo téléchargée. Tout d’abord, ajoutez le champ de formulaire qui permet de télécharger des images. La taille de vignette YouTube recommandée est 1280x720.

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

Lors de la soumission du formulaire, nous avons construit un tableau $arr_dataqui contient toutes les données du formulaire. Ajoutez la nouvelle paire pour l’image au tableau $arr_datacomme suit.

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

Ensuite, une fois que notre code a téléchargé la vidéo sur YouTube, nous devons prendre l’identifiant de la vidéo et attribuer une vignette personnalisée à la vidéo.

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

Supprimer la vidéo de la chaîne YouTube à l’aide de l’API YouTube

Vous voudrez peut-être également un code pour supprimer des vidéos à l’aide de l’API YouTube. Pour supprimer une vidéo, vous avez besoin d’une portée supplémentaire https://www.googleapis.com/auth/youtubeque j’ai déjà incluse ci-dessus dans un fichier de configuration. Cela signifie que le jeton d’accès généré en suivant les étapes ci-dessus peut être utilisé pour supprimer une vidéo.

Vous trouverez ci-dessous le code qui supprimera une vidéo de votre chaîne 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.
        }
    }
}

C’est ça! J’espère que vous avez appris comment mettre en ligne une vidéo sur la chaîne YouTube à l’aide de l’API YouTube. J’aimerais entendre vos pensées ou vos suggestions dans la section des commentaires ci-dessous.

Articles Liés

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails