Cuando trabajamos con la API de twitter, resulta que la mayoría de los enlaces o url’s están acortados, asi que en algún momento de nuestro desarrollo puede ser necesario expandir estas url’s tan pequeñas. Aunque no solamente twitter usa url’s cortas, las podemos encontrar también en blogs, en facebook, en tumblr, incluso aquí en Cristalab y regadas por toda la web.
La forma lógica de expandirlas seria. Encontrar el dominio de la url usando expresiones regulares, y luego proceder según sea el caso, ya sea con la api oficial del acortador o con ayuda de los headers que la url devuelva, pero ya que existen mas de 100 acortadores de url´s esto puede ser un trabajo monumental.
Así que aquí les comparto un código PHP que hace la mágica tarea de expandir casi cualquier url corta.
Código :
function expand_url($url){
$apiurl = "http://api.longurl.org/v2/expand?url=".urlencode($url);
$chi = curl_init();
curl_setopt($chi, CURLOPT_URL, $apiurl);
curl_setopt($chi, CURLOPT_RETURNTRANSFER, 1);
$resulti = curl_exec($chi);
$resultinfo = curl_getinfo($chi);
curl_close($chi);
$xmli = simplexml_load_string($resulti, 'SimpleXMLElement', LIBXML_NOCDATA);
return $xmli->{"long-url"};
}Como podrán notar, para que esta función funcione, es necesario usar CURL, una librería de PHP muy divertida, y una API especial que hace prácticamente todo el trabajo. http://longurl.org ellos soportan a una gran cantidad de acortadores de url’s.
Curl, en pocas palabras accede a la api de longurl, por medio de una url. Luego esta url nos devuelve un xml con la url expandida, pueden comprobarlo ustedes mismos poniendo http://api.longurl.org/v2/expand?url= en la barra del navegador, seguido de una url corta.
Despues de recoger el xml con curl_exec() y simplexml_load_string() devolvemos una larga y aburrida, pero útil url.

Código :
Aquí una función sin usar ninguna api, solo php:
Código :
function expand_url($url) { try { // Definimos un browser conocido ini_set("user_agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1"); $headers = @get_headers($url, 1); if (!$headers) { throw new Exception("No pudimos obtener la cabecera de la url: $url", E_USER_NOTICE); } $the_code = substr($headers[0], 9, 3); // manejando redirecciones if ($the_code == '301' or $the_code == '302') { return expand_url($headers['Location']); } } catch (Exception $e) { return false; } return $url; }saludos
Maikel :
Aquí una función sin usar ninguna api, solo php
Sois unos cracks
Gracias Maikel, por tu código alternativo, tengo una pregunta, ese código funciona también con acortadores con APIS extrañas? bueno, no se si en algún momento ese código tenga alguna limitación.
En verdad, esa función la hice al momento de leer tu artículo. Justo después de publicarla me di cuenta que no maneja la redirecciones indefinidas, pero eso es fácil de arreglar.
saludos
Maikel-blog :