Comunidad PHPeros

Lenguajes => PHP => Tutoriales PHP => Mensaje iniciado por: kekoman en 28 de Diciembre de 2009, 12:26:55 pm

Título: Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: kekoman en 28 de Diciembre de 2009, 12:26:55 pm
Buenas, la mayoría de las personas que viven en España conocen la famosa red social tuenti. En el tuenti hay un chat que fue añadido hace un par de meses y que usa un servidor XMPP.
(http://lcp.s3.amazonaws.com/are16ocean%2Ff%2F07e7833088368c28c8b4914abb290c09.jpg)
En este tutorial os voy a enseñar como conectarse al chat de tuenti usando la libreria xmpphp (http://code.google.com/p/xmpphp/)
Un pequeño ejemplo:

<?php
include("xmpp.php");
$conn = new XMPPHP_XMPP('xmpp1.tuenti,com', 5222, 'username', 'password', 'xmpphp', 'tuenti.com', $printlog=False, $loglevel=LOGGING_INFO);
$conn->connect();
$conn->processUntil('session_start');
$conn->disconnect();
?>

Nos falta poner nuestro usuario y contraseña, pero el chat de tuenti usa un PLAIN METHOD para el login y por lo tanto solo debemos poner una clave que tiene la siguiente estructura:
idusuario@host?idusuario?cookietuenti
por ejemplo:
Citar
66171907@xmpp9.tuenti.com?66171907?NjYxNzE5MDc6YTdmYzdjY2Q9ZhVkYzA3ZDY5Y0QyZWFhNzJkYmQ2NDY1MTI2MTg2NjUwMA
Y todo esto codificado en base64, por lo tanto tenemos que editar la librería XMPP y en la linea 282 de XMPP.php sustituimos esto:

if ($this->password) {
$this->send("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>" . base64_encode("\x00" . $this->user . "\x00" . $this->password) . "</auth>");
} else {
                        $this->send("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='ANONYMOUS'/>");
}

por esto:

$this->log->log("Attempting Auth...");
$id = reset(explode(':', base64_decode($this->password)));
$coo = base64_decode('eHh4eHh4eHhAeG1wcDkudHVlbnRpLmNvbQB4eHh4eHh4eABjb29raWU');
$coo = str_ireplace('xxxxxxxx', $id, $coo);
$coo = str_ireplace('cookie', $cookie, $coo);
$coo = base64_encode($coo);
$this->send("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>" . $coo . "</auth>");


Ahora para iniciar sesión en el chat necesitamos el cookie sid de tuenti.com. Para no estar buscando el cookie en las opciones de nuestro navegador podemos escribir en la barra de direcciones cuando estemos en tuenti.com: javascript:alert(document.cookie); y copiamos la cookie sid sin el punto y coma y el igual y nuestro codigo quedaria asi:

<?php
include("xmpp.php");
$conn = new XMPPHP_XMPP('xmpp1.tuenti,com', 5222, NULL, 'NjI5ODUwNDU6MDRiMDRmNjBlZTZmOGNhZGQxY2MxNzU3MGFmZDM2N2Y6MTI2MTk5NjU3Mg', 'xmpphp', 'tuenti.com', $printlog=False, $loglevel=LOGGING_INFO);
$conn->connect();
$conn->processUntil('session_start');
$conn->message('66171907', 'This is a test message!');
$conn->disconnect();
?>


Para enviar un mensaje:

$conn->message('66171907', 'This is a test message!');


Mas ejemplos y descargar la libreria: http://code.google.com/p/xmpphp/
Un saludo!
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: Siquillote en 28 de Diciembre de 2009, 12:29:37 pm
Que bueno :O un karma + :)
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: x.mara.x en 28 de Diciembre de 2009, 14:40:28 pm
buenisimo! + karma
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: broo en 28 de Diciembre de 2009, 19:09:01 pm
Una pregunta, como se supoone que me registro en tuenti?
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: kekoman en 28 de Diciembre de 2009, 19:19:44 pm
te tiene que invitar alguien jeje
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: broo en 28 de Diciembre de 2009, 19:49:33 pm
te tiene que invitar alguien jeje

O.o! quien me invita JIJI "davidgg_963@hotmail.com"
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: CarlosRdrz en 28 de Diciembre de 2009, 21:42:17 pm
Muy bueno kekoman, es muy curioso, te doy karma+! :)

