✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Como usar a API do YouTube para enviar vídeo ao canal do YouTube

59

Todo mundo conhece o YouTube. O YouTube é a plataforma de compartilhamento de vídeo número um do mundo. Podemos usar o YouTube para hospedar nossos vídeos. Isso nos economiza muito espaço no servidor e pode-se facilmente inserir o vídeo do YouTube no site. Qualquer pessoa pode fazer upload do vídeo no YouTube. Tudo que você precisa fazer é apenas fazer login em sua conta do YouTube e enviar o vídeo. Processo simples e direto. Mas e se alguém precisar enviar vídeos por meio da API do YouTube em um canal do YouTube? É possível? Sim, é possível. Neste artigo, estudamos como usar a API do YouTube para enviar um vídeo usando PHP.

Registrar um aplicativo e criar credenciais

Para começar a usar a API do YouTube, você precisa de uma Conta do Google. Assim que você tiver uma Conta do Google, registre seu aplicativo e obtenha as chaves de API.

Abaixo estão as etapas para registrar um aplicativo e obter suas chaves de API.

  • Vá para o Google Developer Console https://console.developers.google.com
  • Crie um novo projeto. Você também pode selecionar um projeto existente.
  • Digite um nome para o seu projeto. O console do Google criará um ID de projeto exclusivo.
  • Depois de criar um projeto, ele aparecerá no topo da barra lateral esquerda.
  • Clique em Biblioteca. Você verá uma lista de APIs do Google.
  • Ative a API de dados do YouTube.
  • Clique nas credenciais. Selecione o ID do cliente Oauth em Criar credenciais. Selecione o botão de opção para Web Application.
  • Dê o nome. Em Origens JavaScript autorizadas, insira o URL do seu domínio. Em URIs de redirecionamento autorizados, forneça o link do URL de redirecionamento. No meu caso, passei o URL http: //localhost/youtube/callback.php.
  • Clique no botão Criar. Você obterá o ID do cliente e o segredo do cliente no pop-up. Copie esses detalhes. Vamos precisar disso em um momento.

Como usar a API do YouTube para enviar vídeo ao canal do YouTube

Definir uma configuração básica

Carregar vídeo usando a API do YouTube requer a criação de um token de acesso. Um token de acesso nada mais é do que um identificador de uma conta do YouTube.

Porém, o token de acesso expira depois de algum tempo. Assim que o token de acesso expirar, você receberá o erro ‘Acesso não autorizado’. A solução para isso é executar o processo de autorização novamente ou gerar novamente o token de acesso em segundo plano e concluir o processo de upload. Neste artigo, procuro uma segunda solução. Geraremos novamente o token de acesso se ele tiver expirado em segundo plano sem interromper o processo de upload. Fazendo isso, você não precisa fazer o processo de autorização novamente e novamente.

Dito isso, primeiro você precisa autorizar a conta para gerar um token de acesso. Vou usar a biblioteca Hybridauth para autorização e para gerar token de acesso. Abra seu composer.jsonarquivo e adicione as linhas abaixo nele.

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

Observe que o YouTube é um produto do Google e a API do YouTube nada mais é do que uma API do Google. É por isso que estamos utilizando a biblioteca “google / apiclient". Em seguida, execute o comando abaixo para a instalação dessas bibliotecas.

composer install

Configuração de banco de dados

Em cada chamada de API, precisamos enviar um token de acesso para armazená-lo no banco de dados. Crie uma tabela ‘token’ em seu banco de dados usando a consulta abaixo.

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

Posteriormente, parte deste artigo, precisamos interagir com esta tabela de ‘token’ para buscar e atualizar os detalhes do token. Isso requer a gravação de uma conexão de banco de dados e algumas consultas. Crie um arquivo class-db.phpe adicione o seguinte código a ele.

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

Passe suas credenciais de banco de dados no arquivo acima. Estou assumindo que você deseja usar uma única conta do YouTube. Se você pretende usar várias contas, modifique as consultas acima de acordo com seus requisitos.

Gerar token de acesso

