Programação / PHP

Integração com Google Calendar e agendamento de horários

Aprenda como consumir a integração do Google pela biblioteca e crie sua classe para gerenciar os eventos do Google Agenda utilizando PHP7 e Ajax

Por Gustavo Web

Publicado por Gustavo Web
em 15/12/2017 às 18h16

Lista VIP UpInside

Entre para nossa lista VIP e receba vídeo aulas, artigos e tutoriais exclusivos e com prioridade

  QUERO ENTRAR

Aula exclusiva UpInside Play

Acessar aula no Play

Compartilhe:

Salve salve webmaster, Gustavo Web aqui mais uma vez com mais uma aula para o UpInside Play!

Seguinte, nessa aula aqui vamos fazer a integração com o Google Agenda, chamado pelo próprio Google de Calendar...

Bora programar um sistema para fazer agendamento de horários já sincronizado com o Google Agenda e notificando o participante com um arquivo .ics que é lido por todos os softwares de calendário/agenda pra ficar fácil de criar qualquer agendamento para médico, dentista, professora de yoga ou até pro pet shop saber que hora vai buscar o seu cachorro?

Esse recurso é bem bacana, porque permite que você adicione um evento a agenda e dessa forma o dono da agenda será notificado! Como todo mundo hoje tem a conta sincronizada com o smartphone é uma boa alternativa para gerar uma notificação para a pessoa e evitar que envie um e-mail e caia no spam por exemplo...

Como esse conteúdo é beeeem extenso, a primeira aula tudo o que é necessário para fazer a comunicação com o Google Calendar, a numa próxima aula a gente entra para fazer a gestão dos horários e consumir essa classe que estaremos criando hoje.

Embora já tem entregue uma estrutura pré-montada, aqui a gente vai trabalhar com o PHP7, Ajax, Consumo de API já tudo dentro das PSR's :)

Referências:

Como sempre, vou deixar disponível aqui os links que utilizei durante o desenvolvimento para que você possa consultar junto comigo.

Link para a página de instalação e credenciamento.

Link para a página de documentação de criação dos eventos.

Link para a página da documentação dos eventos.

Link para a página de documentação da API de Notificação.

Material de Apoio

Conforme vamos lendo a documentação e avançando no código, eu vou criando os diretórios lá no GitHub para que você possa consultar os arquivos e usar como base de estudo o que desenvolvemos durante essa aula.

O material que estou disponibilizando já está mais organizado, identado e comentado! Assim fica mais tranquilo você compreender a responsabilidade de cada método e quais são os parâmetros que precisam ser informados.

Fiz tem uma correção que me passou batido na aula, que eu criei a variável de data e hora do início com evento como star, e eu já alterei para start :)

Não fiz o upload da pasta vendor, portanto, se você baixar o conteúdo vai necessário rodar o comando composer update :)

Para acessar o repositório, é só clicar aqui e eu te levo pra lá agora!

Se você ainda não segue a gente no github, dê um follow lá! E não se esqueça de dar aquela estrelinha marota nos repos :)

Como você pode notar, em todas as nossas aulas do Play, a gente deixa os links de referência. Então quando você quiser fazer uma integração que não esteja presente ainda aqui no nosso site, você pode seguir esse mesmo passo.

Consumindo a Biblioteca do Google:

Como você pode ver pela documentação e pela aula, a gente trabalha com o Composer para fazer o download da biblioteca, e já aproveitamos para transferir a responsabilidade do autoload para o composer também...

... assim a gente tem a nossa aplicação trabalhando com a PSR-4 no autoload das classes.

A documentação do Google é bem rica e bem tranquila de se entender, o nosso trabalho aqui é basicamente que organizar o conteúdo para diminuir o acoplamento das funções e por consequência teremos alguns métodos a mais do que está estipulado na documentação, mas cada um com sua responsabilidade bem clara.

Isso fica ainda mais notável quando vamos de fato consumir os métodos, o processo fica mais ou menos assim:

tenho autenticação?
se não ->
Exibo a mensagem de que não sou autenticado
Gero o link para autenticar
se sim ->
Exibo a mensagem de que estou autenticado
Posso consumir os demais métodos

Se tivemos um método acoplado para tudo isso ficaria complicado a nossa aplicação interpretar essas informações.

Absorvendo a documentação criamos o método também para criar e deletar um evento da agenda, e a partir desse momento tudo começa a ficar mais simples e os pontos começam a se conectar.

Ao organizar a pasta você pode notar que trabalhamos com atributos privados da classe e precisamos parametrizar toda a nossa classe funcionar corretamente e fazer o reuso desses atributos, mas uma vez organizado, você consegue ter uma visão mais objetiva de cada linha.

Quanto a parte de autenticação, criamos um método específico para receber o codeAuth do Google e setar essa parametrização na nossa classe, então teremos um arquivo auth.php que será responsável justamente por resgatar esse código e aplicar na classe.

Validação de Erros e Prevenção:

Nas classes que desenvolvemos, colocamos alguns poucos testes que validam as informações antes de termos qualquer tipo de requisição para a API.

Você pode tomar isso como um padrão quando estiver desenvolvendo suas aplicações, assim você reduz a chance da sua aplicação quebrar por algum erro inesperado quando enviado para a API, faz somente as requisições que devem ser feitas (e com isso diminui o tempo de carregamento da página) e também pode aplicar essa mesma tecnica nas interações com banco de dados para que possa diminuir ainda mais o load do seu server :)

Instalação:

O processo de instalação eu mostro durante a aula, e por mais que você baixe o último repositório, terá que seguir os mesmos procedimentos pois a pasta vendor (do composer) e o client_secret.json não estão presentes.

Será necessário também criar um banco de dados, o script para criação das tabelas está na raiz do projeto :)

Adicionais e Recursos:

Eu vou deixar algumas sugestões do que pode ser implementado nesse sistema caso você vá utilizar esse escopo para um cliente seu:

Como lição de casa eu deixo a parte de deletar schedules e ainda a edição das appointments :)

Projeto:

O projeto fica com uma estrutura bastante enxuta de fácil compreensão e manutenção... Cada arquivo tem sua responsabilidade bem definida e fica muuuito tranquilo de desenvolver! A gente faz um overview antes de começar a aula de como funciona.

O legal disso é que se você quiser aplicar dentro do seu projeto, basta seguir o passo a passo para adquirir o seu client_secret.json e copiar a classe Calendar para dentro do seu sistema e sair usando. Está totalmente desacoplado do sistema!

É claro que deve-se observar os namespaces...

Ambiente:

Um ponto importante é que você deve obrigatoriamente estar rodando a versão do PHP7 na sua máquina, pois vetor nas defines não são permitidas nas versões 5.x.

Eu estou com o XAMPP na versão 7.1.9 do PHP, se sua versão for essa ou superior provavelmente sua aplicação funcionará sem nenhum tipo de problema.

 

Compartilhe:

Em Programação:

Deixe seu comentário: