Acortar URLs con PHP y API Bit.ly

Si deseas compartir tus enlaces en dispositivos móviles o en Twitter que tiene un límite de 140 caracteres es necesario acortar nuestros URLs. Para ello podemos utilizar Bit.ly, un popular servicio para acortar enlaces el cual acaba de sacar la nueva versión de su API, como lo detallan en Introducing bit.ly API Version 3. En una anterior oportunidad habíamos comentado como Acortar URLs con bit.ly y PHP pero ahora actualizaremos nuestro código utilizando el nuevo API.

Nueva API Version 3
Examinando la documentación de la nueva API en bit.ly API Documentation podemos utilizar los URLs con el siguiente formato:

Para acortar un URL.
http://api.bit.ly/v3/shorten?login=user&apiKey=key&uri=url&format=fmt

Para expandir un URL
http://api.bit.ly/v3/expand?login=user&apiKey=key&shortUrl=url&format=fmt

Donde se tiene los siguientes parámetros:

  • user: es tu nombre de usuario en bit.ly
  • key es el API Key asociado a tu cuenta de usuario.
  • url es el url que deseamos acortar o expandir.
  • fmt es el formato de la respuesta (Usaremos txt que devuelve texto).

Creando un Clase para bit.ly
Basado en estos formatos podemos crear un clase básica que permite acortar o expandir URLs utilizando el nuevo API de bit.ly

class Bitly {
	var $path;
	var $user; 
	var $key;
	function Bitly ($_user, $_key) {
		$this->path = "http://api.bit.ly/v3/";
		$this->user = $_user;
		$this->key = $_key;
	}
	function shorten($url) {
		$temp = $this->path."shorten?login=".$this->user."&apiKey=".$this->key."&uri=".$url."&format=txt";
		$data = file_get_contents($temp);
		return $data;
	}
	function expand($url) {
		$temp = $this->path."expand?login=".$this->user."&apiKey=".$this->key."&shortUrl=".$url."&format=txt";
		$data = file_get_contents($temp);
		return $data;
	}	
}

Como se observa esta clase tiene dos métodos: shorten y expand.

Ejemplo de Uso
Para utilizar esta clase lo primero es incluir la clase al inicio de nuestro script PHP y luego crear una instancia de la clase Bitly que recibe dos parámetros (nombre de usuario y key de usuario).

require("bitly.php");
$bitly = new Bitly("bitly-user", "bitly-api-key");

Luego si deseamos acortar un URL lo haríamos de la siguiente forma:

require("bitly.php");
$bitly = new Bitly("bitly-user", "bitly-api-key");
$urlmin = $bitly->shorten("http://blog.unijimpe.net/utilizar-recaptcha-con-php/");
echo $urlmin; // imprime: http://bit.ly/cMea1K 

Si tienes un URL acortada y deseas saber el URL original puedes hacerlo de la siguiente forma:

require("bitly.php");
$bitly = new Bitly("bitly-user", "bitly-api-key");
$urlbig = $bitly->expand("http://bit.ly/cMea1K");
echo $urlbig; // imprime: http://blog.unijimpe.net/utilizar-recaptcha-con-php/

Les dejo los archivos fuente para esta clase para que hagan sus pruebas. Si tienen sugerencias y observaciones dejen sus comentarios para poder mejorar este trabajo.

[download id=»37″ autop=»false»]

Comentarios Total 11 comentarios

Kevin Maschke
Publicado: 10/04/2010 8:22 am

Genial! Muchas gracias!

mharcos
Publicado: 13/04/2010 8:39 pm

Que buen aporte. Estaría bueno integrar este acortador de url en la clase que crea enlaces para las redes sociales.

Una correción, en la linea 4 del último cuadro de texto se debería imprimir $urlbig.

Saludos desde Paraguay.

unijimpe
Publicado: 13/04/2010 9:03 pm

mharcos, gracias por tu observación. Tenías razón la línea 4 del ultimo código estaba equivocada y ya la corregí para los demás visitantes.

Acortar URLs con bit.ly y PHP | unijimpe
Publicado: 13/04/2010 10:22 pm

[…] dinámicamente los URLs acortados.Para una versión actualizada de este artículo pueden leer: Acortar URLs con PHP y API Bit.lyAPI del Bit.ly Este API brinda metodos para acortar y expandir URLs, ver estadisticas y datos del […]

fprado
Publicado: 09/06/2010 5:35 am

¡Buenas!

Uso una extensión de Firefox llamada UrlbarExt que permite acortar las URL desde la barra de tareas.

Estoy intentando configurar las opciones de dicho plugin para que los enlaces se guarden en mi cuenta de bit.ly (dejo una captura)

El caso es que tras mirar la API y tu post, no consigo aún que funcione correctamente porque no se qué parte de:

http://api.bit.ly/v3/shorten?login=user&apiKey=key&uri=url&format=fmt
(con mis valores, claro)
tengo que poner en el campo «api» y cuál en el de «argumentos».

Si pudieras ayudarme te lo agradecería mucho. En cualquier caso, ¡muchas gracias por tu tiempo y felicidades por el blog!

Alex
Publicado: 01/12/2010 12:20 pm

Yo encontre este sitio http://curl.cl que me parece super amigable tienes opciones de api para desarrolladores.

Santos
Publicado: 10/05/2011 1:41 am

La cuestión es que en local me funciona bien, pero en el servidor remoto no me muestra la url acortada. Los dos funcionan con php 5. Alguna idea???


[…] Si queremos hacer esta labor de acotar una url desde servidor con un lenguaje PHP tenemos un claro ejemplo en el blog de blog.unijimpe.net: Acortar urls con PHP y API bit.ly […]

Jose
Publicado: 30/10/2011 1:00 am

user y apikey son cosas privadas? puede ser negativo (influir en la seguridad) el que se vean en el código?

unijimpe
Publicado: 30/10/2011 1:05 am

Jose, el API Key se coloca en el cógido (Al igual que se coloca el usuario y clave de una base de datos MySQL) pero esta nunca la verá el usuario pues esta se utiliza para conectarse directamente al API y solo se verá la respuesta del servidor.

Jose
Publicado: 04/11/2011 6:15 pm

Lo comentaba, por que quería conjuntar el acortador bit.ly con Tweetmeme y este último requiere poner esos datos en javascript por lo que si se ven en el código final:


tweetmeme_source = 'twitter_username';
tweetmeme_service = 'bit.ly';
tweetmeme_service_api = 'bit.ly_username:bit.ly_api_key';

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)