[API] Conectar y Listar Eventos de Google Calendar con PHP


Hola a todos, en este nuevo ejemplo de APIs usaremos Google Calendar, recuerden que para hacer estos ejemplo necesitan tener una cuenta de Google.

Google Calendar es una aplicacion de Google que nos permite tener una agenda de eventos y gestionarlos mediante el sitio web o la aplicacion de android, pero Google ofrece una API con la cual podemos leer o manipular los eventos de Google Calandar desde cualquier plataforma, en esta ocasion usaremos PHP.

Obtener la libreria de APIs cliente de Google

 

Debemos descargar la libreria cliente de Google desde el repositorio en Github: https://github.com/google/google-api-php-client recuerden descargar el release mas actual, al momento de este articulo usaremos la version 2.0.3.

Obtener las credenciales de acceso

Te invito a leer: Google Developers – Obtener la API KEY

Para usar Google Calendar debemos tener credenciales mediante el método oAuth 2.0 y debemos considerar lo siguiente:

  • Nombre de Producto: El nombre de producto es el nombre que se le mostrara al cliente.
  • Tipo de la aplicación: El tipo de la aplicación puede ser: aplicación web, android, aplicación de Chrome, iOs, etc.
  • Nombre: Sirve para identificar entre credenciales, ya que podemos tener muchas credenciales para un mismo proyecto.
  • URI de redireccionamiento autorizada: Muy importante ya que esta dirección sirve para que la aplicación redireccione, si intentamos direccionar de nuestra aplicación a una URI no autorizada entonces tendremos un error.

El codigo

Les dejo el codigo en un gist de Github:


<html>
<body>
<?php
session_start();
// print_r($_SESSION);
if(isset($_GET["logout"])){
session_destroy();
}
$redirect_uri ='http://localhost/g_projects/hello_calendar/index.php';
require_once '../google-api-php-client/vendor/autoload.php';
$client = new Google_Client();
// Get your credentials from the console
$client->setClientId('959193925480-4q1nivhp9lu2r400dpg87cqk67g4ts3b.apps.googleusercontent.com');
$client->setClientSecret('xmkHpH09DgkPamA_ma9ovxu6');
$client->setRedirectUri($redirect_uri);
$client->addScope('profile');
$client->addScope(Google_Service_Calendar::CALENDAR);
print_r($client->getAccessToken());
$authUrl = $client->createAuthUrl();
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
if (!$client->getAccessToken() && !isset($_SESSION['access_token'])) {
$authUrl = $client->createAuthUrl();
print "<a class='login' href='$authUrl'>Conectar</a>";
}
if (isset($_SESSION['access_token'])) {
print "<a class='logout' href='".$_SERVER['PHP_SELF']."?logout=1'>Salir</a><br>";
$client->setAccessToken($_SESSION['access_token']);
$service = new Google_Service_Calendar($client);
$results = $service->events->listEvents('primary', array());
if (count($results->getItems()) == 0) {
print "<h3>No hay Eventos</h3>";
} else {
print "<h3>Proximos Eventos</h3>";
echo "<table border=1>";
foreach ($results->getItems() as $event) {
echo "<tr>";
$start = $event->start->dateTime;
if (empty($start)) {
$start = $event->start->date;
}
echo "<td>".$event->getSummary()."</td>";
echo "<td>".$start."</td>";
echo "</tr>";
}
echo "<table>";
}
}
?>
</body>
</html>

Por cierto, en este ejemplo les presto mis ClientId y ClientSecret, pero recuerden que ustedes deben seguir los pasos y obtener sus propios codigos, ya que mis codigos en cualquier momento pueden cambiar.

Si leyeron mi articulo anterior http://evilnapsis.com/2015/12/02/api-conectar-y-listar-archivos-de-google-drive-con-php/, si no les recomiento leerlo.

En el articulo de Google Drive explico como nos da acceso Google mediante el protocolo OAuth 2.0, para llegar a obtener un Cliente autenticado.

Una vez con el cliente autenticado procedemos a hacer una consulta al Google_Service_Calendar:

[code language=”php”]

$service = new Google_Service_Calendar($client);

[/code]

Usaremos $service como objeto podremos hacer consultas al servicio Calendar, en la siguiente consulta obtenemos los eventos mas recientes:

[code language=”php”]

$results = $service->events->listEvents(‘primary’, array());

[/code]

Y despues mediante el metodo $results->getItems() obtenemos los eventos, con un foreach recorremos y los mostramos.

Resultado

screenshot-at-2016-10-08-00-46-39

Finalizando

Espero que este ejemplo les ayude y si tienen dudas por favor escriban en los comentarios 😉

 

 

Leave a comment