Programar sistema votaciones usando twitter

Twitter es una de las redes sociales más utilizadas del mundo. Automatizar el recuento de los tuits que contienen un determinado texto puedo sernos útil para sondear la opinión de los usuarios (votaciones, encuestas,…), para hacer un listado con las personas que han tuiteado en un determinado evento o simplemente por curiosidad. Para ello utilizaremos la API de búsqueda de Twitter.

Dada la aceptación que tuvo el anterior artículo sobre Cómo programar un sistema de votaciones basado en Facebook, hoy traemos el complemento perfecto:

cómo crear un sistema de votaciones utilizando Twitter

Como a cualquier amante de Twitter, la utilidad de Buscar en Twitter me produce especial fascinación. Haciendo una búsqueda puedes saber qué se está hablando sobre un determinado tema, seguir un evento en directo o conocer a otros tuiteros afines. Si además podemos automatizar la búsqueda y guardar los datos obtenidos para su posterior tratamiento, el abanico de posibles usos se hace todavía mayor.

La API de búsqueda de Twitter no es si no una URL a la que pasamos unos determinados parámetros y nos devuelve un array en formato JSON con los resultados que se hayan producido. Recomiendo enterarse bien de cómo funciona  y las distintas opciones en la página oficial.

El ejemplo que desarrollaremos sirve para contar los votos en un concurso a través de Twitter: para ello haremos que los usuario tuiteen un determinado texto que incluya dos hashtag:

  1. #nombredelconcurso: un hashtag que promocione el concurso y que a su ve nos servirá como filtro a la hora de realizar nuestra búsqueda.
  2. #participante1234: será el hashtag que hará las veces de voto, siendo 1234 el identificador único del elemento votado.

Planteado esto, el siguiente paso está claro: rastrear Twitter en busca de tuits que contengan el hastag #nombredelconcurso para después contabilizar cada uno de los votos #participante1234. Para ello propongo el siguiente código:

$url="http://search.twitter.com/search.json?result_type=recent&rpp=100&q=";
$hashtag="#nombredelconcurso";

//Pedimos el JSON a la API de Twitter
$json=file_get_contents($url.urlencode($hashtag));

//Lo convertimos para trabajar con él
$array=json_decode($json);
$resultados=$array->results;
$count=0;
foreach($resultados as $resultado)
{
        //Vemos si el tuit contiene la cadena voto #participante*
	preg_match( "/#participante[0-9]+/" ,$resultado->text,$cadenas);
	if(count($cadenas)>0)
	{
		$idelemento=str_replace("#participante","",implode(" ",$cadenas));
		$usuario_twitter=$resultado->from_user_id;
                //A la función nuevovoto() le pasamos el usuario de twitter que ha escrito el tuit, el elemento votado y  la fecha
		if(nuevovoto($idelemento,$usuario_twitter,,date('Y-m-d',strtotime($resultado->created_at))))
		{
			$count++;
		}
	}
}
echo("Votos contabilizados: $count");

function nuevovoto($idelemento,$usuario_twitter,$fecha)
{
	//Código para contabilizar los votos
        //Devuelve TRUE si el voto puede ser contabilizado
}

 

Como habréis visto, es un código muy sencillo que, sin embargo, puede complicarse todo lo que queráis.

Algunas anotaciones:

  • Si el concurso tiene mucha participación, deberéis tener en cuenta que aquí solo se contempla la primera página de resultados (los 100 últimos tuits): en la documentación de la API se incluyen las instrucciones para solicitar el resto de páginas de resultados.
  • En este ejemplo, solo se puede votar un elemento en un mismo tuit.
  • Tampoco distinguimos entre tuits y retuits: ambos cuentan.
  • La función nuevovoto() será la encargada de decidir si una misma persona puede votar más de una vez (cada día o cada hora por ejemplo) al mismo elemento o no.
  • Lo recomendable sería crear una tarea cron que cada cierto tiempo ejecutara el código para hacer el recuento.
  • La API de búsqueda de Twitter tiene unos límites de uso: intenta no superarlos.

Espero vuestros comentarios y/o mejoras.