Una clase, de programación orientada a objetos en PHP, que facilita la programación con el API de bit.ly en PHP.
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.
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.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...