Você instalou as bibliotecas e criou uma tabela para armazenar o token. Agora vamos fazer o processo de autorização, pegar o token de acesso e armazená-lo na tabela ‘token’.

Crie um config.phparquivo e escreva uma configuração de acordo com as diretrizes da 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 );

Substitua os marcadores pelos valores reais de suas credenciais do Google. Adicione o mesmo URL de retorno de chamada que você passou ao criar o aplicativo de console. Isso significa que quando o usuário concluir o processo de autorização, ele será redirecionado para o callback.phparquivo.

No callback.phparquivo, buscaremos os detalhes do token de acesso e os armazenaremos no banco de dados.

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

Vá para o seu navegador e execute YOUR_DOMAIN_URL / callback.php, você irá redirecionar para a conta do Google, concluir o processo de autorização e deverá ver a mensagem de sucesso. Verifique a tabela de banco de dados ‘token’. Ele deve ter seus detalhes de token armazenados. E isso significa que você está pronto para enviar um vídeo em seu canal do YouTube.

Carregar vídeo no canal do YouTube usando a API do YouTube

Você obteve o token de acesso que será usado para enviar o vídeo no canal do YouTube por meio da API do Google. Mas, como mencionei antes, o token de acesso expiraria depois de algum tempo e iremos regenerá-lo em segundo plano sem solicitar o processo de autorização novamente.

Podemos fazer isso usando ‘referh_token’. Se você olhar a coluna ‘access_token’ na tabela, verá que ela também contém a entrada ‘refresh_token’. Usando o ‘refresh_token’, chamamos o ponto de extremidade ‘/ o / oauth2 / token’ e geramos novamente o token de acesso em segundo plano.

Em seguida, você precisa do formulário HTML por meio do qual você pode navegar pelo vídeo e enviá-lo ao servidor para upload. Vamos criar um formulário HTML simples da seguinte maneira.

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>

O formulário possui 3 campos – título, descrição e arquivo. No envio deste formulário, o vídeo deve ser carregado em seu canal do YouTube junto com o título e a descrição fornecidos.

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

O código acima pega um arquivo de vídeo do formulário HTML e o carrega por meio da API em seu canal do YouTube. Se o seu token de acesso expirou, ele regenera o token em segundo plano e continua o processo sem quebrá-lo.

Envie uma miniatura personalizada no vídeo do YouTube

Se você está construindo um aplicativo personalizado que gerencia vídeos do YouTube, provavelmente deseja fazer upload de miniaturas no vídeo do YouTube. O upload de uma miniatura personalizada exige que os usuários verifiquem seu número de telefone com sua conta do YouTube. Visite o linkhttps://www.youtube.com/features e faça a verificação do número de telefone.

Depois de verificar o número de telefone, você pode usar nosso formulário e código anteriores com pequenas modificações e definir a miniatura personalizada para o vídeo enviado. Primeiro, adicione o campo do formulário que permite o upload de imagens. O tamanho de miniatura recomendado no YouTube é 1280x720.

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

No envio do formulário, construímos um array $arr_dataque contém todos os dados do formulário. Adicione o novo par de imagem à matriz da $arr_dataseguinte maneira.

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

Em seguida, depois que nosso código carrega o vídeo no YouTube, temos que pegar o id do vídeo e atribuir uma miniatura personalizada ao vídeo.

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

Excluir vídeo do canal do YouTube usando a API do YouTube

Você também pode querer um código para excluir vídeos usando a API do YouTube. Para excluir um vídeo, você precisa de um escopo adicional https://www.googleapis.com/auth/youtubeque já incluí acima em um arquivo de configuração. Isso significa que o token de acesso gerado ao seguir as etapas acima pode ser usado para excluir um vídeo.

Abaixo está o código que excluirá um vídeo de seu canal no 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.
        }
    }
}

É isso! Espero que você saiba como enviar um vídeo no canal do YouTube usando a API do YouTube. Eu gostaria de ouvir suas opiniões ou sugestões na seção de comentários abaixo.

Artigos relacionados

Fonte de gravação: artisansweb.net

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação