Investigando Tuenti
Esta noche después de cenar retomé mis investigaciones acerca de Tuenti. Hace tiempo estuve tratando de empezar a montar una API para Mono/.NET para interactuar con Tuenti. El tema es que la API hay que hacerla totalmente a mano, ya que Tuenti actualmente no dispone de API pública.
En capítulos anteriores no narrados en el blog…
En su momento para hacer pruebas de recuperar la respuesta HTTP que manda me puse a lanzar requests desde mi librería a ver que me respondía. El caso es que siempre me mandaba a la página de Login (al menos no me ignora diciendo que no estoy usando un navegador soportado). En un principio quería forzar la autenticación, simplemente para tratar de parsear el HTML de la página de inicio de Tuenti una vez se está logueado. Para ello fui al Chrome eché un vistazo a las Cookies que tiene guardadas de Tuenti y las cree a pelo y las añadi al HTTPWebRequest. Así conseguí que mandase de respuesta la página de inicio de Tuenti. BIEN.
Teoricamente la respuesta según la cabecera del HTML de respuesta debería de ser XHTML. Si fuese XHTML esto debería de poder ser parseado tal cual como un XML. El caso es que la respuesta no es XML válido. Me imagino que eliminan algunos tags con el fin de ahorrar algunos bytes en la transferencia (esto fue a raíz de una conversación que tuve esta tarde con mi colega raziel). Así que el parseador XML de .NET/Mono lanza una excepción diciendo que el XML no es válido y no puede parsearlo.
Recuperando la lista de últimas novedades
Para solucionar el problema de la validación de XML utilicé una librería llamada SGMLParser. Ahora al fin conseguí tener XML válido. Por alguna razón al tratar de recuperar un XmlElement con GetElementById(“friends_updates”)… es curioso pero no lo encontraba. Así que decidí recuperar la lista de hijos del nodo raíz y recuperar sólo los hijos de aquel nodo que tuviese un atributo “id” con el valor “friends_updates”. Esto si que funcionó. Conseguí recuperar la lista de últimas actualizaciones de Tuenti.
Tratando de realizar la autenticación
Para poder saber como se autentica Tuenti me fui al Firefox con su maravillosa extensión Tamper Data. Al mandar la autenticación tamper data detecta que se está enviando un POST a la siguiente URL
https://www.tuenti.com/#m=login&func=do_login
La información que envía en este post es la siguiente:
email=tudireccion@mail.com input_password=tupassword timezone=1 (esta es la que identifican como hora española insular) remember=1 (esto está a 1 si marcaste recordar o a 0 si no lo marcaste en el formulario de login)
El problema de esto viene en que si yo quiero replicar eso tendré que hacerlo por sobre una conexión SSL. El tema es que no tengo claro como hacerlo. A ver si cuando tenga tiempo sigo investigando sobre el tema en profundidad.
Sorpresa colateral sobre Tuenti Chat
Para ver con un poco más de detalle como realiza la autenticación el Tuenti, le tocó el turno a Wireshark. Ese fue el verdadero momento de sacar la artillería pesada. Tras ponerle un filtro al Wireshark para evitar toda la mierda que estaría mandando por red el empathy, banshee, y resto de páginas que usen AJAX, filtré el contenido por Http.Request y Http.Method==”POST”.
Con este filtro no conseguí nada útil en cuanto al tema del Login. Pero encontré información interesante acerca de Tuenti Chat. Tuenti Chat trabaja sobre protocolo XMPP. Ese protocolo de mensajería instantanea que tan de moda está de nuevo gracias a Google Talk y que Facebook también usa para su chat interno. Ahora mismo van los datos que conseguí sacar acerca de como autenticarse con el servidor XMPP de Tuenti. De todas formas este intento fue fallido también… me debe de faltar algún detalle, a ver si cuando tenga tiempo reviso con más calma el cliente que está empotrado en la página de Tuenti, tanto su código javascript como los Requests que manda al servidor XMPP.
Nombre de usuario: idusuario&xmpp##.tuenti.com%idusuario%identificadorDeSesion Contraseña: Contraseña de la cuenta me imagino Servidor: Aquí no tengo claro si hay que usar chat##.tuenti.com o xmpp##.tuenti.com. Al menos con chat##.tuenti.com conseguí que se quede intentando conectar el empathy. Puerto: 5222 La autenticación SSL en teoría va desactivada. Según parece el envio de información se hace directamente en texto plano.
## -> Es un número que va desde 1 hasta 12… eso depende de cual te asigne tuenti, dependiendo de la carga de los servidores me imagino. Recordemos el tráfico que soportan los servidores de Tuenti, que es abrumador.
% -> Es un símbolo que la configuración de caracteres de Linux tal y como la tengo no me lo pilla.
Y todo esto con que motivo lo hago?
Principalmente lo hago por la ausencia de una API pública de Tuenti. Y actualmente no hay otra manera de conectarse y recuperar información de él desde una aplicación que tu mismo estés desarrollando. Aún así espero que en algún futuro se dignen a liberar la API.
EDIT:
Ya tengo un método de autenticación que igual me vale. Sacado del código fuente del famoso TuentiPlus.



Muy buena iniciativa, te dejo algunos enlaces que no se si conoces y pueden serte de utilidad;
http://www.tuentiadictos.es/phptuenti-api-no-oficial-de-tuenti/
http://www.tuentiadictos.es/conectarse-al-chat-de-tuenti-usando-php/
Si tienes alguna novedad te agradecería si nos lo comunicas.
Saludos
Gracias por vuestro interés, y no os preocupeis. Según vaya avanzando os iré informando.
Y gracias también por los links.
Curiosamente yo también estaba indagando en el tema… sería interesante poder usar el chat desde un cliente Jabber/XMPP cualquiera. ¿En ID usuario qué dato hay? ¿El email de la cuenta? Me preocupa el tema del arroba en el email…
Saludos.
La ID de usuario es la ID de tu cuenta de tuenti. Si te fijas cuando accedes a otros perfiles y demás, en la barra de dirección hay un parámetro que es uid=XXXXXX donde XXXXX sería la ID de usuario. Con esto ya tendríamos la ID.
El problema es que hay que hacer esa complicada combinación que mostré arriba… y por culpa de esos dos caracteres que me faltan no puedo conectarme.
Si consigo hacer conectar eso, podría hacer un plugin para Pidgin o Empathy que recuperase una Cookie para conectarse para obtener el SID y poder realizar la cadena de conexión correctamente.
Por ahora estoy investigando más en la linea de crear mi propia API, lo de Tuenti para pidgin y empathy no es una prioridad por ahora.