Cómo usar la API kirukiru.es con clientes PHP

En esta guía, repasaremos los diferentes clientes PHP que puede usar para conectarse a la API de kirukiru.es.

Específicamente, cubriremos el uso de la API kirukiru.es con la función file_get_contents, Guzzle, HTTPful y el cliente HTTPS de Symfony.

¿Qué es la API kirukiru.es?

kirukiru.es proporciona un conjunto de herramientas gratuitas que puede utilizar para controlar el rendimiento de su sitio web. Estas herramientas incluyen un analizador de enlaces rotos, tiempo de carga y un verificador de DNS. Se puede acceder a estas herramientas en línea a través de la interfaz web o la API.

La API se basa en HTTP y se puede acceder desde cualquier lenguaje de programación con una biblioteca de cliente HTTP. La API tiene un generoso nivel gratuito que puede comenzar a usar sin necesidad de proporcionar información de pago.

lo que vamos a construir

Escribiremos un script, ejecutable desde la línea de comandos, que calculará cuánto tiempo lleva cargar el sitio web de Google e imprimirlo en la terminal. Implementaremos este programa simple usando diferentes clientes PHP HTTP para demostrar cómo se ve el uso de la API.

Específicamente, vamos a utilizar las funciones integradas: file_get_contents() y php_curl, y la extensión Guzzle PHP. Por simples que parezcan estos ejemplos, demuestran los conceptos básicos del uso de la API de kirukiru.es.

requisitos previos

Para seguir, necesitará saber PHP de antemano y tenerlo instalado en su computadora. Además, necesitará Composer para administrar las extensiones.

Por último, también necesitará un editor de texto para escribir código. En mi caso, usaré Visual Studio Code, un popular editor de texto de código abierto de Microsoft. Puede descargarlo desde el sitio web de Visual Studio Code.

Descripción general de la API de kirukiru.es

La API de kirukiru.es tiene diferentes puntos finales según lo que desee hacer. La lista completa de puntos finales y su documentación asociada se puede encontrar en la página de documentación.

Crear una cuenta kirukiru.es

Para comenzar a usar la API, deberá crear una cuenta yendo a la página de inicio de la API y haciendo clic en el botón de registro. Una vez que se complete el registro, se lo dirigirá al panel de control, donde verá su clave API. El tablero debe ser como la imagen de abajo. He borrado mi clave API por razones de seguridad.

En cada solicitud de API que realice, deberá proporcionar esta clave como encabezado de solicitud. En breve, verá cómo se puede hacer esto.

Con una cuenta kirukiru.es creada y PHP instalado, podemos comenzar a crear el proyecto.

Creación de la carpeta del proyecto

Primero, cree una carpeta donde almacenaremos los archivos del proyecto. Después de eso, crea los siguientes archivos

  • .env
  • con_rizo.php
  • with_file_get_contents.php
  • con_guzzle.php

Luego, ejecute el siguiente comando para instalar la extensión vlucas/phpdotenv y guzzlehttp/guzzle

composer require vlucas/phpdotenv guzzlehttp/guzzle

En este punto, la carpeta de su proyecto debería verse así:

Ahora abra el archivo .env y agregue la siguiente línea de código, reemplazando con su clave API real del panel de kirukiru.es:

API_KEY=<your-api-key>

Usando file_get_contents()

El primer método que podríamos usar para realizar solicitudes HTTP es llamar a la función file_get_contents() que está integrada en PHP. La firma de función de la función file_get_contents() es la siguiente:

file_get_contents(path, include_path, context)

Si bien el método se usa a menudo para leer el contenido de un archivo en el almacenamiento local, podemos usarlo para leer un recurso web, como los datos devueltos por un punto final de API.

Ahora, para comenzar, abra with_file_get_contents.php y agregue el código PHP repetitivo.

<?php
   // all the code to be inserted here
?>

A continuación, podemos comenzar a cargar extensiones. Agregue la siguiente línea de código a su archivo

require_once('vendor/autoload.php');

