OpenInviter en Flash. Extrae tus contactos de gmail, hotmail, msn, yahoo…

elad . Jueves 30 de diciembre de 2010. a las 13:49

OpenInviter es un interesante proyecto open source que permite extraer los contactos con sus cuentas de correo de cada uno de los proveedores más importantes de internet: gmail, hotmail, msn, yahoo, facebook, xing, linkedin, youtube

Puede ser muy útil para campañas de invita a un amigo (ahora muy típicas por navidad) y para conseguir que el viral se expanda a gran velocidad, en el post vamos a ver como conectarlo en Flash mediante XML.

Podemos ver una demo de OpenInviter en su propia web y ver así todos los proveedores con los que trabaja en la documentación oficial (todos los archivos que acaban plg.php)

Veamos nuestro ejemplo en flash funcionando:


Get Adobe Flash player

Interfaz
1. La interfaz permitirá enviar el usuario y password del perfil así como su provider. Devolverá una lista ordenada de amigos/contactos en una lista con checkbox para permitir la selección al usuario. Una vez escogidos los amigos en concreto mostraremos los emails de los seleccionados con los cuales podríamos hacer ya la acción necesaria, por ejemplo, enviar el email de invitación.

XML
2. Definimos cual va a ser el XML de datos de contactos que obtendremos y mostraremos en la interfaz.

<xml>
    <ok>1</ok>
  	<contacto>
  		<nombre><![CDATA[Nombre 1]]></nombre>
        <email><![CDATA[email1@email.com]]></email>
     </contacto>
     
     <contacto>
     	<nombre><![CDATA[Nombre 2]]></nombre>
        <email><![CDATA[email2@email.com]]></email>
     </contacto>
     
     	<contacto>
     		<nombre><![CDATA[Nombre 3]]></nombre>
        <email><![CDATA[email3@email.com]]></email>
     </contacto>
</xml>

OpenInviter PHP
2. Mediante la utilización de la clase de OpenInviter en el PHP getcontactos.php obtenemos un array con todos los contactos y pintamos por el buffer de salida el XML dinámico. Para esto recibirá por POST 3 variables: username, password, provider.

<?php

include_once("openInviter/openinviter.php");

//post vars
$username = $_POST['username'];
$password = $_POST['password'];
$provider = $_POST['provider'];

$oi = new OpenInviter();
//
$oi->getPlugins();

//inicia proveedor
$oi->startPlugin($provider);

$isOk = 1;

$xml = '<xml>';

//check username & password
if($oi->login($username,$password))
{
	//array con los contactos
	$contactos = $oi->getMyContacts();
	
	if(is_array($contactos) && count($contactos)>=1)
	{
		//ordenar contactos por nombre
	    ksort($contactos);
	    
	    //crear xml
	    foreach($contactos as $key=>$value)
	    {
	    	$nombre =  utf8_decode(utf8_decode($value));  
	        
	        $xml .= '	<contacto>';
	        $xml .= '		<nombre><![CDATA['.$nombre.']]></nombre>';
	        $xml .= '		<email><![CDATA['.$key.']]></email>';
	        $xml .= '	</contacto>';
	    }            
	}
	else {
		$isOk = 0;
	}
}
else {
	$isOk = 0;
	//echo $oi->internalError;
}

$xml .= '
	<ok>'.$isOk.'</ok>
</xml>';

//mostrar resultado XML
echo $xml;
?>

Flash ActionScript 3.0
3. Flash hará la petición al PHP mediante URLLoader pasando por POST las variables que espera el PHP y obtendrá la lista. Después con la selección de los usuarios al pinchar enviar pintamos en un campo de texto los emails seleccionados.

En el siguiente código tan sólo muestra la llamada a OpenInviter y su posterior carga, en el ejemplo podéis ver el resto:

//datos de carga
var datos:URLLoader = new URLLoader();
datos.addEventListener(Event.OPEN,open_handler);
datos.addEventListener(Event.COMPLETE,complete_handler);

var xml:XML;

[...]

function importclick_handler(event:MouseEvent):void
{
	
	//si se han rellenado los datos
	if(provider_cb.selectedItem != null &&
	   username_ti.text != "" &&
	   password_ti.text != "")
	
	{
		var path:String = "http://www.lostiemposcambian.com/blog/posts/openinviter-flash-as3/getcontactos.php";
		
		//se realiza la solicitud enviando por POST: username, password, provider
		var url:URLRequest = new URLRequest(path);
		var vars:URLVariables = new URLVariables();
		
		vars.username = username_ti.text;
		vars.password = password_ti.text;
		vars.provider = provider_cb.selectedItem;
		
		url.method = URLRequestMethod.POST;
		url.data = vars;
		
		datos.load(url);
		
	}
}

