<?
/* 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();
}
?>