A continuación, podemos cargar nuestras variables ambientales, que incluyen la clave API

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

Entonces, podemos definir la carga útil. Estos serán los datos que enviaremos como parte del cuerpo de la solicitud.

$payload = json_encode([
    "url" => "https://www.google.com", 
    "proxyCountry" => "us",
    "followRedirect" => true
]);

Creamos una variable de carga útil y la asignamos a una cadena JSON que contiene la url, proxyCountry y followRedirect como propiedades.

La propiedad url especifica la página web cuyo tiempo de carga queremos comprobar.

El proxyCountry es la ubicación del servidor que queremos usar para realizar la solicitud. En este caso, estamos usando el servidor de EE. UU., pero puede elegir entre India, China, Reino Unido y Francia. Puede leer la documentación para más detalles.

Luego, followRedirect especifica si el servidor proxy debe seguir cualquier redirección y medir el tiempo de respuesta de la respuesta final o la primera redirección.

Posteriormente, podemos crear opciones que configurarán nuestra solicitud agregando este código:

$options = [
    "http" => [
        "method" => "POST",
        "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
        "content" => $payload
    ] 
];

Al hacer esto, creamos un objeto de opciones que especifica que nuestro método HTTP es POST, y tenemos un encabezado que especifica dos propiedades, el tipo de contenido como JSON y la clave x-api como la clave API que especificó en el .env y se cargó como una variable ambiental.

A continuación, podemos realizar la solicitud creando un flujo donde se escribirán nuestras opciones:

$context = stream_context_create($options);

A continuación, llamamos al método file_get_contents() para realizar la solicitud y almacenar la respuesta como una variable.

$response = file_get_contents("https://api.kirukiru.es.com/loadtime", false, $context);

Hicimos la solicitud a https://api.kirukiru.es.com/loadtime. El falso le dice a PHP que no use la ruta. Y le pasamos el contexto que creamos al método.

Para mostrar la respuesta, usaremos la salida de la siguiente manera.

echo "Loadtime: " . json_decode($response)->data->total . "n";

Al final de esto, su archivo debería verse así:

<?php
    require_once('vendor/autoload.php');

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();

    $payload = json_encode([
        "url" => "https://www.google.com", 
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $options = [
        "http" => [
            "method" => "POST",
            "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
            "content" => $payload
        ] 
    ];

    $context = stream_context_create($options);

    $response = file_get_contents("https://api.kirukiru.es.com/loadtime", false, $context);

    echo "Loadtime: " . json_decode($response)->data->total . "n";
?>

Cuando ejecuta el archivo usando el siguiente comando:

php with_file_get_contents.php

Obtendrá el siguiente resultado

Loadtime: 81

Usando cURL

cURL es una utilidad de línea de comandos que se utiliza para realizar solicitudes de URL del lado del cliente. En PHP, se puede usar usando la utilidad php-curl. Para comenzar a usarlo, abra el archivo with_curl.php y escriba el PHP repetitivo

<?php
    // all new code will be written here
?>

Luego, importemos extensiones y carguemos la variable ambiental API_KEY definida en el archivo .env

require_once('vendor/autoload.php');

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

A continuación, crearemos una variable para almacenar los encabezados de nuestro objeto como una matriz donde cada elemento individual de la matriz es un encabezado específico.

$header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

Definimos dos encabezados, uno para el tipo de contenido y otro para la clave API.

Luego podemos definir el cuerpo de la solicitud.

$body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

Después de esto, podemos crear una sesión curl usando la función curl_init(). Podemos pasar la URL a la que queremos hacer la solicitud como argumento para la llamada a la función.

$ch = curl_init("https://api.kirukiru.es.com/loadtime");

Ahora podemos poner todo junto definiendo el encabezado y el cuerpo como opciones para la sesión. Para ello utilizaremos la función curl_setopt_array()

curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_POSTFIELDS => $body
]);

Para realizar la solicitud, llamaremos a la función curl_exec()

$response = curl_exec($ch);

Hemos almacenado la respuesta en la variable $response, por lo que podemos cerrar la sesión para liberar los recursos del sistema que utiliza la sesión.

