{"id":28124,"date":"2021-06-02T17:45:00","date_gmt":"2021-06-02T14:45:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28124"},"modified":"2021-10-18T04:05:17","modified_gmt":"2021-10-18T01:05:17","slug":"como-fazer-upload-de-video-no-youtube-no-aplicativo-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-fazer-upload-de-video-no-youtube-no-aplicativo-laravel\/","title":{"rendered":"Como fazer upload de v\u00eddeo no YouTube no aplicativo Laravel"},"content":{"rendered":"<p>Recentemente, um de nossos leitores perguntou como fazer upload de um v\u00eddeo no YouTube a partir do aplicativo Laravel. Eles queriam construir um sistema que pudesse fazer upload de v\u00eddeos do YouTube de dentro do aplicativo Laravel. Ao fazer isso, eles n\u00e3o precisam conceder acesso \u00e0 conta do YouTube aos membros da equipe que gerenciam os v\u00eddeos da conta do YouTube.<\/p>\n<p>No passado, escrevi um artigo que explica sobre como <a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-usar-a-api-do-youtube-para-enviar-video-ao-canal-do-youtube\/\" title=\"fazer upload de v\u00eddeo no YouTube usando a API do YouTube em PHP\" >fazer upload de v\u00eddeo no YouTube usando a API do YouTube em PHP<\/a>. Neste artigo, veremos como fazer upload de um v\u00eddeo no YouTube a partir do aplicativo Laravel.<\/p>\n<h3>Registre um aplicativo e obtenha credenciais<\/h3>\n<p>Para come\u00e7ar, voc\u00ea precisa ter uma Conta do Google. Na conta do Google, voc\u00ea precisa registrar seu aplicativo e obter as chaves de API.<\/p>\n<p>Abaixo est\u00e3o as etapas para registrar um aplicativo e obter as chaves de API.<\/p>\n<ul>\n<li>V\u00e1 para o Google Developer Console <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>Crie um novo projeto. Voc\u00ea tamb\u00e9m pode selecionar um projeto existente.<\/li>\n<li>Digite um nome para o seu projeto. O console do Google criar\u00e1 um ID de projeto exclusivo para voc\u00ea.<\/li>\n<li>Ao criar um projeto, ele aparecer\u00e1 no topo da barra lateral esquerda.<\/li>\n<li>Clique em Biblioteca no menu esquerdo. Voc\u00ea ver\u00e1 uma lista de APIs do Google. Ative a API de dados do YouTube.<\/li>\n<li>A seguir, no menu esquerdo, clique em Credenciais. Selecione o ID do cliente Oauth em Criar credenciais. Escolha o bot\u00e3o de op\u00e7\u00e3o para Web Application.<\/li>\n<li>D\u00ea o nome. Em Origens JavaScript autorizadas, insira o URL do seu dom\u00ednio. Em URIs de redirecionamento autorizados, adicione o link do URL de redirecionamento como <a href=\"http:\/\/localhost:8000\/youtube\/callback\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">http: \/\/ localhost: 8000 \/ youtube \/ callback<\/a>. Estou passando meu URL local aqui. Voc\u00ea deve ajustar este URL com o seu dom\u00ednio.<\/li>\n<li>Por fim, clique no bot\u00e3o Criar. Voc\u00ea obter\u00e1 um ID de cliente e um segredo do cliente no pop-up. Copie esses detalhes. Iremos exigir isso em breve.<\/li>\n<\/ul>\n<h3>Instalar e configurar a biblioteca GitHub<\/h3>\n<p>Depois de criar o aplicativo, a pr\u00f3xima coisa a fazer \u00e9 instalar a biblioteca <a href=\"https:\/\/github.com\/JoeDawson\/youtube\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">joedawson \/ youtube<\/a>. Para a instala\u00e7\u00e3o desta biblioteca, abra o terminal no diret\u00f3rio raiz do seu projeto e execute o comando:<\/p>\n<pre><code>composer require dawson\/youtube<\/code><\/pre>\n<p>Depois de instalar a biblioteca, voc\u00ea deve registrar o provedor de servi\u00e7os e os aliases no <code>config\/app.php<\/code>arquivo.<\/p>\n<p><strong>config \/ app.php<\/strong><\/p>\n<pre><code>....\n'providers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0...\n\u00a0\u00a0\u00a0\u00a0DawsonYoutubeYoutubeServiceProvider::class,\n],\n....\n'aliases' =&gt; [\n\u00a0\u00a0\u00a0\u00a0...\n\u00a0\u00a0\u00a0\u00a0'Youtube' =&gt; DawsonYoutubeFacadesYoutube::class,\n],<\/code><\/pre>\n<p>Em seguida, publique as <code>youtube.php<\/code>migra\u00e7\u00f5es e usando o comando abaixo:<\/p>\n<pre><code>php artisan vendor:publish --provider=\"DawsonYoutubeYoutubeServiceProvider\"<\/code><\/pre>\n<p>O comando acima move o arquivo <code>youtube.php<\/code>para a pasta &#8216;config&#8217; e o arquivo de migra\u00e7\u00e3o para a pasta &#8216;banco de dados \/ migra\u00e7\u00f5es&#8217;. Agora, voc\u00ea precisa executar o comando de migra\u00e7\u00e3o que criar\u00e1 uma tabela de <code>youtube_access_tokens<\/code>tabela no banco de dados.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Esta tabela armazenaria o token de acesso e o token de atualiza\u00e7\u00e3o ap\u00f3s autorizar a conta do YouTube. O access_token \u00e9 necess\u00e1rio quando voc\u00ea interage com a API do YouTube. O token de acesso atua como um identificador para sua conta do YouTube. O token de acesso tem um curto per\u00edodo de vida, portanto, para obter o novo token de acesso, esta biblioteca usa um token de atualiza\u00e7\u00e3o. Voc\u00ea n\u00e3o precisa se preocupar em inserir esses tokens em uma tabela. A biblioteca far\u00e1 isso em segundo plano.<\/p>\n<p>Copiamos as credenciais da API que precisam ser colocadas dentro do aplicativo Laravel. Abra o <code>.env<\/code>arquivo e adicione seu ID de cliente e segredo do cliente da seguinte maneira:<\/p>\n<pre><code>GOOGLE_CLIENT_ID=\nGOOGLE_CLIENT_SECRET=<\/code><\/pre>\n<p>Se voc\u00ea estiver fazendo alguma altera\u00e7\u00e3o no arquivo de ambiente, dever\u00e1 limpar a configura\u00e7\u00e3o usando o comando:<\/p>\n<pre><code>php artisan config:clear<\/code><\/pre>\n<h4>Autoriza\u00e7\u00e3o de conta do Google<\/h4>\n<p>Por raz\u00f5es de seguran\u00e7a, as rotas para autorizar a conta do YouTube com seu aplicativo Laravel est\u00e3o desabilitadas por padr\u00e3o. Voc\u00ea precisar\u00e1 habilit\u00e1-lo em seu <code>config\/youtube.php<\/code>. Abra o <code>config\/youtube.php<\/code>e habilite-o apenas substituindo o valor falso por verdadeiro.<\/p>\n<pre><code>...\n'enabled' =&gt; true, \/\/set it to 'false' after authorization<\/code><\/pre>\n<p>Agora voc\u00ea pode autorizar sua conta usando o URL YOUR_DOMAIN_URL \/ youtube \/ auth no navegador. Ele ir\u00e1 redirecionar para a p\u00e1gina de login do Google para autenticar sua conta. Conclua o processo. Com a autentica\u00e7\u00e3o bem-sucedida, voc\u00ea redirecionar\u00e1 de volta para seu aplicativo Laravel. Verifique a <code>youtube_access_tokens<\/code>tabela e voc\u00ea ver\u00e1 os tokens inseridos na coluna &#8216;access_token&#8217;. Este \u00e9 um processo \u00fanico. A biblioteca ir\u00e1 gerar access_token automaticamente em segundo plano, mesmo que tenha expirado. O usu\u00e1rio n\u00e3o precisa autorizar sua conta novamente.<\/p>\n<h3>Carregar v\u00eddeo na conta do YouTube no aplicativo Laravel<\/h3>\n<p>Neste est\u00e1gio, voc\u00ea est\u00e1 pronto com o token de acesso. Agora crie um formul\u00e1rio para navegar no arquivo de v\u00eddeo e envi\u00e1-lo ao YouTube. Vamos criar um controlador executando o comando abaixo.<\/p>\n<pre><code>php artisan make:controller VideoController --resource<\/code><\/pre>\n<p>Defina as rotas <code>VideoController<\/code>como segue.<\/p>\n<p><strong>rotas \/ web.php<\/strong><\/p>\n<pre><code>&lt;?php\n...\nRoute::resource('video', 'VideoController');<\/code><\/pre>\n<p>Crie uma visualiza\u00e7\u00e3o <code>resources\/views\/video.blade.php<\/code>e adicione o c\u00f3digo abaixo nela.<\/p>\n<pre><code>&lt;form action=\"{{ url('video') }}\" 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=\"description\" 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=\"video\" \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" class=\"btn btn-default\"&gt;Submit&lt;\/button&gt;\n\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n&lt;\/form&gt;<\/code><\/pre>\n<p>Chame este arquivo de vis\u00e3o do <code>index<\/code>m\u00e9todo do nosso controlador.<\/p>\n<pre><code>public function index()\n{\n\u00a0\u00a0\u00a0\u00a0return view('video');\n}<\/code><\/pre>\n<p>Agora, quando voc\u00ea visitar YOUR_DOMAIN_URL \/ video, ver\u00e1 um formul\u00e1rio que cont\u00e9m entrada de arquivo, t\u00edtulo, descri\u00e7\u00e3o e bot\u00e3o de envio.<\/p>\n<p>Para chamar a API do YouTube, adicione uma classe do YouTube em um controlador. E no <code>store<\/code>m\u00e9todo, escreva o c\u00f3digo para enviar um v\u00eddeo no YouTube da seguinte maneira.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse Youtube;\n\u00a0\nclass VideoController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0....\n\u00a0\u00a0\u00a0\u00a0public function store(Request $request)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$video = Youtube::upload($request-&gt;file('video')-&gt;getPathName(), [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'title'\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 =&gt; $request-&gt;input('title'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'description' =&gt; $request-&gt;input('description')\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"Video uploaded successfully. Video ID is \". $video-&gt;getVideoId();\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Aqui estamos passando um arquivo de v\u00eddeo, t\u00edtulo e descri\u00e7\u00e3o de nosso formul\u00e1rio. Este c\u00f3digo simplesmente carrega seu v\u00eddeo no YouTube e imprime a id do v\u00eddeo do YouTube.<\/p>\n<p>Espero que voc\u00ea entenda como fazer upload de um v\u00eddeo no YouTube no aplicativo Laravel. O usu\u00e1rio tamb\u00e9m pode atualizar e excluir os v\u00eddeos usando o c\u00f3digo fornecido pela biblioteca. Voc\u00ea pode ler mais sobre isso em sua <a href=\"https:\/\/github.com\/joedawson\/youtube\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documenta\u00e7\u00e3o<\/a>.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/integracao-do-paypal-payments-pro-no-laravel\/\" title=\"Integra\u00e7\u00e3o do PayPal Payments Pro no Laravel\">Integra\u00e7\u00e3o do PayPal Payments Pro no Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-criar-um-blog-com-o-laravel\/\" title=\"Como criar um blog com o Laravel\">Como criar um blog com o Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-fazer-upload-e-recortar-imagens-no-laravel-usando-imgareaselect-e-a-biblioteca-de-imagens-de-intervencao\/\" title=\"Como fazer upload e recortar imagens no Laravel\">Como fazer upload e recortar imagens no Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quer fazer upload de um v\u00eddeo no YouTube a partir do seu aplicativo Laravel? Neste artigo, mostro como fazer upload de v\u00eddeo no YouTube a partir do Laravel<\/p>\n","protected":false},"author":1,"featured_media":20375,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[502],"tags":[848],"class_list":["post-28124","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=28124"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28124\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/20375"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}