thumbnail

Seu projeto PHP já conversou com o Google Drive hoje?

Yuri do Monte Yuri do Monte | 5 min de leitura
há 1 dia

Explorando arquivos e pastas com google/apiclient.......


Fala dev.. blz?

Sabe quando você precisa integrar seu sistema com o Google Drive para ler documentos, listar pastas ou até mesmo fazer aquele backup maroto, e de repente se vê perdido em meio a documentações gigantescas do Google? Pois é. O Google Drive é uma ferramenta fantástica, mas a primeira vez que a gente tenta conectar via API, parece que estamos tentando decifrar um pergaminho antigo.

A boa notícia é que com a biblioteca google/apiclient (versão ^2.19) no PHP, essa tarefa fica bem mais amigável. A ideia é simples: autenticar nossa aplicação, conectar à API do Drive e listar as pastas e arquivos que estão lá dentro, tudo isso de forma automatizada.


Aviso importante: nunca publique o seu arquivo credentials.json ou token.json em repositórios públicos (como o GitHub). Adicione esses arquivos no seu .gitignore. Credenciais expostas na internet são como deixar a chave do seu carro na ignição com a porta aberta no centro da cidade.


O que esse código faz?

O script abaixo utiliza a biblioteca oficial do Google para PHP. Ele gerencia a autenticação (criando a URL de autorização, recebendo o código e gerando o token de acesso) e, em seguida, faz duas coisas principais: lista as pastas na raiz do seu Drive e, para cada pasta encontrada, lista os arquivos que estão dentro dela. Tudo isso lidando automaticamente com a renovação do token caso ele expire.


<?php

require __DIR__ . '/../vendor/autoload.php';

function connect_client()
{
    $client = new Google\Client();
    $client->setApplicationName('Google Driver');
    $client->setScopes(Google\Service\Drive::DRIVE);
    $client->setAuthConfig(__DIR__ . '/credentials.json');
    $client->setAccessType('offline');
    $client->setRedirectUri('http://localhost:8000/quickstart.php' );
    return $client;
}

// Busca pastas — $pastaId = 'root' para o primeiro nível
function get_folders($drive, $pastaId = 'root')
{
    return $drive->files->listFiles([
        'pageSize' => 20,
        'q'        => "'$pastaId' in parents and mimeType='application/vnd.google-apps.folder' and trashed=false",
        'fields'   => 'files(id, name, mimeType)'
    ]);
}

// Busca arquivos (ignorando pastas) — $pastaId = 'root' para o primeiro nível
function get_files($drive, $pastaId = 'root')
{
    return $drive->files->listFiles([
        'pageSize' => 20,
        'q'        => "'$pastaId' in parents and mimeType!='application/vnd.google-apps.folder' and trashed=false",
        'fields'   => 'files(id, name, mimeType)'
    ]);
}

$client = connect_client();
$tokenPath = __DIR__ . '/token.json';

// Para resetar: acesse ?reset=1
if (isset($_GET['reset']) && file_exists($tokenPath)) {
    unlink($tokenPath);
    echo "Token apagado. <a href='/quickstart.php'>Clique aqui para autenticar.</a>";
    exit;
}

if (file_exists($tokenPath)) {
    $token = json_decode(file_get_contents($tokenPath), true);
    $client->setAccessToken($token);
}

if ($client->isAccessTokenExpired()) {
    if ($client->getRefreshToken()) {
        $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
        file_put_contents($tokenPath, json_encode($client->getAccessToken()));
    } else {
        if (isset($_GET['code'])) {
            $token = $client->fetchAccessTokenWithAuthCode($_GET['code']);

            if (isset($token['error'])) {
                echo "Erro: " . $token['error'];
                exit;
            }

            $client->setAccessToken($token);
            file_put_contents($tokenPath, json_encode($token));
            echo "Autenticado! <a href='/quickstart.php'>Clique aqui para continuar.</a>";
            exit;
        }

        header('Location: ' . $client->createAuthUrl());
        exit;
    }
}

$drive = new Google\Service\Drive($client);

$folders = get_folders($drive);

echo "<h2>Documentos</h2>";
foreach ($folders->getFiles() as $folder) {
   echo $folder->getName() . ' — ID: ' . $folder->getId() . '  ';
   
   $files = get_files($drive, $folder->getId());
   foreach($files->getFiles() as $file){
        echo "&nbsp;&nbsp;&nbsp; " . $file->getName() . '  ';
   }
}

Como parametrizar seu projeto no Google Cloud Console

Antes de rodar esse código e ver a mágica acontecer, você precisa avisar o Google que o seu aplicativo existe e pedir permissão para acessar o Drive. É aqui que entra a parametrização do projeto. Siga esse passo a passo para não se perder:

1.Acesse o Google Cloud Console: Vá em console.cloud.google.com e faça login.

2.Crie um Novo Projeto: No topo da página, clique no seletor de projetos e depois em "Novo Projeto". Dê um nome bacana (tipo "Integracao-Drive-PHP") e crie.

3.Ative a API do Google Drive:

  • No menu lateral esquerdo, vá em "APIs e Serviços" > "Biblioteca".
  • Pesquise por "Google Drive API" e clique nela.
  • Clique no botão azul "Ativar".




4.Configure a Tela de Consentimento OAuth:

  • Vá em "APIs e Serviços" > "Tela de consentimento OAuth".
  • Escolha o tipo de usuário (geralmente "Externo" se você for testar com contas @gmail.com comuns).
  • Preencha os dados obrigatórios (Nome do App, E-mail de suporte e E-mail do desenvolvedor).
  • Na parte de "Escopos", você pode pular por enquanto ou adicionar o escopo do Drive (.../auth/drive).
  • Adicione seu próprio e-mail em "Usuários de teste" para conseguir autenticar durante o desenvolvimento.



5.Crie as Credenciais:

  • Vá em "APIs e Serviços" > "Credenciais".
  • Clique em "Criar Credenciais" no topo da página e escolha "ID do cliente OAuth".
  • Em "Tipo de aplicativo", escolha "Aplicativo da Web".
  • Em "URIs de redirecionamento autorizados", adicione a URL exata onde o seu script vai rodar (no caso do nosso código, http://localhost:8000/quickstart.php ).
  • Clique em Criar.



6.Baixe o arquivo JSON: Na tela que aparecer, baixe o arquivo JSON com suas credenciais. Renomeie esse arquivo para credentials.json e coloque na mesma pasta do seu script PHP.


Instalando a biblioteca

Para que o require __DIR__ . '/../vendor/autoload.php'; funcione, você precisa instalar a biblioteca do Google via Composer. No terminal, dentro da pasta do seu projeto, rode:

composer require google/apiclient:"^2.19"

Conclusão

Com a biblioteca do Google e algumas configurações no Cloud Console, seu PHP ganha superpoderes para interagir com o Google Drive. O código cuida da parte chata (gerenciar os tokens) e deixa você livre para focar no que importa: listar pastas, ler arquivos e construir a lógica da sua aplicação.

No fim das contas, integrar com o Google Drive é como montar um móvel: a primeira vez que você olha o manual parece impossível, mas depois que você entende onde cada parafuso (ou credencial) se encaixa, a estrutura fica sólida e pronta para uso.

Comentários

Realize login para comentar neste post
Este post não possui comentários