curl_close($ch);

Por último, podemos imprimir la respuesta a la pantalla usando var_dump.

var_dump($response);

Al final, su archivo de script debería verse así

<?php
    require_once('vendor/autoload.php');

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();

    $header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $ch = curl_init("https://api.kirukiru.es.com/loadtime");

    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_POSTFIELDS => $body
    ]);

    $response = curl_exec($ch);

    curl_close($ch);

    var_dump($response);
?>

Cuando ejecutamos el script usando php with_curl.php, debería obtener el siguiente resultado:

{"timestamp":1666083632547,"apiStatus":"success","apiCode":200,"meta":{"url":"google.com","followRedirect":true,"redirectedURL":"https://www.google.com/?gws_rd=ssl","test":{"id":"d20h1hb409qbfwm0g534l51asugpi5hl"}},"data":{"dns":12,"connect":17,"tls":6,"send":21,"wait":110,"total":114}}bool(true)

La solicitud se completó con éxito y la API respondió con datos JSON0. Puede utilizar estos datos como desee.

con Guzzle

En la última parte de este tutorial, usaremos Guzzle para escribir el script. Como siempre, comenzamos insertando el modelo de PHP dentro de with_guzzle.php

<?php
    // all the code will go here
?>

Luego, podemos importar extensiones y Guzzle Client y Request Objects y cargar variables ambientales.

require_once('vendor/autoload.php');

use GuzzleHttpClient;
use GuzzleHttpPsr7Request;

A continuación, podemos cargar variables ambientales.

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

Luego, podemos instanciar un cliente HTTP Guzzle

$client = new GuzzleHttpClient();

Luego podemos proceder a crear encabezados para nuestra solicitud.

$headers = [
    'x-api-key' => $_ENV['API_KEY'],
    'Content-Type' => 'application/json'
];

A continuación, podemos definir el cuerpo de la solicitud.

$body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

A continuación, podemos realizar la solicitud instanciando la clase Request y pasando la URL, el encabezado y el cuerpo del extremo de la API.

$request = new Request('POST', 'https://api.kirukiru.es.com/loadtime', $headers, $body);

Luego podemos enviar la solicitud agregando esta línea de código:

$response = $client->sendAsync($request)->wait();

Una vez enviada la solicitud, podemos recibir el cuerpo de la solicitud de la siguiente manera

$response_body = $response->getBody();

Al final, podemos decodificar la respuesta JSON e imprimir el tiempo de carga

echo "Loadtime: " . json_decode($response_body)->data->total . "n";

Entonces, al final, el archivo debería verse así:

<?php
    require_once('vendor/autoload.php');

    use GuzzleHttpClient;
    use GuzzleHttpPsr7Request;

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();
    

    $client = new GuzzleHttpClient();

    $headers = [
        'x-api-key' => $_ENV['API_KEY'],
        'Content-Type' => 'application/json'
    ];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $request = new Request('POST', 'https://api.kirukiru.es.com/loadtime', $headers, $body);

    $response = $client->sendAsync($request)->wait();

    $response_body = $response->getBody();

    echo "Loadtime: " . json_decode($response_body)->data->total . "n";
?>

Y cuando ejecutas el script usando el siguiente comando:

$php with_guzzle.php

Y verás la respuesta:

Loadtime: 130

Conclusión

En este artículo, revisamos los diferentes clientes que puede querer usar al crear un proyecto PHP que requerirá la API kirukiru.es.

Si bien las secuencias de comandos de este proyecto utilizan la línea de comandos como forma principal de salida, los proyectos del mundo real podrían presentar la respuesta en una página web o escribirla en un archivo. Las secuencias de comandos de ejemplo de este artículo son simples, pero demuestran los conceptos básicos del uso de la API de kirukiru.es. Para usar diferentes API, puede cambiar el punto final y pasar diferentes opciones en el cuerpo de la solicitud.

También puede estar interesado en cómo usar la API de búsqueda de DNS de kirukiru.es en Javascript.