En cualquier caso, he estado trasteando con varios lenguajes y aprendiendo varias cosas. Me hubiera gustado traeros un monitor de actualizaciones de tuenti a la altura pero vamos, estamos en versión alpha y hemos usado varias herramientas, todo muy rudimentario.
En cualquier caso, aquí os traigo la explicación de lo que necesitamos:
- sudo apt-get install php5-cli
- sudo apt-get install php5-curl
- sudo apt-get install gnome-schedule
- sudo apt-get install zenity
Para todo esto, crearemos en nuestro directorio personal una carpeta llamada Tuenti que contendrá lo siguiente:
clase_tuenti.php
<?php
/*
* tuentiAPI Class
* Sergio Cruz aka scromega (scr.omega at gmail dot com) http://scromega.net
*
* More info:
* http://scromega.net/7-accediendo-a-la-api-cerrada-de-tuenti.html
*/
class tuentiAPI {
private $email, $password, $userData;
function __construct($email, $password) {
$this->email = $email;
$this->password = $password;
$tmp = $this->json('getChallenge', array('type'=>'login'));
$tmp = self::http($tmp);
$tmp = json_decode($tmp, true);
$passcode = md5($tmp[0]['challenge'].md5($password));
$appkey = 'MDI3MDFmZjU4MGExNWM0YmEyYjA5MzRkODlmMjg0MTU6MC4xMzk0ODYwMCAxMjYxMDYwNjk2';
$tmp = $this->json('getSession', array('passcode'=>$passcode,'application_key'=>$appkey,'timestamp'=>$tmp[0]['timestamp'],'seed'=>$tmp[0]['seed'],'email'=>$email));
$tmp = self::http($tmp);
$tmp = json_decode($tmp, true);
$this->userData = $tmp[0];
}
private static function http($post) {
$headers[] = "Content-length: ".strlen($post)."\r\n";
$headers[] = $post;
$ch = curl_init('http://api.tuenti.com/api/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
$result = curl_exec($ch);
if($result === false) die('Cannot execute request: '.curl_error($ch));
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $result;
}
private function json($method, $parameters) {
$array['requests'][0][0] = $method;
$array['requests'][0][1] = $parameters;
if(!empty($this->userData['session_id'])) {
$array['session_id'] = $this->userData['session_id'];
}
$array['version'] = '0.4';
return json_encode($array);
}
public function request($method, $parameters=array()) {
$tmp = $this->json($method, $parameters);
$tmp = self::http($tmp);
$tmp = json_decode($tmp, true);
return $tmp[0];
}
}
?>tuenti.php
<?phpLogotipo de favicon de tuenti. Podéis descargalo con el siguiente comando:
require_once("clase_tuenti.php");
$con = new tuentiAPI('tudirecciondemail@example.com', 'tupassword');
$r = $con->request('getUserNotifications', array());
$imprime = "Notificaciones tuenti:\n";
$salto=FALSE;
foreach ($r as $dato){
if ($dato['count'] > 0){
$salto=TRUE;
}
}
if ($r['unread_friend_messages']['count'] > 0){
$imprime .= "Mensajes de amigos: ".$r['unread_friend_messages']['count']."\n";
}
if ($r['unread_spam_messages']['count'] > 0){
$imprime .= "Mensajes de desconocidos: ".$r['unread_spam_messages']['count']."\n";
}
if ($r['new_profile_wall_posts']['count'] > 0){
$imprime .= "Comentarios: ".$r['new_profile_wall_posts']['count']."\n";
}
if ($r['new_friend_requests']['count'] > 0){
$imprime .= "Peticiones de amigo: ".$r['new_friend_requests']['count']."\n";
}
if ($r['new_photo_wall_posts']['count'] > 0){
$imprime .= "Fotos etiquetadas: ".$r['new_photo_wall_posts']['count']."\n";
}
if ($r['new_photo_wall_posts']['count'] > 0){
$imprime .= "Comentarios en fotos: ".$r['new_photo_wall_posts']['count']."\n";
}
if ($r['new_tagged_photos']['count'] > 0){
$imprime .= "Fotos etiquetadas: ".$r['new_tagged_photos']['count']."\n";
}
if ($r['new_event_invitations']['count'] > 0){
$imprime .= "Eventos: ".$r['new_event_invitations']['count'];
}
if ($salto){
exec('zenity --info --window-icon="/home/TuUsuario/Tuenti/favicon.20425.png" --text "'. $imprime .'" --timeout 20');
}
?>
- wget http://estaticos2.tuenti.com/layout/web2/images/favicon.20425.png
Descripción: Tuenti Monitor
Comando: php "/home/TuUsuario/Tuenti/tuenti.php"
Básico: Cada minuto
Aceptaremos y a partir de ahora si lo hemos hecho bien nos aparecerá una ventana notificándonos las actualizaciones.
Si te resultara muy molesto el tipo de advertencia lo puedes cambiar por un icono en el área de notificaciones. Para ello en tuenti.php habría que modificar la línea del exec y dejarla así:
exec('zenity --notification --window-icon="/home/TuUsuario/Tuenti/favicon.20425.png" --text "'. $imprime .'" --timeout 20');Por último recapitulemos. Necesitamos 2 archivos en php y un archivo png. Para poder ejecutar todo bien necesitaremos lo que arriba describí. Todos los archivos deberán ir dentro de la carpeta Tuenti que irá dentro de la carpeta de usuario.
Todo lo que está en color rojo tendrá que ser modificado por ti para poder usarlo. TuUsuario en mi caso por -> zeyt y en tuenti.php tu usuario y contraseña para tuenti.
Si tienes alguna pregunta no dudes en comentar y si quieres dar el salto y crear la aplicación en PyGtk, bienvenido seas!
Cómo puedo saber mi session_id??
ResponderEliminares porque quiero usar jabber para conectarme al chat del tuenti sin tener que abrirlo
Hola, yo también ando trabajando en algo parecido. Para saber cual es tu sssid primero conectate con curl. Abre la cookie y coge con explode el id.
ResponderEliminarAsí mismo parsea el html para coger el servidor de jabber de tuenti. Avsame como vas en tu proyecto que me interesa ;)
ein?
ResponderEliminarcomo puedo conectarme con curl?
esk puse "getSession" y dice "getSession no es válida para la version del API" y me dice "Error 303"
si tengo todo, tengo mi user_id ( lo consigues entrando en tu perfil desde otro usuario)el xmpp2.tuenti.com, PERO LA CONTRASEÑA DEL JABBER ES EL SESSION_ID!
ResponderEliminarYo al final dejé de usar la API, no me gustó. http://donzeyt.blogspot.com/2010/03/presentacion-chivato-tuenti-by-zeyt.html -> Aquí me conecto con curl y cojo lo que quiero (es cutre pero funciona, basate en esta)
ResponderEliminary si no te molesta, como puedo andar con el curl??
ResponderEliminarpor favor!!
:3
¿Por algún casual sabrías la llamada para devolver todos los contactos de Tuenti?
ResponderEliminar