Estadísticas sobre tus links con bit.ly

Hace algún tiempo cree un pequeño post que hablaba de la forma de obtener una short url a través del servicio Tiny url. Sin embargo, este servicio no soporta en la actualidad un reporte de estadísticas como el que tiene bit.ly. Afortunadamente, disponemos una API para poder crear y consultar direcciones acortadas por ellos.

El primer paso sería registrarnos de manera gratuita en el servicio para poder hacer uso de la API, ya que es necesario el envío de las credenciales cada vez que hagamos una petición a sus endpoints. Una vez registrados, deberemos acceder a la siguiente dirección para obtener nuestra API Key: http://bit.ly/a/your_api_key

Si quisiéramos obtener una short url a través de la API, bastaría con indicar los siguientes valores en la petición:

var longUrl = Uri.EscapeDataString("http://geeks.ms/blogs/gtorres/archive/2010/06/05/estadisticas-sobre-tus-links-con-bit-ly.aspx");
const string login = "YOUR USER NAME";
const string apiKey = "YOUR API KEY";
const string format = "xml"; //json is valid too

const string urlShorten = "http://api.bit.ly/v3/shorten?";
var credentials = string.Format("login={0}&apiKey={1}&", login, apiKey);
var parameters = string.Format("&longUrl={0}&format={1}", longUrl, format);

var bitLy = WebRequest.Create(string.Format("{0}{1}{2}", urlShorten, credentials, parameters));

var shortUrl = bitLy.GetResponse();

using (var reader = new StreamReader(shortUrl.GetResponseStream()))
{
    Console.WriteLine(reader.ReadToEnd());
}

Al especificar el formato XML, como respuesta obtenemos lo siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <status_code>200</status_code>
    <status_txt>OK</status_txt>
    <data>
        <url>http://bit.ly/9L79lW</url>
        <hash>9L79lW</hash>
        <global_hash>bUHuTf</global_hash>
        <long_url>http://geeks.ms/blogs/gtorres/archive/2010/06/05/estadisticas-sobre-tus-links-con-bit-ly.aspx</long_url>
        <new_hash>0</new_hash>
    </data>
</response>

Para poder ver las estadísticas de esta URL en concreto, saber si otras personas la han compartido y en qué red social, podemos visualizarlo solamente añadiendo el signo + a la short URLdevuelta: http://bit.ly/9L79lW+

Si por el contrario quisiéramos generar nuestras propias estadísticas, recuperando el número de clicks realizados sobre la URL, podríamos realizar la siguiente consulta:

const string login = "YOUR USER NAME";
const string apiKey = "YOUR API KEY";
const string shortURL = "http://bit.ly/9L79lW";
const string clicksURL = "http://api.bit.ly/v3/clicks?";
const string format = "xml";
const string hash = "j3";

var credentials = string.Format("login={0}&apiKey={1}&", login, apiKey);
var parameters = string.Format("&shortUrl={0}&format={1}&hash={2}", shortURL, format, hash);

var bitLy = WebRequest.Create(string.Format("{0}{1}{2}", clicksURL, credentials, parameters));
var shortUrl = bitLy.GetResponse();

using (var reader = new StreamReader(shortUrl.GetResponseStream()))
{
    Console.WriteLine(reader.ReadToEnd());
}

Con la siguiente respuesta:

<?xml version="1.0" encoding="UTF-8" ?>
<response>
  <status_code>200</status_code>
  <data>
    <clicks>
      <short_url>http://bit.ly/9L79lW</short_url>
      <global_hash>bUHuTf</global_hash>
      <user_clicks>6</user_clicks>
      <user_hash>9L79lW</user_hash>
      <global_clicks>13</global_clicks>
    </clicks>
    <clicks>
      <user_clicks>112</user_clicks>
      <global_hash>lLWr</global_hash>
      <hash>j3</hash>
      <user_hash>j3</user_hash>
      <global_clicks>116</global_clicks>
    </clicks>
  </data>
  <status_txt>OK</status_txt>
</response>

Más información sobre el uso de esta API.

Espero que sea de utilidad :D.

¡Saludos!