Cómo exportar la lista de amigos de tuenti
publicado por javier (Dec.08, 2009), en PHP
A finales de 2008 desarrollé una aplicación para Facebook que permitía mostrar en tu perfil la lista de tus amigos en Tuenti. Esta aplicación, llamada “Amigos Tuenti”, ha estado disponible hasta el viernes pasado (04/12/2009) cuando alguien me “invitó” a eliminarla.
“Amigos Tuenti” era la solución ideal para asociar una cuenta de tuenti a una de facebook. Esto implicaba muchas ventajas. Por ejemplo, se podría utilizar la API de Facebook junto con la aplicación “Amigos Tuenti” para desarrollar nuevas aplicaciones para tuenti: ver amigos en común (hace unos meses esto no existía), añadir mis amigos de tuenti a facebook y viceversa, etc.
Sin embargo, por temor a que el número de peticiones a Tuenti se disparara (y esto les molestase), limité la funcionalidad de “Amigos Tuenti” a algo muy sencillo: mostrar en tu perfil de Facebook a 5 de tus amigos de tuenti (nombre y link a su perfil en tuenti). Además, esta solución no requería almacenar ningún tipo de información (algo que también hubiese molestado).
Miles de usuarios de Facebook y Tuenti han utilizado esta aplicación durante los meses que ha estado funcionando (las últimas semanas dejó de funcionar debido a unos cambios en Tuenti).
Pero el pasado viernes recibí un email de la Directora Jurídica y de Privacidad de Tuenti, pidíendome que eliminara la aplicación. Así lo he hecho, tras leer detenidamente las Condiciones de Uso y de privacidad de Tuenti. Estas condiciones han cambiado desde la última vez que las consulté, y entre otras cosas, ahora prohiben publicar en una red social un enlace a un perfil de tuenti.
Total, que “Amigos Tuenti” ha muerto. Aquí os dejo el código fuente de un script PHP con el que podéis exportar la lista completa de vuestros amigos de Tuenti. Lo he creado a partir del código fuente de la aplicación “Amigos Tuenti”. Usadlo con fines educativos, bajo vuestra responsabilidad y sólo si entendéis y aceptáis las condiciones de uso de Tuenti.
un saludo!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | <? /* Script PHP para exportar la lista de amigos de tuenti. * * Instrucciones: Subir este fichero a un servidor web y ejecutar. Pedirá el usuario y * contraseña de tuenti y devolverá la lista completa de amigos (nombres y links a sus perfiles) * * Advertencia: Utiliza esto bajo tu responsabilidad. Este script ha sido desarrollado con fines educativos *(ilustra la posibilidad de iniciar sesión en una página web desde un script PHP). * Eres libre para distribuir y/o modificar este script. * Antes de utilizarlo, consulta las condiciones de uso de Tuenti. * * NO ES ENCESARIO EDITAR ESTE FICHERO!! */ define('NOMBRE_CARPETA_COOKIES', "cookies"); define('PATH_COOKIES', getcwd(). "/" . NOMBRE_CARPETA_COOKIES . "/"); // carpeta donde se almacenará la cookie temporalmente (se borra automáticamente). define('NOMBRE_FICHERO', $_SERVER["SCRIPT_NAME"]); define('API_URL', 'http://m.tuenti.com/?m=login&func=process_login'); define('URL_AMIGOS', 'http://m.tuenti.com/?m=friends'); define('PREFIJO_LINK_AMIGO','?m=profile&user_id='); define('NUEVO_PREFIJO_LINK_AMIGO','http://www.tuenti.com/#m=Profile&func=index&user_id='); define('INFO_NAVEGADOR', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729'); /* iniciar_sesion_tuenti() * Inicia sesión y almacena en 'ruta_cookie' la cookie * @user: usuario en tuenti (dirección de email). * @pass: contraseña en tuenti. * @ruta_cookie: ruta del fichero en el que se almacenará la cookie de tuenti. */ function iniciar_sesion_tuenti($user, $pass, $ruta_cookie){ $datos="tuentiemail=$user&password=$pass"; $ch = curl_init(); curl_setopt ($ch, CURLOPT_USERAGENT, INFO_NAVEGADOR); curl_setopt($ch, CURLOPT_COOKIEJAR, $ruta_cookie); curl_setopt($ch, CURLOPT_URL,API_URL); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $datos); ob_start(); curl_exec ($ch); ob_end_clean(); curl_close ($ch); unset($ch); } /*--------------------------------------------------------------------*/ /* listar_amigos() * Obtiene la lista de amigos. * @ruta_cookie: ruta donde encontrar la cookie de tuenti. * @max_iteraciones: número de páginas de amigos que se van a analizar. */ function listar_amigos($ruta_cookie,$max_iteraciones){ $total = 0; // número total de amigos encontrados $iteraciones = 0; // no debe superar $max_iteraciones do{ $url_actual = URL_AMIGOS . "&page=$iteraciones"; $ch = curl_init(); $str = array( "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3", "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7", "Keep-Alive: 300", "Connection: keep-alive" ); curl_setopt($ch, CURLOPT_HTTPHEADER, $str); curl_setopt ($ch, CURLOPT_USERAGENT, INFO_NAVEGADOR); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_COOKIEFILE, $ruta_cookie); curl_setopt($ch, CURLOPT_URL,$url_actual); $buffer = curl_exec ($ch); curl_close ($ch); $doc = new DOMDocument(); @$doc->loadHTML($buffer); $count = $total; foreach($doc->getElementsByTagName('a') as $link) { $href = $link->getAttribute('href'); if(stristr($href, PREFIJO_LINK_AMIGO) !== FALSE) { $nombre = $link->firstChild->nodeValue; $uid = substr($href,strlen(PREFIJO_LINK_AMIGO)); ?><a href="<?=NUEVO_PREFIJO_LINK_AMIGO . $uid?>" target="_blank"><?=$nombre?></a><br><? $count++; } } if($count == $total){ // si no se ha encontrado nada en la ultima iteración... terminar ?><br><b><?=$total?> amigos encontrados.</b><br><br><? return $total; } else{ // si se han encontrado amigos nuevos en esta iteración... $total = $count; } $iteraciones ++; }while($iteraciones < $max_iteraciones); ?><br>Se ha alcanzado el número máximo de amigos exportados: <?=$total?>.<? return $total; } /*--------------------------------------------------------------------*/ function inicioHtml(){ ?><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Exportar Amigos Tuenti</title> <style type="text/css"> *{ font-family: Arial,Helvetica,sans-serif; font-size: 12px; } body{ background-color:#64A3CF; color: #FFFFFF; } a { color: #FFFFFF; text-decoration: underline; } </style> </head> <body><? } /*--------------------------------------------------------------------*/ /*obtener_amigos_tuenti() * Inicia sesión en tuenti y muestra la lista de amigos. Crea carpeta para cookie si no existe. */ function obtener_amigos_tuenti($user, $pass,$max_iteraciones){ // crear carpeta 'cookie' y protegerla if(is_dir(PATH_COOKIES) == false){ mkdir(PATH_COOKIES); // crear carpeta para cookie temporal } // denegar acceso a la carpeta cookies mediante .htaccess $fp = fopen(PATH_COOKIES . ".htaccess", "w"); fwrite( $fp, "Deny from all"); fclose($fp); // ruta y nombre único para la cookie $ruta_cookie = PATH_COOKIES . md5(uniqid(mt_rand(), true)); iniciar_sesion_tuenti($user,$pass, $ruta_cookie); $num_amigos = listar_amigos($ruta_cookie,$max_iteraciones); // borrar la cookie unlink($ruta_cookie); // si se han encontrado amigos... true; si no hay amigos... devolver false return $num_amigos!=0; } /*--------------------------------------------------------------------*/ /* mostrarFormularioUsuarioPassword() * Muestra el formulario para el inicio de sesión. */ function mostrarFormularioUsuarioPassword(){ ?><b>Introduce tus datos de tuenti para exportar tu lista de amigos:</b><br><br> <form action="<?=NOMBRE_FICHERO?>" method="post"> <table border="0" align="left"> <tbody><tr> <td>email:</td> <td><input type="text" name="a"/></td> </tr> <tr> <td>password:</td> <td><input type="password" name="b"/></td> </tr> <tr> <td>número máximo de amigos a exportar:</td> <td><input type="text" name="num" value="20"/></td> </tr> <tr> <td/> <td><input type="submit" value="exportar amigos tuenti"/></td> </tr> </tbody></table> </form> <br> <div style="margin: 100px 0 0 0;"><b>Advertencia:</b> Utiliza esto bajo tu responsabilidad. Este script ha sido desarrollado con fines educativos (ilustra la posibilidad de iniciar sesión en una página web desde un script PHP). Eres libre para distribuirlo y/o modificarlo. Antes de utilizarlo, consulta las condiciones de uso de Tuenti.</div> </body></html><? } /*--------------------------------------------------------------------*/ inicioHtml(); // si el usuario ha introducido su email, contraseña y número... mostrar amigos tuenti if(isset($_POST["a"]) && isset($_POST["b"]) && isset($_POST["num"]) && is_numeric($_POST["num"])){ $ret = obtener_amigos_tuenti($_POST["a"], $_POST["b"], $_POST["num"]/5); if($ret == false){ ?>Error al exportar amigos :( .<br>Revisa tu datos (email, password y número máximo).<br><br> <a href="<?=NOMBRE_FICHERO?>">volver</a><? } else{ ?><br><br>Para guardar esta lista, utiliza la opción de tu navegador web (Menú "Archivo | Guardar como").<? } ?></body></html><? } else{ // si no... pedir usuario y contraseña mostrarFormularioUsuarioPassword(); } ?> |
December 10th, 2009 el 5:23 pm
Mira como para eso la Directora de privacidad y no se que y no se cuantos como si actua y para la gente que da por culo y mira como no hace nada que vergüenza!
December 11th, 2009 el 3:55 am
Mil gracias por publicar el código fuente, de verdad. Ahora ya la caña sería poder enviarles un privado automático a todos tus amigos
December 13th, 2009 el 4:15 pm
@Javier Loriente: de nada, hombre. Lo que dices de permitir el envío de mensajes a todos tus amigos de tuenti no me parece una buena idea. Sólo daría lugar a más spam en esta red social, y con los eventos ya tenemos bastante :s
December 16th, 2009 el 12:10 am
Hola javier, estoy dandole algunos retoque a tu codigo, ya que quiero aparte de mostrar el nombre y apellid junto con su link… que aparezca tambien su edad.Se un poquillo de php y javascript, pero nose cual es la varible que contiene la edad detro del perfil… si me podrías dar una pequela ayuda te lo agradecería.
Un saludo
December 20th, 2009 el 10:41 pm
@josh: hola josh. Para consultar la edad tendrías que acceder al perfil de cada uno de tus amigos. Como habrás observado tras estudiar mi código, éste lo que hace es acceder a las páginas de listado de amigos (no a todos los perfiles de tus amigos). Si sigues adelante con tu idea, verás que la edad de tus amigos puedes obtenerla de la siguiente forma: Acceder a su perfil (http://m.tuenti.com/?m=profile&user_id=XXX donde XXX es el ID de tu amigo), buscar la cadena “Cumpleaños”, y analizar la fecha que le sigue. Actualmente las fechas de nacimiento tienen este formato: “D de MMM, AAAA” (D es el día del mes, MMM son las primeras letras del mes, y AAAA es el año de nacimiento).
February 10th, 2010 el 5:57 pm
Buenas! Gracias por compartir tu código. Me gustaría saber si tu script goza de alguna licencia de software libre (la idónea para este caso sería AGPL). En ese caso me gustaría utilizar tu código para la red social que estoy desarrollando. También me gustaría que me proporciones un pequeño “texto” donde se reconozca que eres el autor original y esas cosas (si quieres), ya que tengo pensado modificar bastante tu script pero respeto la autoría original.
Un saludo!
March 5th, 2010 el 3:32 am
Hola Javier! Me gustaría saber si podrías perfeccionar el código y hacerlo de tal manera que te permita elegir entre exportar el listado de chicas, el listado de chicos y el listado de ambos. Mi problema es que tengo más de 500 amigos en mi cuenta y para ello tengo que copiarme a mano el resto de amigos y es un coñazo! Graicas, saludos y enhorabuena porque está chulísimo!
April 3rd, 2010 el 11:06 am
Hola, sabéis si ejecutando esto puedes ser de alguna manera “identificado” de tal manera que suspendan tu cuenta tuenti ???? o no hay manera alguna de hacerlo?
April 3rd, 2010 el 2:16 pm
@Mario: bueno, prodrían identificarte si cambian los parámetros de la llamada. Ahora mismo la consula a tuenti se hace así:
http://m.tuenti.com/?m=login&func=process_login&tuentiemail=TU_EMAIL&password=TU_PASSWORD
Si lo cambiasen (lo han hecho alguna vez ya) te detectarían. Pero no sé, espero que dediquen su tiempo y esfuerzo a eliminar eventos tontos del tuenti en lugar de perseguirte por ejecutar este script