Saludos
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: westwest en 28 de Diciembre de 2009, 21:46:59 pm
Segun he visto, los servidores son xmpp1.tuenti.com, talk.google.com, ¿Como se los servidores? ¿Como se "hace" uno? :S
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: kekoman en 28 de Diciembre de 2009, 22:39:07 pm
El unico problema es que hay varios servidores xmpp1.tuenti.com, xmpp2.tuenti.com, xmpp3.tuenti.com .........! Y no funcionan todos con todos los usuarios  :-[
Segun he visto, los servidores son xmpp1.tuenti.com, talk.google.com, ¿Como se los servidores? ¿Como se "hace" uno? :S
Ni idea  :D Entra en esta pagina para mas informacion http://xmpp.org/software/servers.shtml
Un saludo y gracias por las karmas!
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: x.mara.x en 29 de Diciembre de 2009, 11:50:24 am
pues no se podria hacer algo con un for para verificar si el usuario esta registrado en ese servidor?
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: kekoman en 29 de Diciembre de 2009, 12:39:46 pm
si! tienes razon. no lo habia pensado jeje
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: Tope en 29 de Diciembre de 2009, 14:54:46 pm
El chat de tuenti son varios servidores (Jabber) y una librería js que actúa de Cliente Jabber.

Un inconveniente, no se ve el nombre de los usuarios conectados, se veria la ID puesto que la id es el usuario xD

De todos modos, es un buen sistema para conectarse ;)
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: kekoman en 29 de Diciembre de 2009, 19:19:03 pm
Un inconveniente, no se ve el nombre de los usuarios conectados, se veria la ID puesto que la id es el usuario xD
Menos mal que yo ya lo habia pensado jeje!

<?php
function get_info_user($id, $type='nombre') {
$ch = curl_init();
$exp = explode('@xmpp', $id);
$id = $exp[0];
curl_setopt($ch, CURLOPT_URL, 'http://m.tuenti.com/?m=profile&user_id='.$id);
curl_setopt ($ch, CURLOPT_COOKIEFILE, getcwd().'/cookie.txt');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
curl_close($ch);
switch($type) {
case 'nombre':
$n = explode('<div class="h">', $html);
$n2 = reset(explode('</div>', $n[1]));
return $n2."($id)";
break;
case 'img':
$img = explode('id="profile_img" src="', $html);
$img2 = reset(explode('" alt', $n[1]));
return $img2;
break;
}
}
?>
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: chihue en 29 de Diciembre de 2009, 19:34:17 pm
Quien quiera una invitacion que me mande un MP
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: marco811 en 19 de Abril de 2010, 16:01:03 pm
El codigo lo he mejorado mucho y ya solo con poner tu nombre de usuario de tuenti y la contraseña vale, nisiquiera hay que complicarse buscando cual es el servidor xmpp que tuenti no asigna. Enseguida voy a crear un tema nuevo publicando el codigo mejorado.
Un saludo!
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: nietecito7 en 27 de Abril de 2010, 15:46:47 pm
Buenas,
¿Alguien ha conseguido conectarse y obtener la lista de usuarios conectados y enviar mensajes?
Si es así, agradecería que pasaran el código o me ayudaran, ya que no consigo hacerlo funcionar.

Gracias.
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: marco811 en 27 de Abril de 2010, 15:53:48 pm
yo si que lo he conseguido hace unas semanas, pero el problema es que el codigo lo tengo en casa  :) y ahora estoy en el trabajo. cuando llego a casa lo miro y te paso el codigo  :D
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: nietecito7 en 27 de Abril de 2010, 16:00:18 pm
yo si que lo he conseguido hace unas semanas, pero el problema es que el codigo lo tengo en casa  :) y ahora estoy en el trabajo. cuando llego a casa lo miro y te paso el codigo  :D

Muchisimas gracias, te lo agradezco mucho.  ;)
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: nietecito7 en 28 de Abril de 2010, 18:04:08 pm
A propósito, tu código puede obtener la lista de amigos conectados? :O
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: marco811 en 28 de Abril de 2010, 18:40:35 pm
No es mi codigo  :) XMPPHP si que puede hacerlo, de echo hize un chat que lo hacia y te lo mostraba en vivo, pero solo me faltaba dos cositas y he tirado la toalla  :P
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: nietecito7 en 28 de Abril de 2010, 20:06:38 pm
Ah , entiendo. Bueno pues cuando tengas tiempo ya lo compartirás :)
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: marco811 en 30 de Abril de 2010, 13:15:52 pm
Con el siguiente codigo puedes extraer los usuarios conectados/desconectados y los mensajes  :P

