Bobapp – Cifras de tráfico a partir de Google Trends

¡Hola amigos! Hoy vamos a aprender cómo obtener las cifras de tráfico de una web gracias a la herramienta Google Trends. Esta herramienta, para generar la gráfica, utiliza la API de gráficas Google Charts, por lo que sólo es necesario entender el “idioma” que esta API habla para poder extraer cifras aproximadas del tráfico de una web.

De paso introduzco una nueva sección: Bienvenidos a Bobapp! El apartado donde colgaré aplicaciones bobas que se me ocurran :)

Volviendo a lo que nos atañe: Para consultar el tráfico de una página hay que hacer lo siguiente:

  1. Accedes a Google Trends.para páginas web.
  2. Si no has iniciado sesión con tu usuario, hazlo ahora. Este paso es necesario.
  3. Consulta el tráfico de una página. Una y no más.
  4. Copia la URL en la que se encuentra la gráfica.
  5. Accede a http://chusete.es/bobapp/gtrends.php.
  6. Pega la URL de la gráfica y dale a Enviar.
  7. Obtendrás una tablita con las cifras de tráfico y el error cometido.

Esta bobapp está dedicada a mi grán amigo Simón, amante y estudioso de las métricas de tráfico :)

Y para los curiosos aquí tenéis el código fuente de la función “que hace la magia”:

  function get_traffic($chart_url) {
    // Construimos el array con las correspondencias numéricas
    for($j=0, $i=65;$i<=90;$i++) { $chdata[chr($i)] = $j++; }
    for($i=97;$i<=122;$i++) { $chdata[chr($i)] = $j++; }
    for($i=0;$i<=9;$i++) { $chdata[$i] = $j++; }

    /* Obtenemos las fechas de cada valor. Se muestran los últimos 22
      meses completos, y de ellos, 56 valores. Transcurren
      aproximadamento 12 días entre cada valor */
    $last_date = strtotime('-1 second',
      strtotime(date('m').'/01/'.date('Y').' 00:00:00'));
    $first_date = strtotime(date('m/01/Y 00:00:00',
      strtotime('-22 month', $last_date)));
    $date_increment = ($last_date - $first_date) / (55);

    // Parseamos la URL
    $url_parsed = parse_url(html_entity_decode($chart_url));
    parse_str($url_parsed['query'], $params);

    /* Cada división horizontal es 1/3 de la cota máxima. Obteniendo
      la mínima, multiplicamos por 3, y por M o por K (Depende), y
      dividimos entre la resolución, que es de hasta 61 posiciones.
      Este valor será el factor que defina cada incremento. El error
      cometido será la mitad del incremento */
    preg_match_all('/t (\d+\.?[0|5]?) (K|M)/i',$params['chm'],$cota);
    $rango = $cota[2][1]=='M' ? 1000000 : 1000;
    $inc = (3*min($cota[1])*$rango)/61;

    // Obtenemos el Array de datos
    preg_match('/([^,]+)$/i', $params['chd'], $orig);
    $data = Array();

    // Y finalmente, asignamos los valores al array de retorno
    $size = strlen($orig[1]);
    for($i=0; $i<$size;$i++) {
      $index = date('Y-m-d', $first_date + $date_increment*$i);
      $value = number_format($chdata[$orig[1][$i]]*$inc,0,',','.');
      $data[$index] = $value;
    }
    $data['Error'] = '± '.number_format($inc/2, 2, ',', '.');

    return $data;
  }

Como véis es muy sencillo. Si quitamos los comentarios y lineas partidas se queda en sólo 19 líneas de código.