Ejemplos de reportes en CSV usando la API de cPanel

En un artículo anterior tratábamos el uso de la API de cPanel para automatizar tareas de todo tipo, en esta nueva entrega daremos ejemplos con los que utilizar esta misma API para generar reportes en formato CSV, formato compatible para abrir con cualquier procesador de hojas de cálculo como Excel o LibreOffice.

Los siguientes scripts son ejemplos que siguen la misma estructura, por un lado, definir el comando de la API a usar, ejecutarlo con la función shell_exec de PHP, la respuesta se recibe en json tal como hemos especificado en el comando, la convertimos con json_decode, para finalmente recorremos los datos devueltos por la API para presentarlos en un formato de filas separadas por punto y coma, este script se cargaría con cualquier nombre y extensión ".php" en una ruta de nuestra cuenta y accederíamos vía navegador para ejecutarlo (también podemos ejecutarlos accediendo vía SSH a la cuenta, con el comando php), finalmente solo tendríamos que copiar la salida producida por el programa y copiarla en un fichero con extensión .csv.

Algunos navegadores podrían no respetar los saltos de línea, en ese caso abre desde el propio navegador el código fuente de la página y verás el reporte respetando una fila por línea.

Acompañamos además en cada caso con en enlace a la documentación de la función de la API ejecutada, de forma que podremos ver que otros valores devuelve cada llamada y podremos añadir a nuestro reporte cualquier otro dato que pueda ser de interés.

Extraer listado de cuentas de correo, espacio en uso y límite

Con el siguiente script ejecutamos la función Email list_pops_with_disk para obtener todas las cuentas de correo creadas en el servicio de hosting, acompañadas del espacio en uso y el espacio límite definido.

<?php

$command = 'uapi Email list_pops_with_disk --output=json';
$result = shell_exec($command);
$result = json_decode($result)->result->data;
echo "Email; Espacio usado; Espacio límite" . PHP_EOL;
foreach ($result as $account) {
    echo "{$account->email}; \"{$account->humandiskused}\"; \"{$account->humandiskquota}\"" . PHP_EOL;
}

Listado de reenviadores y su dirección destino

Reporte con todos los reenviadores creados, usamos Email list_forwarders para obtener la dirección, origen y destino de cada reenviador.

<?php

$command = 'uapi Email list_forwarders --output=json';
$result = shell_exec($command);
$result = json_decode($result)->result->data;
echo "De; Para" . PHP_EOL;
foreach ($result as $account) {
    echo "{$account->dest}; {$account->forward}" . PHP_EOL;
}

Listado de auto-contestadores, título, mensaje, fecha inicio y fecha fin

Por medio de Email list_auto_responders, obtenemos el listado de auto-constestadores, y en cada auto-contestador, ejecutamos Email get_auto_responder para obtener información detallada de cada uno de ellos, pudiendo devolver un reporte con el auto-constestador, título, fecha inicio, de activación y fecha fin.

<?php

$command = 'uapi Email list_auto_responders --output=json';
$result = shell_exec($command);
$result = json_decode($result)->result->data;

echo "Cuenta; Fecha inicio; Fecha fin; Título" . PHP_EOL;
foreach ($result as $account) {
    $responderCommand =
        'uapi Email get_auto_responder --output=json email=' .
        $account->email;
    $responder = shell_exec($responderCommand);
    $responder = json_decode($responder)->result->data;

    $start = $responder->start;
    $stop = $responder->stop;

    if(is_null($start)) {
        $start = '-';
    } else {
        $start = Carbon\Carbon::parse($start);
        $start = $start->format('d/m/Y');
    }
 
    if(is_null($stop)) {
        $stop = '-';
    } else {
        $stop= Carbon\Carbon::parse($stop);
        $stop= $stop->format('d/m/Y');
    }
    
    echo "{$account->email}; {$start}; {$stop}; \"{$account->subject}\"" . PHP_EOL;
}

Listado de tareas programadas, cronjobs

Para el listado de tareas programadas no usamos la API de cPanel ya que no hay una función disponible de momento, no obstante tenemos "crontab -l" un comando disponible en cualquier sistema basado en Linux con el que de igual forma podremos obtener esta información.

<?php

$command = 'crontab -l';
$result = shell_exec($command);
$result = explode("\n", $result);

echo "Intervalo;Comando" . PHP_EOL;
foreach ($result as $cron) {
    if(strpos($cron, 'MAILTO=') !== false || strpos($cron, "SHELL=") !== false) {
        continue;
    }

    if(empty($cron)) {
        continue;
    }

    $cron = explode(' ', $cron);
    echo "{$cron[0]} {$cron[1]} {$cron[2]} {$cron[3]} {$cron[4]}; {$cron[5]}" . PHP_EOL;
}