javiercampos.es/blog

PHP

Cómo exportar la lista de amigos de tuenti

by javier on Dec.08, 2009, under 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&uacute;mero m&aacute;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&uacute;mero m&aacute;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&oacute;n en una p&aacute;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&uacute;mero m&aacute;ximo).<br><br>
        <a href="<?=NOMBRE_FICHERO?>">volver</a><?
    }
    else{
        ?><br><br>Para guardar esta lista, utiliza la opci&oacute;n de tu navegador web (Men&uacute; "Archivo | Guardar como").<?
    }
    ?></body></html><?
}
else{ // si no... pedir usuario y contraseña
    mostrarFormularioUsuarioPassword();
}
?>
9 Comments más...

¿Buscando algo?

Usa este formulario para buscar en el blog

¿No encuentras lo que buscas? Deja un comentario en el post o envíame un email.

Links recomendados