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 " " . $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