Perdón a todos por la
falta de actualización. Los temas se me han acabado literalmente y no recibo nuevas
preguntas. Podría hablar de varios juegos y temas muy dispares como las actualizaciones pero hasta Abril no hay versión nueva por lo que nos toca esperar.
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
Bien, usaremos PHP para trabajar con la
API privada de tuenti que han revelado con una clase muy sencilla.
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
<?php
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');
}
?>
Logotipo de favicon de tuenti. Podéis descargalo con el siguiente comando:
- wget http://estaticos2.tuenti.com/layout/web2/images/favicon.20425.png
Bien, ahora iremos a Aplicaciones > Herramientas del Sistema > Tareas programadas y añadiremos la siguiente:
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!