Com s’ha fet el TIME OUT Friday?

El TIME OUT Friday és una acció que hem portat a terme durant 15 dies i fins aquest divendres mateix des de Playbrand per a Time Out Barcelona.



Ha consistit en una webapp que connectava amb Twitter a través d’OAuth, en què els participants s’inscrivien per accedir al sorteig d’un incentiu. Per formalitzar la seva participació han hagut d’assenyalar cinc amics de Twitter i recomanar-los dues propostes culturals i d’oci d’entre les 30 seleccionades per la redacció de Time Out.

Les recomanacions no s’han enviat a l’instant sinó que, seguint el costum entre els usuaris de Twitter de recomanar usuaris interessants a altres persones cada divendres i classificar els missatges amb les etiquetes #FollowFriday o #FF, l’aplicació ha enviat els dos divendres que ha estat vigent un tweet a cada usuari assenyalat des del perfil del participant que l’ha triat.

Els missatges han estat encapçalats pel hastag #FollowFriday, han mencionat l’usuari que havia de rebre la recomanació i tenien un enllaç amb més informació sobre la proposta que duia al web de Time Out Barcelona.

Eines

  • Servidor Apache
  • PHP 5.x
  • MySQL per la base de dades
  • Classe TwitterOAuth per connectar amb Twitter
  • Classe Formitable per gestionar els formularis

Base de dades

A la base de dades es desa, com a mínim, el nom d’usuari de Twitter del participant, els noms d’usuari de les cinc persones que el participant ha assenyalat, els dos tokens que l’OAuth de Twitter revela per a cada usuari i la data d’inscripció.

Parts de l’aplicació

L’aplicació té una primera pantalla on el potencial participant pot llegir en què consisteix el concurs i què ha de fer, una segona que només apareix si la sessió ha estat autoritzada per l’OAuth de Twitter, i una tercera de confirmació que les dades s’han registrat correctament.

En l’última pantalla, l’usuari pot esborrar-se del concurs si s’ho ha repensat (això executa un script que esborra el registre de la base de dades corresponent al seu nom d’usuari). A més l’usuari pot tornar a passar per la pantalla d’autorització de Twitter en qualsevol moment i tornar al formulari, des d’on pot tant modificar les recomanacions que ha triat com desapuntar-se del concurs.

Snipets de codi

Comprovar que els usuaris se segueixen mútuament per evitar les recomanacions no desitjades

El següent script fa que un tweet només s’enviï si emissor i receptor se segueixen mútuament.

Aquest codi té dues limitacions:

  • Fa servir la versió 1 de l’API de Twitter, en lloc de l’1.1, per tant podria quedar obsolet aviat
  • Retorna un error 403 i no envia el tweet si l’usuari destinatari té el compte de Twitter en mode privat

Explicació de les variables:

  • $usuariparticipant ha de contenir el nom d’usuari de Twitter del participant en el concurs, que enviarà el tweet (sense l’arrova inicial).
  • $usuariassenyalat ha de contenir el nom de l’usuari que ha de rebre la recomanació (sense l’arrova inicial).
  • $textdeltweet ha de contenir el text que ha de tenir el tweet que rebi el destinatari.
1
2
3
4
5
6
7
8
	$sesegueixen = "https://api.twitter.com/1/friendships/exists.json?screen_name_a=". $usuariparticipant."&screen_name_b=".$usuariassenyalat."";
	$comprovasisesegueixen = file_get_contents($sesegueixen, true);
 
	if ($comprovasisesegueixen == "true") {
		$code = $tmhOAuth->request('POST', $tmhOAuth->url('1/statuses/update'), array(
		"status" => $textdeltweet,
		));
	}

Expressions regulars per comprovar que el participant introdueix els noms d’usuari sense l’arrova inicial

Aquesta expressió regular serveix per assegurar que el participant no està posant els noms d’usuari de Twitter dels qui han de rebre les recomanacions amb una arrova inicial, i si ho fa, informar formitables que no ha de desar el formulari sinó mostrar un error.

A més, ajuda a evitar qualsevol injecció de codi a la base de dades a través d’aquests camps perquè impedeixen gravar qualsevol caràcter que no sigui alfanumèric o barra baixa, que són els que permet Twitter. Igualment, mai s’ha de desar un camp a la base de dades sense sanejar-lo i estar segurs que hem evitat qualsevol possible injecció (mysql_real_escape_string() és el nostre amic ;)).

La segona de les expressions és per comprovar que el correu electrònic que introdueix l’usuari té un format correcte.

1
2
$newForm->registerValidation("comprovaArrova","^[a-zA-Z0-9_][a-zA-Z0-9_]+$","Ep! Això no sembla un nom d'usuari de Twitter correcte. Recorda que cal posar el nom d'usuari <strong>sense</strong> l'arrova inicial.");
$newForm->registerValidation("emailValidation","^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$","L'adreça electrònica no és correcta.");