{"id":25559,"date":"2021-06-08T17:11:00","date_gmt":"2021-06-08T14:11:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=25559"},"modified":"2021-10-18T02:08:01","modified_gmt":"2021-10-17T23:08:01","slug":"comment-utiliser-l-api-youtube-pour-telecharger-une-video-sur-la-chaine-youtube","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fr\/comment-utiliser-l-api-youtube-pour-telecharger-une-video-sur-la-chaine-youtube\/","title":{"rendered":"Comment utiliser l&rsquo;API YouTube pour t\u00e9l\u00e9charger une vid\u00e9o sur la cha\u00eene YouTube"},"content":{"rendered":"<p>Tout le monde conna\u00eet YouTube. YouTube est la premi\u00e8re plateforme de partage de vid\u00e9os au monde. Nous pouvons utiliser YouTube pour h\u00e9berger nos vid\u00e9os. Cela nous permet d&rsquo;\u00e9conomiser beaucoup d&rsquo;espace sur le serveur et on peut facilement int\u00e9grer la vid\u00e9o YouTube sur le site Web. N&rsquo;importe qui peut t\u00e9l\u00e9charger la vid\u00e9o sur YouTube. Tout ce que vous avez \u00e0 faire est de vous connecter \u00e0 votre compte YouTube et de t\u00e9l\u00e9charger la vid\u00e9o. Processus simple et direct. Mais que se passe-t-il si quelqu&rsquo;un a besoin de t\u00e9l\u00e9charger des vid\u00e9os via l&rsquo;API YouTube sur une cha\u00eene YouTube\u00a0? C&rsquo;est possible? Oui c&rsquo;est possible. Dans cet article, nous \u00e9tudions comment utiliser l&rsquo;API YouTube pour t\u00e9l\u00e9charger une vid\u00e9o en utilisant PHP.<\/p>\n<h3>Enregistrer une application et cr\u00e9er des informations d&rsquo;identification<\/h3>\n<p>Pour commencer avec l&rsquo;API YouTube, vous avez besoin d&rsquo;un compte Google. Une fois que vous avez un compte Google, enregistrez votre application et obtenez les cl\u00e9s API.<\/p>\n<p>Vous trouverez ci-dessous les \u00e9tapes pour enregistrer une application et obtenir vos cl\u00e9s API.<\/p>\n<ul>\n<li>Acc\u00e9dez \u00e0 la console d\u00e9veloppeur de Google <a href=\"https:\/\/console.developers.google.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><a href=\"https:\/\/console.developers.google.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/console.developers.google.com<\/a><\/li>\n<li>Cr\u00e9er un nouveau projet. Vous pouvez \u00e9galement s\u00e9lectionner un projet existant.<\/li>\n<li>Tapez un nom de votre projet. Google Console cr\u00e9era un ID de projet unique.<\/li>\n<li>Apr\u00e8s avoir cr\u00e9\u00e9 un projet, il appara\u00eetra en haut de la barre lat\u00e9rale gauche.<\/li>\n<li>Cliquez sur Biblioth\u00e8que. Vous verrez la liste des API Google.<\/li>\n<li>Activez l&rsquo;API de donn\u00e9es YouTube.<\/li>\n<li>Cliquez sur les informations d&rsquo;identification. S\u00e9lectionnez Oauth Client id sous Cr\u00e9er des informations d&rsquo;identification. S\u00e9lectionnez le bouton radio pour l&rsquo;application Web.<\/li>\n<li>Donnez le Nom. Sous Origines JavaScript autoris\u00e9es, saisissez l&rsquo;URL de votre domaine. Dans les URI de redirection autoris\u00e9s, indiquez le lien de l&rsquo;URL de redirection. Dans mon cas, j&rsquo;ai pass\u00e9 l&rsquo;URL <a href=\"http:\/\/localhost\/youtube\/callback.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">http:\/\/localhost\/youtube\/callback.php<\/a>.<\/li>\n<li>Cliquez sur le bouton Cr\u00e9er. Vous obtiendrez l&rsquo;ID client et le secret client dans la fen\u00eatre contextuelle. Copiez ces d\u00e9tails. Nous en aurons besoin dans un instant.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20298-6081da1616456.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20298-6081da1616456.png\" alt=\"Comment utiliser l&#039;API YouTube pour t\u00e9l\u00e9charger une vid\u00e9o sur la cha\u00eene YouTube\" ><\/a><\/p>\n<h3>Configurer une configuration de base<\/h3>\n<p>Pour t\u00e9l\u00e9charger une vid\u00e9o \u00e0 l&rsquo;aide de l&rsquo;API YouTube, vous devez cr\u00e9er un jeton d&rsquo;acc\u00e8s. Un jeton d&rsquo;acc\u00e8s n&rsquo;est rien d&rsquo;autre qu&rsquo;un identifiant d&rsquo;un compte YouTube.<\/p>\n<p>Mais, le jeton d&rsquo;acc\u00e8s expire apr\u00e8s un certain temps. Une fois le jeton d&rsquo;acc\u00e8s expir\u00e9, vous obtiendrez l&rsquo;erreur \u00ab\u00a0Acc\u00e8s non autoris\u00e9\u00a0\u00bb. La solution consiste \u00e0 ex\u00e9cuter \u00e0 nouveau le processus d&rsquo;autorisation ou \u00e0 r\u00e9g\u00e9n\u00e9rer le jeton d&rsquo;acc\u00e8s en arri\u00e8re-plan et \u00e0 terminer le processus de t\u00e9l\u00e9chargement. Dans cet article, je vais pour une deuxi\u00e8me solution. Nous allons r\u00e9g\u00e9n\u00e9rer le jeton d&rsquo;acc\u00e8s s&rsquo;il a expir\u00e9 en arri\u00e8re-plan sans interrompre le processus de t\u00e9l\u00e9chargement. Ce faisant, vous n&rsquo;avez pas besoin de refaire le processus d&rsquo;autorisation encore et encore.<\/p>\n<p>Cela \u00e9tant dit, vous devez d&rsquo;abord autoriser le compte \u00e0 g\u00e9n\u00e9rer un jeton d&rsquo;acc\u00e8s. Je vais utiliser la biblioth\u00e8que <a href=\"https:\/\/hybridauth.github.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Hybridauth<\/a> pour l&rsquo;autorisation et pour g\u00e9n\u00e9rer un jeton d&rsquo;acc\u00e8s. Ouvrez votre <code>composer.json<\/code>fichier et ajoutez-y les lignes ci-dessous.<\/p>\n<pre><code>{\n\u00a0\u00a0\u00a0\u00a0\"require\": {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"google\/apiclient\": \"2.0\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"hybridauth\/hybridauth\": \"~3.0\"\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Gardez une note YouTube est le produit de Google et l&rsquo;API YouTube n&rsquo;est rien d&rsquo;autre qu&rsquo;une API Google. C&rsquo;est pourquoi nous utilisons la biblioth\u00e8que &quot;google\/apiclient&quot;. Ensuite, ex\u00e9cutez la commande ci-dessous pour l&rsquo;installation de ces biblioth\u00e8ques.<\/p>\n<pre><code>composer install<\/code><\/pre>\n<h4>Configuration de la base de donn\u00e9es<\/h4>\n<p>\u00c0 chaque appel d&rsquo;API, nous devons envoyer un jeton d&rsquo;acc\u00e8s, donc stockez-le dans la base de donn\u00e9es. Cr\u00e9ez une table &lsquo;token&rsquo; dans votre base de donn\u00e9es \u00e0 l&rsquo;aide de la requ\u00eate ci-dessous.<\/p>\n<pre><code>CREATE TABLE `token` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`access_token` text NOT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4<\/code><\/pre>\n<p>Dans la suite de cet article, nous devons interagir avec cette table de \u00ab\u00a0jeton\u00a0\u00bb pour r\u00e9cup\u00e9rer et mettre \u00e0 jour les d\u00e9tails du jeton. Cela n\u00e9cessite l&rsquo;\u00e9criture d&rsquo;une connexion \u00e0 la base de donn\u00e9es et quelques requ\u00eates. Cr\u00e9ez un fichier <code>class-db.php<\/code>et ajoutez-y le code suivant.<\/p>\n<p><strong>classe-db.php<\/strong><\/p>\n<pre><code>&lt;?php\nclass DB {\n\u00a0\u00a0\u00a0\u00a0private $dbHost\u00a0\u00a0\u00a0\u00a0 = \"DB_HOST\";\n\u00a0\u00a0\u00a0\u00a0private $dbUsername = \"DB_USERNAME\";\n\u00a0\u00a0\u00a0\u00a0private $dbPassword = \"DB_PASSWORD\";\n\u00a0\u00a0\u00a0\u00a0private $dbName\u00a0\u00a0\u00a0\u00a0 = \"DB_NAME\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function __construct(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(!isset($this-&gt;db)){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Connect to the database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$conn = new mysqli($this-&gt;dbHost, $this-&gt;dbUsername, $this-&gt;dbPassword, $this-&gt;dbName);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($conn-&gt;connect_error){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0die(\"Failed to connect with MySQL: \". $conn-&gt;connect_error);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}else{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db = $conn;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function is_table_empty() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $this-&gt;db-&gt;query(\"SELECT id FROM token\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($result-&gt;num_rows) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return false;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return true;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_access_token() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$sql = $this-&gt;db-&gt;query(\"SELECT access_token FROM token\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $sql-&gt;fetch_assoc();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return json_decode($result['access_token']);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_refersh_token() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $this-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $result-&gt;refresh_token;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function update_access_token($token) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($this-&gt;is_table_empty()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db-&gt;query(\"INSERT INTO token(access_token) VALUES('$token')\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;db-&gt;query(\"UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Transmettez vos identifiants de base de donn\u00e9es dans le fichier ci-dessus. Ici, je suppose que vous souhaitez utiliser un seul compte YouTube. Si vous avez l&rsquo;intention d&rsquo;utiliser plusieurs comptes, modifiez les requ\u00eates ci-dessus selon vos besoins.<\/p>\n<h3>G\u00e9n\u00e9rer un jeton d&rsquo;acc\u00e8s<\/h3>\n<p>Vous avez install\u00e9 les biblioth\u00e8ques et cr\u00e9\u00e9 une table pour stocker le jeton. Faisons maintenant le processus d&rsquo;autorisation, r\u00e9cup\u00e9rons le jeton d&rsquo;acc\u00e8s et stockons-le dans la table &lsquo;token&rsquo;.<\/p>\n<p>Cr\u00e9ez un <code>config.php<\/code>fichier et \u00e9crivez une configuration conform\u00e9ment aux directives de la biblioth\u00e8que HybridAuth.<\/p>\n<p><strong>config.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\nrequire_once 'class-db.php';\n\u00a0\ndefine('GOOGLE_CLIENT_ID', 'PASTE_CLIENT_ID_HERE');\ndefine('GOOGLE_CLIENT_SECRET', 'PASTE_CLIENT_SECRET_HERE');\n\u00a0\n$config = [\n\u00a0\u00a0\u00a0\u00a0'callback' =&gt; 'YOUR_DOMAIN_URL\/callback.php',\n\u00a0\u00a0\u00a0\u00a0'keys'\u00a0\u00a0\u00a0\u00a0 =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'id' =&gt; GOOGLE_CLIENT_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; GOOGLE_CLIENT_SECRET\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0'scope'\u00a0\u00a0\u00a0 =&gt; 'https:\/\/www.googleapis.com\/auth\/youtube https:\/\/www.googleapis.com\/auth\/youtube.upload',\n\u00a0\u00a0\u00a0\u00a0'authorize_url_parameters' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'approval_prompt' =&gt; 'force', \/\/ to pass only when you need to acquire a new refresh token.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access_type' =&gt; 'offline'\n\u00a0\u00a0\u00a0\u00a0]\n];\n\u00a0\n$adapter = new HybridauthProviderGoogle( $config );<\/code><\/pre>\n<p>Remplacez les espaces r\u00e9serv\u00e9s par les valeurs r\u00e9elles de vos informations d&rsquo;identification Google. Ajoutez la m\u00eame URL de rappel que celle que vous avez transmise lors de la cr\u00e9ation de l&rsquo;application console. Cela signifie que lorsque l&rsquo;utilisateur termine le processus d&rsquo;autorisation, il sera redirig\u00e9 vers le <code>callback.php<\/code>fichier.<\/p>\n<p>Dans le <code>callback.php<\/code>fichier, nous allons r\u00e9cup\u00e9rer les d\u00e9tails du jeton d&rsquo;acc\u00e8s et les stocker dans la base de donn\u00e9es.<\/p>\n<p><strong>rappel.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0$adapter-&gt;authenticate();\n\u00a0\u00a0\u00a0\u00a0$token = $adapter-&gt;getAccessToken();\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\u00a0\u00a0\u00a0if($db-&gt;is_table_empty()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token(json_encode($token));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Access token inserted successfully.\";\n\u00a0\u00a0\u00a0\u00a0}\n}\ncatch( Exception $e ){\n\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage() ;\n}<\/code><\/pre>\n<p>Rendez-vous sur votre navigateur et ex\u00e9cutez YOUR_DOMAIN_URL\/callback.php, vous serez redirig\u00e9 vers le compte Google, terminerez le processus d&rsquo;autorisation et vous devriez voir le message de r\u00e9ussite. V\u00e9rifiez la table de base de donn\u00e9es &lsquo;token&rsquo;. Il devrait avoir les d\u00e9tails de votre jeton stock\u00e9s. Et cela signifie que vous \u00eates pr\u00eat \u00e0 t\u00e9l\u00e9charger une vid\u00e9o sur votre cha\u00eene YouTube.<\/p>\n<h3>T\u00e9l\u00e9charger une vid\u00e9o sur la cha\u00eene YouTube \u00e0 l&rsquo;aide de l&rsquo;API YouTube<\/h3>\n<p>Vous avez le jeton d&rsquo;acc\u00e8s qui sera utilis\u00e9 pour t\u00e9l\u00e9charger la vid\u00e9o sur la cha\u00eene YouTube via l&rsquo;API Google. Mais comme je l&rsquo;ai mentionn\u00e9 pr\u00e9c\u00e9demment, le jeton d&rsquo;acc\u00e8s expirerait apr\u00e8s un certain temps et nous le r\u00e9g\u00e9n\u00e9rerons en arri\u00e8re-plan sans demander \u00e0 nouveau le processus d&rsquo;autorisation.<\/p>\n<p>Nous pouvons le faire en utilisant &lsquo;refersh_token&rsquo;. Si vous regardez la colonne &lsquo;access_token&rsquo; dans le tableau, vous verrez qu&rsquo;elle contient \u00e9galement l&rsquo;entr\u00e9e &lsquo;refresh_token&rsquo;. En utilisant le \u00ab\u00a0refresh_token\u00a0\u00bb, nous appelons le point de terminaison \u00ab\u00a0\/o\/oauth2\/token\u00a0\u00bb et r\u00e9g\u00e9n\u00e9rons le jeton d&rsquo;acc\u00e8s en arri\u00e8re-plan.<\/p>\n<p>Ensuite, vous avez besoin du formulaire HTML \u00e0 travers lequel vous pouvez parcourir la vid\u00e9o et l&rsquo;envoyer au serveur pour la t\u00e9l\u00e9charger. Cr\u00e9ons un formulaire HTML simple comme suit.<\/p>\n<p><strong>index.php<\/strong><\/p>\n<pre><code>&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"text\" name=\"title\" placeholder=\"Enter Video Title\" \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;textarea name=\"summary\" cols=\"30\" rows=\"10\" placeholder=\"Video description\"&gt;&lt;\/textarea&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"file\" name=\"file\"\/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Submit\" \/&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Le formulaire comporte 3 champs: titre, description et fichier. Lors de la soumission de ce formulaire, la vid\u00e9o doit \u00eatre t\u00e9l\u00e9charg\u00e9e sur votre cha\u00eene YouTube avec le titre et la description fournis.<\/p>\n<p><strong>index.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\nif (isset($_POST['submit'])) {\n\u00a0\u00a0\u00a0\u00a0$arr_data = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'title' =&gt; $_POST['title'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'summary' =&gt; $_POST['summary'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'video_path' =&gt; $_FILES['file']['tmp_name'],\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0upload_video_on_youtube($arr_data);\n}\n\u00a0\nfunction upload_video_on_youtube($arr_data) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$client = new Google_Client();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$arr_token = (array) $db-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0$accessToken = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access_token' =&gt; $arr_token['access_token'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'expires_in' =&gt; $arr_token['expires_in'],\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$client-&gt;setAccessToken($accessToken);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$service = new Google_Service_YouTube($client);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$video = new Google_Service_YouTube_Video();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$videoSnippet = new Google_Service_YouTube_VideoSnippet();\n\u00a0\u00a0\u00a0\u00a0$videoSnippet-&gt;setDescription($arr_data['summary']);\n\u00a0\u00a0\u00a0\u00a0$videoSnippet-&gt;setTitle($arr_data['title']);\n\u00a0\u00a0\u00a0\u00a0$video-&gt;setSnippet($videoSnippet);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$videoStatus = new Google_Service_YouTube_VideoStatus();\n\u00a0\u00a0\u00a0\u00a0$videoStatus-&gt;setPrivacyStatus('public');\n\u00a0\u00a0\u00a0\u00a0$video-&gt;setStatus($videoStatus);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $service-&gt;videos-&gt;insert(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'snippet,status',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$video,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'data' =&gt; file_get_contents($arr_data['video_path']),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'mimeType' =&gt; 'video\/*',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'uploadType' =&gt; 'multipart'\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Video uploaded successfully. Video id is \". $response-&gt;id;\n\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if( 401 == $e-&gt;getCode()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$refresh_token = $db-&gt;get_refersh_token();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/accounts.google.com']);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/o\/oauth2\/token', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"grant_type\" =&gt; \"refresh_token\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"refresh_token\" =&gt; $refresh_token,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_id\" =&gt; GOOGLE_CLIENT_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_secret\" =&gt; GOOGLE_CLIENT_SECRET,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data = (array) json_decode($response-&gt;getBody());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data['refresh_token'] = $refresh_token;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token(json_encode($data));\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0upload_video_on_youtube($arr_data);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/echo $e-&gt;getMessage(); \/\/print the error just in case your video is not uploaded.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n?&gt;<\/code><\/pre>\n<p>Le code ci-dessus prend un fichier vid\u00e9o du formulaire HTML et le t\u00e9l\u00e9charge via l&rsquo;API sur votre cha\u00eene YouTube. Si votre jeton d&rsquo;acc\u00e8s a expir\u00e9, il r\u00e9g\u00e9n\u00e8re le jeton en arri\u00e8re-plan et poursuit le processus sans le casser.<\/p>\n<h3>T\u00e9l\u00e9charger une vignette personnalis\u00e9e sur une vid\u00e9o YouTube<\/h3>\n<p>Si vous cr\u00e9ez une application personnalis\u00e9e qui g\u00e8re les vid\u00e9os YouTube, vous cherchez probablement \u00e0 t\u00e9l\u00e9charger une vignette sur une vid\u00e9o YouTube. Pour t\u00e9l\u00e9charger une miniature personnalis\u00e9e, les utilisateurs doivent v\u00e9rifier leur num\u00e9ro de t\u00e9l\u00e9phone avec leur compte YouTube. Visitez le lien<a href=\"https:\/\/www.youtube.com\/features\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><a href=\"https:\/\/www.youtube.com\/features\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/www.youtube.com\/features<\/a> et proc\u00e9dez \u00e0 la v\u00e9rification du num\u00e9ro de t\u00e9l\u00e9phone.<\/p>\n<p>Une fois que vous avez v\u00e9rifi\u00e9 le num\u00e9ro de t\u00e9l\u00e9phone, vous pouvez utiliser notre formulaire et notre code pr\u00e9c\u00e9dents avec de petites modifications et d\u00e9finir la vignette personnalis\u00e9e pour la vid\u00e9o t\u00e9l\u00e9charg\u00e9e. Tout d&rsquo;abord, ajoutez le champ de formulaire qui permet de t\u00e9l\u00e9charger des images. La taille de vignette YouTube recommand\u00e9e est <code>1280x720<\/code>.<\/p>\n<pre><code>&lt;p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;label&gt;Image&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"image\" accept=\"image\/*\" \/&gt;\n&lt;\/p&gt;<\/code><\/pre>\n<p>Lors de la soumission du formulaire, nous avons construit un tableau <code>$arr_data<\/code>qui contient toutes les donn\u00e9es du formulaire. Ajoutez la nouvelle paire pour l&rsquo;image au tableau <code>$arr_data<\/code>comme suit.<\/p>\n<pre><code>$arr_data = array(\n\u00a0\u00a0\u00a0\u00a0'title' =&gt; $_POST['title'],\n\u00a0\u00a0\u00a0\u00a0'summary' =&gt; $_POST['summary'],\n\u00a0\u00a0\u00a0\u00a0'video_path' =&gt; $_FILES['file']['tmp_name'],\n\u00a0\u00a0\u00a0\u00a0'image_path' =&gt; $_FILES['image']['tmp_name'], \/\/ here we are passing image\n);<\/code><\/pre>\n<p>Ensuite, une fois que notre code a t\u00e9l\u00e9charg\u00e9 la vid\u00e9o sur YouTube, nous devons prendre l&rsquo;identifiant de la vid\u00e9o et attribuer une vignette personnalis\u00e9e \u00e0 la vid\u00e9o.<\/p>\n<pre><code>&lt;?php\n...\n...\necho \"Video uploaded successfully. Video id is \". $response-&gt;id;\n\u00a0\n\/\/upload thumbnail\n$videoId = $response-&gt;id;\n\u00a0\n$chunkSizeBytes = 1 * 1024 * 1024;\n\u00a0\n$client-&gt;setDefer(true);\n\u00a0\n$setRequest = $service-&gt;thumbnails-&gt;set($videoId);\n\u00a0\n$media = new Google_Http_MediaFileUpload(\n\u00a0\u00a0\u00a0\u00a0$client,\n\u00a0\u00a0\u00a0\u00a0$setRequest,\n\u00a0\u00a0\u00a0\u00a0'image\/png',\n\u00a0\u00a0\u00a0\u00a0null,\n\u00a0\u00a0\u00a0\u00a0true,\n\u00a0\u00a0\u00a0\u00a0$chunkSizeBytes\n);\n$imagePath = $arr_data['image_path'];\n$media-&gt;setFileSize(filesize($imagePath));\n\u00a0\n$status = false;\n$handle = fopen($imagePath, \"rb\");\n\u00a0\nwhile (!$status &amp;&amp; !feof($handle)) {\n\u00a0\u00a0\u00a0\u00a0$chunk\u00a0 = fread($handle, $chunkSizeBytes);\n\u00a0\u00a0\u00a0\u00a0$status = $media-&gt;nextChunk($chunk);\n}\n\u00a0\nfclose($handle);\n\u00a0\n$client-&gt;setDefer(false);\necho \"&lt;br&gt;Thumbanil: \". $status['items'][0]['default']['url'];<\/code><\/pre>\n<h3>Supprimer la vid\u00e9o de la cha\u00eene YouTube \u00e0 l&rsquo;aide de l&rsquo;API YouTube<\/h3>\n<p>Vous voudrez peut-\u00eatre \u00e9galement un code pour supprimer des vid\u00e9os \u00e0 l&rsquo;aide de l&rsquo;API YouTube. Pour supprimer une vid\u00e9o, vous avez besoin d&rsquo;une port\u00e9e suppl\u00e9mentaire <code>https:\/\/www.googleapis.com\/auth\/youtube<\/code>que j&rsquo;ai d\u00e9j\u00e0 incluse ci-dessus dans un fichier de configuration. Cela signifie que le jeton d&rsquo;acc\u00e8s g\u00e9n\u00e9r\u00e9 en suivant les \u00e9tapes ci-dessus peut \u00eatre utilis\u00e9 pour supprimer une vid\u00e9o.<\/p>\n<p>Vous trouverez ci-dessous le code qui supprimera une vid\u00e9o de votre cha\u00eene YouTube.<\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\ndelete_video('VIDEO_ID_HERE');\n\u00a0\nfunction delete_video($id) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$client = new Google_Client();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$db = new DB();\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$arr_token = (array) $db-&gt;get_access_token();\n\u00a0\u00a0\u00a0\u00a0$accessToken = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'access_token' =&gt; $arr_token['access_token'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'expires_in' =&gt; $arr_token['expires_in'],\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$client-&gt;setAccessToken($accessToken);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$service = new Google_Service_YouTube($client);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$service-&gt;videos-&gt;delete($id);\n\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if( 401 == $e-&gt;getCode()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$refresh_token = $db-&gt;get_refersh_token();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$client = new GuzzleHttpClient(['base_uri' =&gt; 'https:\/\/accounts.google.com']);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/o\/oauth2\/token', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"grant_type\" =&gt; \"refresh_token\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"refresh_token\" =&gt; $refresh_token,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_id\" =&gt; GOOGLE_CLIENT_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_secret\" =&gt; GOOGLE_CLIENT_SECRET,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data = (array) json_decode($response-&gt;getBody());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data['refresh_token'] = $refresh_token;\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;update_access_token(json_encode($data));\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0delete_video($id);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/echo $e-&gt;getMessage(); \/\/print the error just in case your video is not uploaded.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>C&rsquo;est \u00e7a! J&rsquo;esp\u00e8re que vous avez appris comment mettre en ligne une vid\u00e9o sur la cha\u00eene YouTube \u00e0 l&rsquo;aide de l&rsquo;API YouTube. J&rsquo;aimerais entendre vos pens\u00e9es ou vos suggestions dans la section des commentaires ci-dessous.<\/p>\n<h4>Articles Li\u00e9s<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/comment-telecharger-une-video-sur-youtube-dans-l-application-laravel\/\" title=\"Comment t\u00e9l\u00e9charger une vid\u00e9o sur YouTube dans l&#039;application Laravel\">Comment t\u00e9l\u00e9charger une vid\u00e9o sur YouTube dans l&rsquo;application Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/comment-obtenir-des-balises-video-youtube-a-l-aide-de-l-api-youtube\/\" title=\"Comment obtenir des balises vid\u00e9o YouTube \u00e0 l&#039;aide de l&#039;API YouTube\">Comment obtenir des balises vid\u00e9o YouTube \u00e0 l&rsquo;aide de l&rsquo;API YouTube<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/api-youtube-comment-obtenir-la-liste-des-videos-youtube-de-votre-chaine\/\" title=\"API YouTube - Comment obtenir la liste des vid\u00e9os YouTube de votre cha\u00eene\">API YouTube &#8211; Comment obtenir la liste des vid\u00e9os YouTube de votre cha\u00eene<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/obtenez-une-liste-de-videos-youtube-par-mots-cles-a-l-aide-de-l-api-de-recherche-youtube\/\" title=\"Comment obtenir une liste de vid\u00e9os YouTube par mots-cl\u00e9s \u00e0 l&#039;aide de l&#039;API de recherche YouTube\">Comment obtenir une liste de vid\u00e9os YouTube par mots-cl\u00e9s \u00e0 l&rsquo;aide de l&rsquo;API de recherche YouTube<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous voulez apprendre l&rsquo;API YouTube pour t\u00e9l\u00e9charger une vid\u00e9o\u00a0? Dans cet article, nous vous montrons comment enregistrer une application, cr\u00e9er des cl\u00e9s API, installer une biblioth\u00e8que cliente Google.<\/p>\n","protected":false},"author":1,"featured_media":21640,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[273],"tags":[844],"class_list":["post-25559","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-4","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/25559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/comments?post=25559"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/25559\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media\/21640"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media?parent=25559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/categories?post=25559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/tags?post=25559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}