Clase PHP para trabajo con el API de bit.ly

  • Por
  • PHP
Una clase, de programación orientada a objetos en PHP, que facilita la programación con el API de bit.ly en PHP.
En pasados artículos hemos comenzado a explicar las particularidades del API de bit.ly, que nos permite incorporar a nuestras páginas web las funcionalidades para acortar direcciones de ese popular servicio web. Hasta el momento, en el Manual del API de bit.ly, hemos comentando la lista de posibles acciones a realizar y cómo acortar una dirección larga con PHP con un script sencillo.

Ahora vamos a mostrar cómo realizar una clase, de programación orientada a objetos en PHP 5, que resuma las tareas de trabajo con el API de bit.ly y nos permita realizar las acciones típicas por medio de métodos de un objeto. Este ejemplo viene bien para aprender programación orientada a objetos con PHP, aparte de servir como práctica sobre el API de este acortador de direcciones.

Funcionalidades de la clase

La clase PHP que vamos a construir implementa las funcionalidades más importantes que podemos necesitar realizar con el API de bit.ly, como acortar una URL larga o expandir una URL corta previamente generada por bit.ly. Estoy seguro que se podrían implementar otros métodos también útiles sobre el API, pero de momento no queremos complicar demasiado las cosas.

La lista de los métodos que vamos a tener se puede ver a continuación.

Constructor:
Sirve para crear un objeto de la clase, para lo que necesitamos indicar nuestro nombre de usuario de bit.ly y la llave del API, que obtenemos al registrarnos en el servicio web.

acorta_URL:
Este método recibe una URL larga e intenta acortarla con bit.ly. Si no se pudo por cualquier razón devuelve false y en caso que la URL se acorte con éxito, devuelve una cadena con la URL corta.

expande_URL:
Este método sirve para obtener la URL larga a partir de una acortada con bit.ly. Es decir, recibe una cadena con una URL corta de bit.ly y devuelve la URL original que hay detrás de una URL generada por este servicio web. Si no se pudo expandir la URL corta, devuelve false.

Estos son los tres métodos públicos que tendremos por ahora, aunque dentro de la clase tenemos otro método privado, que hemos utilizado durante el desarrollo.

muestra_respuesta:
Un método privado que simplemente muestra el contenido completo que devuelve el API de bit.ly al hacer una consulta. Simplemente imprime en la página la respuesta generada en el acceso al API.

Nota: Recordemos que los elementos privados sólo se pueden acceder desde métodos que hay en la propia clase, es decir, sólo los podemos invocar desde el código de la propia clase. Los elementos públicos, por su parte, se pueden acceder a partir de los objetos. En la práctica, si no somos los desarrolladores de esa clase, sólo podremos acceder a los métodos públicos.

Código de la clase PHP Bit.ly

Ahora podemos ver el código de nuestra clase para el trabajo con bit.ly desde PHP.

class bitly_PHP{
   private $usuario;
   private $llave;
   private $version_API = "version=2.0.1";
   private $servicio_web = "http://api.bit.ly/";
   
   function __construct($login, $APIkey){
      $this->usuario = "login=" . $login;
      $this->llave = "apiKey=" . $APIkey;
   }
   
   private function muestra_respuesta($respuesta_API){
      echo "<pre>";
      var_dump($respuesta_API);
      echo "</pre>";
   }
   
   public function acorta_URL($URL_larga){
      $query_URL = "&longUrl=" . urlencode($URL_larga);
      
      $URL_consulta_API = $this->servicio_web . "shorten?" . $this->version_API . "&" . $query_URL . "&" . $this->usuario . "&" . $this->llave;
      $respuesta_API = json_decode(file_get_contents($URL_consulta_API), true);
      
      //muestro la resupuesta
      //$this->muestra_respuesta($respuesta_API);
      
      if($respuesta_API["errorMessage"]==""){
         //Todo bien, pues no hay errores
         return $respuesta_API["results"][$URL_larga]["shortUrl"];
      }
      
      return false;   
   }
   
   public function expande_URL($URL_corta){
      $query_URL = "&shortUrl=" . urlencode($URL_corta);
      $solo_codigo_bitly = substr(strstr($URL_corta, "bit.ly/"),7);
      
      $URL_consulta_API = $this->servicio_web . "expand?" . $this->version_API . $query_URL . "&" . $this->usuario . "&" . $this->llave;
      $respuesta_API = json_decode(file_get_contents($URL_consulta_API), true);
      
      //muestro la resupuesta
      //$this->muestra_respuesta($respuesta_API);
      
      if($respuesta_API["errorMessage"]==""){
         //Todo bien, pues no hay errores
         return $respuesta_API["results"][$solo_codigo_bitly]["longUrl"];
      }
      
      return false;
   }
}

Para entender estos códigos de mejor manera recomendamos la lectura del artículo Acceso al API de bit.ly desde PHP.

Como se ha podido ver, se han implementado varios métodos con un código bastante corto, aunque para entenderlo habría que conocer un poco las características del API. De la misma manera, si queremos modificar esta clase o ampliarla con nuevos métodos, tendríamos que conocer un poco el API.

Sin embargo, con la clase hemos creado en realidad un envoltorio para usar el API sin conocerla. Es decir, ahora que está hecha la clase, los usuarios que simplemente quieran utilizarla para trabajar con el API de bit.ly, no necesitarán conocerla en toda su complejidad. Realmente sólo necesitarán conocer los métodos, sus nombres y los parámetros que reciben, así como los datos que devuelven.

Utilización de la clase bit.ly en PHP

Para acabar, podemos ver cómo utilizar la clase creada anteriormente para acortar una URL y luego mostrarla de nuevo pero expandida.

//definimos la URL con la que quiero trabajar
$url_trabajar = "http://www.desarrolloweb.com/articulos/crear-rss-php-mysql.html";

//construyo el objeto de la clase bitly_PHP
$obj_bitly = new bitly_PHP("usuario", "R_00000000000000000000000");

//obtengo la URL corta a partir de la URL original, con el método acorta_URL()
$url_corta = $obj_bitly->acorta_URL($url_trabajar);

//compruebo que esa URL corta no es false (osea, que no hubo error)
if ($url_corta){
   //muestro la URL corta
   echo '<p>La URL, una vez acortada es ' . $url_corta . '</p>';
   echo '<p><a href="' . $url_corta . '">' . $url_corta . '</a></p>';

   //pruebo ahora a expandir esa URL
   //para ello invoco el método expande_URL()
   $url_larga = $obj_bitly->expande_URL($url_corta);
   
   //compruebo que la URL no sea false
   if ($url_larga){
      //muestro la URL expandida
      echo '<p>La URL, una vez expandida es ' . $url_larga . '</p>';
   }else{
      //error al crear la URL expandida
      echo '<p>Hubo un error al intentar expandir la URL</p>';
   }

}else{
   //error al crear la URL corta.
   echo "<p>Hubo un error al intentar recortar la URL</p>";
}

Como se puede ver, en este ejemplo sólo hemos necesitado indicar nuestro usuario y llave del API en los parámetros del constructor (sustituirlos por vuestros datos de acceso obtenidos al registrarse en bit.ly) y luego acceder a los métodos acorta_URL() y expande_URL() para obtener las URLs cortas o expandidas, pero sin tener que preocuparnos por los modos en los que funciona el API de bit.ly para obtener esas respuestas.

Espero que esta clase haya servido de ejemplo para las personas que quieren usar el API de bit.ly, pero admito que no estaría del todo acabada. En un futuro artículo veremos cómo avanzar un poco más sobre esta clase.