/**
 * Funcion que se ejecuta al iniciar la carga del XML de OpenInviter
 */
function open_handler(event:Event):void
{
	cargando_lb.text = "Cargando...";
	cargando_lb.visible = true;
	
	scroll_bar.visible = false;
	select_bt.visible = false;
	
	emails_lb.visible = false;
	emails_ta.visible = false;
	listado_contactos_sp.visible = false;
	emails_ta.text = "";
}

/**
 * Funcion que se ejecuta al completar la carga del XML de OpenInviter
 * con todos los contactos
 */
function complete_handler(event:Event):void
{
	
	
	//dejar el listado vacío para pintar los checkbox
	var i:int = listado_contactos_sp.numChildren;
	while(i--)
	{
		listado_contactos_sp.removeChildAt( i );
	}
	
	xml = new XML(event.target.data);
	
	//username & password correctos
	if(xml.ok == 1)
	{
		cargando_lb.visible = false;
		
		//crea todos los checkbox, uno por contacto
		var contador:Number = 0;
		for each(var nodo:XML in xml.contacto)
		{
			var cb:CheckBox = new CheckBox(this,0,contador*20,nodo.nombre+" <"+nodo.email+">");
		
			listado_contactos_sp.addChild(cb);
			contador++;
		}
		
		//check si se necesita scroll
		scroll_bar.value = 100;
		if(listado_contactos_sp.height > mask_sp.height)
		{
			scroll_bar.visible = true;
		} else 
		{
			scroll_bar.visible = false;
		}
		scroll_handler(null);
		
		select_bt.visible = true;
		emails_lb.visible = true;
		emails_ta.visible = true;
		
		listado_contactos_sp.visible = true;
	
	} else {
		cargando_lb.visible = true;
		cargando_lb.text = "Datos incorrectos o no hay contactos para esa cuenta";
	}

}

Gracias a @kroniksan por su ayuda con el PHP, a ver si se anima y nos postea alguna cosilla ;-)

Update: Openinviter con ActionScript 2.0 (AS2.0)

Pese a que ActionScript 2.0 esta muy mayor y hace tiempo que quedó desfasado, muchos diseñadores y flasheros lo siguen utilizando. De hecho en el blog nos pidieron poner este mismo ejemplo en AS2. Dicho y hecho, aqui os lo dejamos :)

Esta realizado con componentes UIComponent de ActionScript 2.0, como podéis apreciar la eficiencia es bastante mala :S


Get Adobe Flash player

El código os lo podéis descargar desde aquí: Openinviter con ActionScript 2.0. Espero que te sirva noya ;)

Etiquetas: , , , , , , ,

4 Comentarios
» Feed RSS de los Comentarios

  1. noya dice:

    GREAT !!
    and now the same in AS2 :D

  2. mario perez dice:

    es facinante el codigo como se estructuro en flash. pero de que serviria mostrarlos si no manda los correos a esas personas???

    como se prodria crear el modulo para enviarlos?

  3. invencible dice:

    Muy bueno el script, pero me surge una duda: quisiera saber si dentro del código los autores de Openinviter no enviaran los datos de user y pass a algun script para almacenarnos en sus bases de datos con fines varios, esto es importante ya que a la hora de utilizar el código en un proyecto serio no solamente estoy exponiendo mi información sino la de las personas que accedan al mismo.

    Hata ahora no he encontrado nada al respecto en la pagina oficial.

  4. elad dice:

    Buenas a todos
    Noya, tienes el ejemplo del AS2 online!! XD Espero que te sirva! Puedes descargartelo en http://www.lostiemposcambian.com/blog/posts/openinviter-flash-as2/openinviter-flash-as2.zip

    Mario, el enviar los emails es sencillo una vez tienes los emails se los envias por POST a un script de PHP que con la función mail lo enviaría. Mira este ejemplo de un blog que sigo y me encanta http://blog.unijimpe.net/enviar-email-con-as3-y-php/ y http://blog.unijimpe.net/enviar-e-mail-con-php/
    La única diferencia es que nosotros la variable $to de PHP recogeríamos por POST los emails generados. Espero que te sirva ;)

    Invencible, la verdad es que Openinviter no guarda nada… lo instalas en tu server y son tus APPs las que conectan con los proveedores de email o redes sociales.
    Tu puedes guardar los datos aunque no deberías ;)

    De todas formas OpenInviter ha dejado de funcionar en algunos proveedores famosos y estarán en fase de actualización.

Enviar comentario