Código
/* Google Reader in NodeJS by WHK */ var http = require("http"); var https = require("https"); /* Configuración */ var sesion = { SID : '', LSID : '', Auth : '', token : '' }; var bufferIO = ''; var obNoticias = {}; var loginData = { mail : 'correo@gmail.com', pass : '**********' }; console.log(' - Conectando al servidor de Google Reader ...'); https.get('https://www.google.com/accounts/ClientLogin?service=reader&source=reader&Email=' + escape(loginData.mail) + '&Passwd=' + escape(loginData.pass), function(res){ /* esperando un HTTP 200 */ if(res.statusCode == 200){ console.log(' - Obteniendo llaves de acceso ...'); /* Procesa el contenido */ res.on('data', function(chunk){ bufferIO += chunk.toString() + ''; }).on('end', function(){ bufferIO = bufferIO.trim(); /* Limpia el buffer de cualquier basura extra */ /* Autentificado? */ if(bufferIO == 'Error=BadAuthentication'){ console.log(' - Clave de acceso erronea.'); return false; } var partes = bufferIO.split('\n'); if(!partes.length){ console.log(' - Imposible ingresar, google no ha respondido correctamente.'); return false; } bufferIO = ''; /* Limpia la memoria */ var linea; for(_id in partes){ linea = partes[_id].trim().split('='); if((linea[0] == 'SID') || (linea[0] == 'LSID') || (linea[0] == 'Auth')){ sesion[linea[0]] = linea[1]; } } console.log(' - Obteniendo token de seguridad ...'); http.get({ host : 'www.google.com', port : 80, path : '/reader/api/0/token', headers: { 'Authorization': 'GoogleLogin auth=' + sesion['Auth'] } }, function(res2){ /* esperando un HTTP 200 */ if(res2.statusCode == 200){ /* Procesa el contenido */ res2.on('data', function(chunk2){ bufferIO += chunk2.toString() + ''; }).on('end', function(){ sesion['token'] = bufferIO; console.log(' - Acceso concedido!'); bufferIO = ''; /* Limpia la memoria */ console.log(' - Obteniendo temas ...'); /* ############################ Obtiene las noticias ############################ */ http.get({ host : 'www.google.com', port : 80, path : '/reader/api/0/stream/contents/user/-/state/com.google/reading-list?ck=' + Math.floor(new Date().getTime() / 1000), headers: { 'Authorization': 'GoogleLogin auth=' + sesion['Auth'] } }, function(res3){ /* esperando un HTTP 200 */ if(res3.statusCode == 200){ bufferIO = ''; /* Procesa el contenido */ res3.on('data', function(chunk3){ bufferIO += chunk3.toString() + ''; }).on('end', function(){ try{ eval('obNoticias = ' + bufferIO + ';'); /* Procesa el Json entregado por Google */ for(_id in obNoticias.items){ console.log(' [' + parseInt((parseInt(_id) + 1)) + '] ' + obNoticias.items[_id].title.trim().substr(0, 67) + ' ...'); } console.log(' - ' + parseInt((parseInt(_id) + 1)) + ' Items obtenidos.'); return true; }catch(e){ console.log(' - Error en el servidor de Google Reader : Json corrupto.'); return false; } }); }else{ console.log(' - Error en el servidor de Google Reader : ' + res3.statusCode); return false; } }).on('error', function(e){ console.log(' - Imposible conectar al servidor de Google Reader.'); return false; }); }); }else{ console.log(' - Error en el servidor de Google Reader : ' + res2.statusCode); return false; } }).on('error', function(e){ console.log(' - Imposible conectar al servidor de Google Reader.'); return false; }); }); }else{ console.log(' - Error en el servidor de cuentas de Google : ' + res.statusCode); return false; } } ).on('error', function(e){ console.log(' - Imposible conectar al servidor de cuentas de Google.'); return false; }); return true;
Código
whk@packardbell $ node bot.js - Conectando al servidor de Google Reader ... - Obteniendo llaves de acceso ... - Obteniendo token de seguridad ... - Acceso concedido! - Obteniendo temas ... [1] Cómo prueba Samsung la resistencia de sus dispositivos: los Stress ... [2] El sitio web de la Policía de Lituania ha sido hackeado y modificad ... [3] Mozilla estudia lanzar Firefox 17.0.1 para corregir un problema con ... [4] Logran regenerar cartílagos gracias a una impresora 3D ... [5] La web avanza a un ritmo trepidante... pero el vídeo sigue como sie ... [6] El 34% de los españoles ha encontrado empleo a través de las redes ... [7] ICO Reino Unido publica el código de buenas prácticas para la anoni ... [8] Detenido un adolescente por abusar de otros menores a los que su ma ... [9] Big News te ofrece tus feeds con estilo y con widget de lockscreen ... [10] Sony patenta un stylus con retroalimentación háptica ... [11] Skobbler lanza una aplicación de Mapas online/offline para demostra ... [12] "e-Bottle", conectando el mundo de forma diferente ... [13] Vulnerabilidades en Novell File Reporter ... [14] Un iPhone libre de 200 euros amenazará a Android en el año 2014 ... [15] El servicio de atención al cliente de los operadores sigue siendo m ... [16] Confirmados cuatro años de soporte para la Surface con Windows RT ... [17] El extraño comportamiento del fuego en el espacio ... [18] Cracking con OllyDbg ... [19] Descubre qué está drenando y gastando tu batería con Battery Stats ... [20] El mercado negro de teléfonos móviles ... - 20 Items procesados. whk@packardbell $
Lo entretenido es que funciona en cualquier sistema operativo compatible con node, mac, linux, windows, etc.