while(!$conn->disconnected) {
    $payloads = $conn->processUntil(array('message', 'presence', 'end_stream', 'session_start'));
    foreach($payloads as $event) {
        $pl = $event[1];
        switch($event[0]) {
            case 'message':
                print "---------------------------------------------------------------------------------\n";
                print "Message from: {$pl['from']}\n";
                if($pl['subject']) print "Subject: {$pl['subject']}\n";
                print $pl['body'] . "\n";
                print "---------------------------------------------------------------------------------\n";
                $conn->message($pl['from'], $body="Thanks for sending me \"{$pl['body']}\".", $type=$pl['type']);
                if($pl['body'] == 'quit') $conn->disconnect();
                if($pl['body'] == 'break') $conn->send("</end>");
            break;
            case 'presence':
                print "Presence: {$pl['from']} [{$pl['show']}] {$pl['status']}\n";
            break;
            case 'session_start':
                $conn->presence($status="Cheese!");
            break;
        }
    }
}
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: nietecito7 en 01 de Mayo de 2010, 12:59:18 pm
El código está muy bien, pero tengo problemas con el:

Fatal error: Cannot access protected property XMPPHP_XMPP::$disconnected in C:\AppServ\www\tuentichat\sample.php on line 5

¿A que se debe?
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: marco811 en 01 de Mayo de 2010, 13:13:14 pm
cambia la propiedad discconect de private a public en el archivo XMLStream.php
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: nietecito7 en 01 de Mayo de 2010, 13:24:23 pm
Sí! Era eso.
Creo que los de Tuenti han modificado alguna propiedad, ya que el código ya no funciona. :(
Estoy utilizando tu versión modificada para Tuenti Chat y este es mi código:
Código: [Seleccionar]
<?php
include("XMPPHP/XMPP.php");
$conn = new XMPPHP_XMPP(NULL5222, &#39;*****&#39;, &#39;*****&#39;, &#39;xmpphp&#39;, NULL, $printlog=True, $loglevel=LOGGING_INFO);
$conn->connect();
while(!
$conn->disconnected) {
    
$payloads $conn->processUntil(array(&#39;message&#39;, &#39;presence&#39;, &#39;end_stream&#39;, &#39;session_start&#39;));
    
foreach($payloads as $event) {
        
$pl $event[1];
        switch(
$event[0]) {
            case &
#39;message&#39;:
                
print "---------------------------------------------------------------------------------\n";
                print 
"Message from: {$pl[&#39;from&#39;]}\n";
                
if($pl[&#39;subject&#39;]) print "Subject: {$pl[&#39;subject&#39;]}\n";
                
print $pl[&#39;body&#39;] . "\n";
                
print "---------------------------------------------------------------------------------\n";
                
$conn->message($pl[&#39;from&#39;], $body="Thanks for sending me \"{$pl[&#39;body&#39;]}\".", $type=$pl[&#39;type&#39;]);
                
if($pl[&#39;body&#39;] == &#39;quit&#39;) $conn->disconnect();
                
if($pl[&#39;body&#39;] == &#39;break&#39;) $conn->send("</end>");
            
break;
            case &
#39;presence&#39;:
                
print "Presence: {$pl[&#39;from&#39;]} [{$pl[&#39;show&#39;]}] {$pl[&#39;status&#39;]}\n";
            
break;
            case &
#39;session_start&#39;:
                
$conn->presence($status="Cheese!");
            break;
        }

    }
}
?>

Y lo único que hace es cargar una página en blanco :S
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: jesus1o1 en 19 de Agosto de 2011, 16:13:35 pm
Buenas.

Sigue funcionando esto?

Si es así alguien seria tan amable de pasarme lo que tenga o algún ejemplo funcional, quiero realizar una página para acceder desde moviles que no tienen la aplicación de tuenti disponible y así acceder al chat.

También si sigue funcionando probare a realizar algo para pc.

Un saludo y gracias.


EDITO: Debería de haber posteado en este hilo: http://www.phperos.net/foro/index.php?topic=5676.0 perdon por el fallo.
Título: Re:Libreria XMPPHP para conectarse al chat de tuenti
Publicado por: nmartin021 en 08 de Septiembre de 2011, 12:48:01 pm
K+ :D