elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Robot con inteligencia artificial que me ayuda con el foro (nodejs)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Robot con inteligencia artificial que me ayuda con el foro (nodejs)  (Leído 3,696 veces)
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.606


Sin conocimiento no hay espíritu


Ver Perfil WWW
Robot con inteligencia artificial que me ayuda con el foro (nodejs)
« en: 14 Diciembre 2012, 16:43 pm »

se que a algunos les va a gustar esto :D acabo de hacer un robot que me ayuda a realizar tareas básicas como por ejemplo actualizar las noticias de mi foro :)

Lo entrete es que siempre me responde de diferentes maneras segun su estado de animo que aun no termino de perfeccionar xD

¿Como lo hago en la práctica?

1. Primero que nada tengo un monton de paginas webs y resultados de google noticias en google reader.
2. Desde mi celular con android utilizo un lector de rss y le agregué mi cuenta de google reader (utilizo reader hd)
3. cada ves que leo las noticias y me gusta una la marco simplemente con una estrella y se va a favoritos en mi cuenta de google reader.
4. andres.js se loguea en google reader y sincroniza los items favoritos y los postea de forma automatica en el foro logueandose previamente con un usuario "Andres".
5. despues de marcar con estrella los temas que me gustan abro la consola y ejecuto control.js y le digo que necesito sincronizar las noticias del foro.
6. control.js llama a andres.js para que los sincronize y ya está :D

Paso1 (Agrego mis lecturas rss favoritas a google reader, se sincronizan solas):


Paso 2 (leo google reader desde mi celular en el metro, en la calle, en mi casa y marco la noticia interesante):


Paso 3 (cuando me siento frente a la pc le digo a control que sincronize el foro):


Paso 4 (posteado! :D):


El robot es capaz de sincronizar todas las noticias al mismo tiempo, si tienes 50 marcadas posteará los 50 una por una.

Acá les dejo el código fuente de control por si alguien lo quiere utilizar, también les dejo el de andres que aun me falta perfeccionarlo mas, tambien quiero que tome temas desde mi correo directamente pero eso aun no lo he implementado.

Saludos y a disfrutar :)

control.js:
Código
  1. /* control ia por WHK */
  2. var readline = require('readline');
  3. var exec = require('child_process').exec;
  4.  
  5. /* Configuración inicial */
  6. var nombreRobot = 'Control';
  7. var nivelFelicidad = 2;
  8. var ultimoComando = {
  9. comando : false,
  10. argumentos : {},
  11. esperandoConfirmacion : false
  12. };
  13.  
  14. ///////////////////////////////////////////////////
  15. String.prototype.repeat = function(num){
  16. return new Array(num + 1).join(this);
  17. }
  18.  
  19. function rand(min, max){
  20. return Math.floor(Math.random() * (max - min + 1)) + min;
  21. }
  22.  
  23. /* Expresiones */
  24. var expresiones = {
  25. felicidad_0 : new Array(':\'(', ':(', 'D\':', 'x__x'),
  26. felicidad_1 : new Array(':(', ':-/', 'D:', ':-\\'),
  27. felicidad_2 : new Array(':)', 'u.u', 'o.o', ':3', ':B'),
  28. felicidad_3 : new Array(':D', 'xD', 'xDD'),
  29. asombro : new Array(':O', ':-O', ':-o', ':-0', '0__0', '0___o', 'o__0', '0____0', '0_0'),
  30. pensando : new Array('mmmmm... ', 'eehmmmm... ', 'eehhh... ', 'mmmmmmmmm... ', 'mmmm... ', 'ehmmm... ')
  31. }
  32.  
  33. var disculpas = new Array('disculpa pero', 'sorry pero', 'omg, ', 'sorry');
  34.  
  35. /* Funciones */
  36.  
  37. var varRand = function(arr){
  38. var max = (arr.length - 1);
  39. if(max < 0)
  40. max = 0;
  41. var res = arr[rand(0, max)];
  42. if(res == 'undefined')
  43. res = arr[0];
  44. return res;
  45. }
  46.  
  47. var caritaFelicidad = function(){
  48.  
  49. if(typeof(expresiones['felicidad_' + nivelFelicidad]) == 'undefined')
  50. return ':)';
  51. else
  52. return varRand(expresiones['felicidad_' + nivelFelicidad]);
  53. }
  54.  
  55. var saludo = function(){
  56. var decir = '';
  57. var saludo_a = new Array('hola', 'buenas');
  58. var saludo_b = new Array('k tal', 'como estas', 'como has estado');
  59. var saludo_c = new Array(
  60. '¿en que puedo ayudar?', '¿en que puedo ayudarte?',
  61. '¿que puedo hacer por ti?', 'estoy atento a tus ordenes',
  62. 'estoy preparado para ayudarte', 'cuentame, que necesitas?',
  63. 'dime, que necesitas', 'dime, que hago?',
  64. 'cuentame', 'cuentame, que hago?',
  65. '¿que necesitas?', '¿que debo hacer?'
  66. );
  67.  
  68. decir += varRand(saludo_a);
  69. if(rand(0, 100) < 51) // 50% de probabilidades para que salude con una doble entrada
  70. decir += ' ' + varRand(saludo_b);
  71. decir += ', ' + varRand(saludo_c);
  72. return decir;
  73. }
  74.  
  75. var despedida = function(){
  76. var despedida_a = new Array('nos vemos', 'adios', 'bye', 'chao', 'chau');
  77. var despedida_b = new Array('un abrazo', 'fue un gusto', ':)')
  78. return varRand(despedida_a) + ', ' + varRand(despedida_b);
  79. }
  80.  
  81. var enQueMasPuedoAyudar = function(){
  82. var enQueMasPuedoAyudar_a = new Array(
  83. '¿en que mas te puedo ayudar?', '¿que mas debo hacer?',
  84. '¿en que mas puedo ayudar?', '¿en que mas puedo ayudarte?',
  85. '¿que mas puedo hacer por ti?', 'estoy atento a tus ordenes',
  86. 'que mas necesitas?', 'que mas hago?'
  87. );
  88. return varRand(enQueMasPuedoAyudar_a);
  89. }
  90.  
  91. var yaLoHize = function(){
  92. var yaLoHize_a = new Array('listo!', 'listooo ' + caritaFelicidad(), 'listoooo! ' + caritaFelicidad() + ' ' + caritaFelicidad(), 'yap,');
  93. var yaLoHize_b = new Array('ya terminé', 'terminé', 'ya lo hize.. wiii ' + caritaFelicidad(), 'termineee wii ' + caritaFelicidad(), 'terminé por fin ' + risa());
  94. return varRand(yaLoHize_a) + ' ' + varRand(yaLoHize_b);
  95. }
  96.  
  97. var noEntender = function(){
  98. var noEntender_b = new Array(
  99. 'no entendí nada de lo que me escribiste ' + caritaFelicidad() + ' ' + risa(),
  100. 'no entendí nada de lo que me escribiste ' + risa() + ' ' + caritaFelicidad(),
  101. 'no entendí lo que dijiste :-/',
  102. 'no entendí ' + risa() + ' :p',
  103. 'no entendí xd',
  104. 'no comprendo lo que me quieres decir',
  105. 'no tengo ni idea que me quieres decir',
  106. 'no tengo ni idea de lo que me escribes'
  107. );
  108. var noEntender_c = new Array(
  109. 'me lo puedes explicar con otras palabras?',
  110. 'me lo explicas nuevamente?',
  111. 'escribemelo otraves pero explicate mejor',
  112. 'explicamelo con otras palabras',
  113. 'explicate bien',
  114. 'explicamelo bien nuevamente'
  115. );
  116. var noEntender_d = new Array(
  117. 'porfa',
  118. 'por favor'
  119. );
  120.  
  121. return varRand(disculpas) + ' ' + varRand(noEntender_b) + ', ' + varRand(noEntender_c) + ' ' + varRand(noEntender_d);
  122. }
  123.  
  124. var risa = function(){
  125. var risaTexto = '';
  126. var selectorPrimero = new Array('j', 'h');
  127. /* Prioriza la letra j antes que la h */
  128. if(rand(0, 100) < 15)
  129. selectorPrimero = selectorPrimero[1];
  130. else
  131. selectorPrimero = selectorPrimero[0];
  132.  
  133. var selectorSegundo = 'a';
  134. var cantidadPlaneada = parseInt((parseInt(nivelFelicidad) * 2.5));
  135.  
  136. /* Si todos escribieramos "jajaja" siempre con exactamente 6 letras seriamos robots. */
  137. cantidadPlaneada = rand(cantidadPlaneada - 1, cantidadPlaneada + 2);
  138.  
  139. for(var i = 0; i <= cantidadPlaneada; i++){
  140.  
  141. if(i == 0){ // La primera letra de una risa casi siempre comienza con ja o ha o ka, etc
  142.  
  143. if(rand(0, 100) < 7) // 6% de probabilidades de que no comienze con una letra primaria
  144. risaTexto += selectorSegundo;
  145. else
  146. risaTexto += selectorPrimero;
  147.  
  148. }else{
  149.  
  150. if(i%2 == 0){ // Letras primarias y secundarias intercaladas
  151.  
  152. if(rand(0, 100) < 5) // 9% de probabilidades de que repita la misma letra
  153. risaTexto += selectorSegundo;
  154. else // Letra que normalmente debiera ser escrita
  155. risaTexto += selectorPrimero;
  156.  
  157. }else{
  158. if(rand(0, 100) < 5) // 9% de probabilidades de que repita la misma letra
  159. risaTexto += selectorPrimero;
  160. else // Letra que normalmente debiera ser escrita
  161. risaTexto += selectorSegundo;
  162.  
  163. }
  164.  
  165. }
  166. }
  167.  
  168. /* La ultima letra preferentemente debe ser una letra secundaria */
  169. if(rand(0, 100) < 7) // 6% de probabilidades de que no comienze con una letra primaria
  170. risaTexto += selectorPrimero;
  171. else
  172. risaTexto += selectorSegundo;
  173.  
  174. return risaTexto;
  175. }
  176.  
  177. /* Funciones */
  178. var escribir = function(texto, quien){
  179. texto = '' + texto;
  180. /* Retorna con la primera letra en mayuscula */
  181.  
  182. if(quien == 'control')
  183. console.log(nombreRobot + ' : ' + texto.substr(0,1).toUpperCase() + texto.substr(1, texto.length) + '.');
  184.  
  185. else if(quien == 'usuario')
  186. console.log('Yo' + ' '.repeat(nombreRobot.length - 2) + ' : ' + texto.substr(0,1).toUpperCase() + texto.substr(1, texto.length) + '.');
  187.  
  188. else
  189. console.log(' ' + texto);
  190. }
  191.  
  192. var bashExec = function(cmd, callback){
  193. var codeReturn = 0;
  194. var ex = exec(cmd, function (error, stdout, stderr){});
  195.  
  196. ex.stdout.on('data', function (data){
  197. escribir(data.trim(), 'shell');
  198. });
  199.  
  200. ex.on('exit', function (code){
  201. codeReturn = code;
  202. if(typeof(callback) == 'function')
  203. callback(code);
  204. });
  205. }
  206.  
  207. var interactuar = function(saludar){
  208.  
  209. /* Saluda si corresponde */
  210. if(saludar) // Ha comensado la sesión
  211. escribir(saludo(), 'control');
  212.  
  213. var rl = readline.createInterface({
  214. input: process.stdin,
  215. output: process.stdout
  216. });
  217.  
  218. rl.question('Yo' + ' '.repeat(nombreRobot.length - 2) + ' : ', function(escuchado){
  219. rl.close();
  220.  
  221. if(ultimoComando.esperandoConfirmacion){
  222.  
  223. if(/.*?(^si|asi es|^claro$)/.test(escuchado)){
  224.  
  225. /* Ejecuta el comando */
  226. if(ultimoComando.comando == 'bash'){
  227. escribir('ejecutando: ' + ultimoComando.argumentos.cmd + ' ...', 'control');
  228. bashExec(ultimoComando.argumentos.cmd, function(code){
  229. escribir(yaLoHize(), 'control');
  230. escribir(enQueMasPuedoAyudar(), 'control');
  231. ultimoComando.esperandoConfirmacion = false;
  232. interactuar(false);
  233. });
  234.  
  235. }else{
  236. escribir(disculpas[rand(0, disculpas.length - 1)] + ' no se cual es el comando ' + ultimoComando.comando + ' :-s', 'control');
  237. escribir(enQueMasPuedoAyudar(), 'control');
  238. ultimoComando.esperandoConfirmacion = false;
  239. interactuar(false);
  240. }
  241.  
  242. /* no era lo que se quería */
  243. }else if(/.*?(^no|nop|^err|^lol)/.test(escuchado)){
  244. ultimoComando = {
  245. comando : false,
  246. argumentos : {},
  247. esperandoConfirmacion : false
  248. };
  249.  
  250. var disculparse_a = new Array(
  251. 'he cancelado el comando',
  252. 'ya cancelé el comando'
  253. );
  254. var disculparse_b = new Array(
  255. 'te habia entendido mal',
  256. 'no te habia entendido bien',
  257. 'leí mal',
  258. 'casi la kgo xD'
  259. );
  260. escribir(disculpas[rand(0, disculpas.length - 1)] + ' ' + disculpas_a[rand(0, disculpas_a.length - 1)] + ', ' + disculpas_b[rand(0, disculpas_b.length - 1)], 'control');
  261. interactuar(false);
  262.  
  263. }else{
  264. escribir(noEntender(), 'control');
  265. interactuar(false);
  266. }
  267.  
  268. }else{
  269. /* ¿Que debo hacer y/o decir? */
  270. if(/(bye|chao|adios|a dios|nos vemos|hasta luego|hasta la vista|hasta la prox|buenas noches|me voy|salir|cierrate|arrancate|largate|pierdete|pudrete)/.test(escuchado)){
  271. escribir(despedida(), 'control');
  272.  
  273. }else if(/^(nada|nada mas|en nada|ninguna)/.test(escuchado)){
  274. escribir(despedida(), 'control');
  275.  
  276. }else if(/(andate a la)/.test(escuchado)){
  277. escribir('allá mismo me voy, ' + despedida(), 'control');
  278.  
  279. }else if(/(andate a(.*)tirate|anda a(.*)tirate)/.test(escuchado)){
  280. escribir('allá mismo voy y me tiro ' + risa() + ', ' + despedida(), 'control');
  281.  
  282. }else if(/.*?(actualiza|sincroniza|actualizar|actualices|actualises|actualizes|sincronices|sincronises|sincronizar).*?(rss|noticias|noticia).*?(del|para|sobre|en).*?(foro)/.test(escuchado)){
  283.  
  284. escribir(varRand(Array(
  285. 'entiendo que necesitas que sincronize el rss de google reader con el foro verdad?',
  286. 'necesitas que sincronize el rss de google reader con el foro?',
  287. '¿actualizo las noticias del foro?',
  288. '¿debo actualizar las noticias del foro?',
  289. 'si entendí bién, quieres que actualize las noticias del foro?'
  290. )), 'control');
  291.  
  292. ultimoComando = {
  293. comando : 'bash',
  294. argumentos : { cmd: 'node ./andres.js' },
  295. esperandoConfirmacion : true
  296. };
  297. interactuar(false);
  298.  
  299. }else{
  300. escribir(noEntender(), 'control');
  301. interactuar(false);
  302. }
  303. }
  304.  
  305. delete(escuchado);
  306. });
  307. }
  308.  
  309. interactuar(true);

andres.js:
Código
  1. /* Andres V 1.1 - Revisa y postea temas en SMF 2.0.x de forma automatizada. por WHK */
  2. /* Para no repetir los temas lo que hace es crear un directorio con subcarpetas,
  3.  * una carpeta por cada md5(titulo) de los post, luego se verifica que el directorio exista o si no
  4.  * se posteará y lo creará. Evita la utilización de archivos para ahorrar espacio en disco. */
  5.  
  6.  
  7. var http = require("http");
  8. var https = require("https");
  9. var crypto = require('crypto');
  10. var fs = require('fs');
  11.  
  12. /* Función rápida de MD5 */
  13. md5 = function(str){
  14. var md = crypto.createHash('md5');
  15. md.update(str);
  16. return md.digest('hex');
  17. }
  18.  
  19. /* Configuración */
  20. var sesion = {
  21. SID : '',
  22. LSID : '',
  23. Auth : '',
  24. token : ''
  25. };
  26. var bufferIO = '';
  27. var obNoticias = {};
  28. var nNoticias = 0;
  29. var bufferGoogle = '';
  30.  
  31. var dirNombreDB = 'dbAndres';
  32.  
  33. /* Cuenta gmail para acceder a google reader */
  34. var loginData = {
  35. mail : 'yan.uniko.102@gmail.com',
  36. pass : '*****'
  37. };
  38.  
  39. var foro = {
  40. host : 'whk.drawcoders.com',
  41. port : 80,
  42. pathPhp : '/index.php',
  43. idForo : 61, /* Foro de noticias, id 61 */
  44. user : 'Andres',
  45. pass : '*****',
  46.  
  47. cookies : '' /* No modificar */
  48. }
  49.  
  50. console.log(' - Conectando al servidor de Google Reader ...');
  51.  
  52. https.get('https://www.google.com/accounts/ClientLogin?service=reader&source=reader&Email=' + escape(loginData.mail) + '&Passwd=' + escape(loginData.pass),
  53. function(res){
  54.  
  55. /* esperando un HTTP 200 */
  56. if(res.statusCode == 200){
  57. console.log(' - Obteniendo llaves de acceso ...');
  58.  
  59. /* Procesa el contenido */
  60. res.on('data', function(chunk){
  61. bufferIO += chunk.toString() + '';
  62. }).on('end', function(){
  63.  
  64. bufferIO = bufferIO.trim(); /* Limpia el buffer de cualquier basura extra */
  65.  
  66. /* Autentificado? */
  67. if(bufferIO == 'Error=BadAuthentication'){
  68. console.log(' - Clave de acceso erronea.');
  69. return false;
  70. }
  71.  
  72. var partes = bufferIO.split('\n');
  73. if(!partes.length){
  74. console.log(' - Imposible ingresar, google no ha respondido correctamente.');
  75. return false;
  76. }
  77. bufferIO = ''; /* Limpia la memoria */
  78.  
  79. var linea;
  80. for(_id in partes){
  81. linea = partes[_id].trim().split('=');
  82. if((linea[0] == 'SID') || (linea[0] == 'LSID') || (linea[0] == 'Auth')){
  83. sesion[linea[0]] = linea[1];
  84. }
  85. }
  86.  
  87. console.log(' - Obteniendo token de seguridad ...');
  88. http.get({
  89. host : 'www.google.com',
  90. port : 80,
  91. path : '/reader/api/0/token',
  92. headers: {
  93.                'Authorization': 'GoogleLogin auth=' + sesion['Auth']
  94.            }
  95.  
  96. }, function(res2){
  97.  
  98. /* esperando un HTTP 200 */
  99. if(res2.statusCode == 200){
  100.  
  101. /* Procesa el contenido */
  102. res2.on('data', function(chunk2){
  103. bufferIO += chunk2.toString() + '';
  104. }).on('end', function(){
  105. sesion['token'] = bufferIO;
  106. console.log(' - Acceso concedido!');
  107.  
  108. bufferIO = ''; /* Limpia la memoria */
  109.  
  110. console.log(' - Obteniendo temas ...');
  111. /* ############################ Obtiene las noticias ############################ */
  112. http.get({
  113. host : 'www.google.com',
  114. port : 80,
  115. path : '/reader/api/0/stream/contents/user/-/state/com.google/starred?ck=' + Math.floor(new Date().getTime() / 1000),
  116. headers: {
  117.            'Authorization': 'GoogleLogin auth=' + sesion['Auth']
  118.        }
  119.  
  120. }, function(res3){
  121. /* esperando un HTTP 200 */
  122. if(res3.statusCode == 200){
  123.  
  124. bufferIO = '';
  125. /* Procesa el contenido */
  126. res3.on('data', function(chunk3){
  127. bufferIO += chunk3.toString() + '';
  128. }).on('end', function(){
  129. bufferGoogle = bufferIO; /* Guarda el buffer para futuras auditorias */
  130. try{
  131. eval('obNoticias = ' + bufferIO + ';'); /* Procesa el Json entregado por Google */
  132.  
  133. }catch(e){
  134. console.log(' - Error en el servidor de Google Reader : Json corrupto.');
  135. return false;
  136. }
  137.  
  138. var tmpNoticiasItems = {};
  139.  
  140. for(_id in obNoticias.items){
  141. /* Verifica si ya ha sido posteado para sincronizar y no repostear */
  142. if(!fs.existsSync('./' + dirNombreDB + '/' + md5(obNoticias.items[_id].title))){
  143.  
  144. /* Agrega al objeto */
  145. tmpNoticiasItems[nNoticias] = obNoticias.items[_id];
  146.  
  147. /* Cuenta la cantidad de items */
  148. nNoticias++;
  149. }
  150. }
  151.  
  152. /* Traspasa los items encontrados */
  153. obNoticias.items = tmpNoticiasItems;
  154. delete tmpNoticiasItems;
  155.  
  156. if(nNoticias > 0){
  157. console.log(' - ' + nNoticias + ' Items obtenidos sin sincronizar.');
  158.  
  159. console.log(' - Autentificandose en el foro ...');
  160. /* Obtiene las cookies necesarias para postear en el foro con SMF 2.0 */
  161. var post_data = 'user=' + escape(foro.user) + '&passwrd=' + escape(foro.pass) + '&cookielength=1000';
  162. var post = http.get({
  163. host : foro.host,
  164. port : foro.port,
  165. path : foro.pathPhp + '?action=login2',
  166. method : 'POST',  
  167. headers: {  
  168. 'Content-Type' : 'application/x-www-form-urlencoded',  
  169. 'Content-Length' : post_data.length  
  170. }
  171.  
  172. }, function(res4){
  173. /* esperando un HTTP 302 */
  174. if(res4.statusCode == 302){
  175.  
  176. /* Procesa el contenido */
  177. res2.on('data', function(chunk2){
  178. // Página de error con el formulario de reingreso
  179. }).on('end', function(){
  180. // Página de error con el formulario de reingreso
  181. });
  182.  
  183. var cookiesMatris = {};
  184. var partesCookie = {};
  185. for(_key in res4.headers['set-cookie']){
  186. partesCookie = res4.headers['set-cookie'][_key].split(';');
  187. partesCookie = partesCookie[0].split('=');
  188.  
  189. if(typeof(cookiesMatris[partesCookie[0]]) == 'undefined')
  190. cookiesMatris[partesCookie[0]] = ''; // var? bug nodejs
  191. cookiesMatris[partesCookie[0]] = partesCookie[1].trim();
  192. }
  193.  
  194. /* Parsea las cookies a String */
  195. for(_key in cookiesMatris)
  196. foro.cookies += _key + '=' + cookiesMatris[_key] + '; ';
  197. foro.cookies = foro.cookies.trim();
  198.  
  199. if(foro.cookies.length){
  200.  
  201. console.log(' - Verificando la cuenta ...');
  202. /* Carga la url de redirección que previene el ingreso de robots (menos este) */
  203. http.get(res4.headers.location, function(res5){
  204. /* Se ha finalizado la conexión de verificación, no es necesario procesar los datos */
  205.  
  206. /* Postea en el foro los items */
  207. var idPost = 0;
  208. var postea = function(data, hash){
  209.  
  210. /* Vuelve a verificar por segunda ves que la noticia no fue posteada para asegurarnos */
  211. if(fs.existsSync('./' + dirNombreDB + '/' + escape(hash))){
  212. console.log(' - El post ya existe.');
  213. idPost++;
  214. obtieneToken();
  215. return false;
  216. }
  217.  
  218. var post2 = http.get({
  219. host : foro.host,
  220. port : foro.port,
  221. path : foro.pathPhp + '?action=post2;start=0;board=' + parseInt(foro.idForo),
  222. method : 'POST',
  223. headers: {
  224. 'Cookie' : foro.cookies,
  225. 'Content-Type' : 'application/x-www-form-urlencoded',  
  226. 'Content-Length' : data.length  
  227. }
  228. }, function(res6){
  229.  
  230. /* esperando un HTTP 302 */
  231. if(res6.statusCode == 302){
  232.  
  233. /* Si no existe el directorio de la base de datos lo creará */
  234. if(!fs.existsSync('./' + dirNombreDB))
  235. fs.mkdir('./' + dirNombreDB);
  236. fs.mkdir('./' + dirNombreDB + '/' + escape(hash));
  237.  
  238. /* Se ha finalizado el posteo, no es necesario procesar los datos */
  239. idPost++;
  240. obtieneToken();
  241.  
  242. }else if(res6.statusCode == 200){
  243. /* Acceso denegado? */
  244. bufferIO = '';
  245. /* Procesa el contenido */
  246. res6.on('data', function(chunk6){
  247. bufferIO += chunk6.toString() + '';
  248. }).on('end', function(){
  249. // console.log(bufferIO);
  250. console.log(' - Error al postear en el servidor del foro : ' + res6.statusCode + '. Baneado?');
  251. return false;
  252. });
  253.  
  254. }else{
  255. console.log(' - Error al postear en el servidor del foro : ' + res6.statusCode);
  256. return false;
  257. }
  258.  
  259. });
  260. try{ post2.write(data); }catch(e){}
  261. }
  262.  
  263. var obtieneToken = function(){
  264. if(typeof(obNoticias.items[idPost]) == 'undefined'){
  265. console.log(' - Finalizado!');
  266. return true;
  267.  
  268. }else{
  269. console.log(' - Posteando [' + (idPost + 1) + '/' + nNoticias + ']: ' + obNoticias.items[idPost].title.substr(0, 48) + ' ...');
  270.  
  271. if(typeof(obNoticias.items[idPost].summary) == 'undefined')
  272. var content = obNoticias.items[idPost].content.content;
  273. else
  274. var content = obNoticias.items[idPost].summary.content + ' ... Seguir link de la fuente para continuar leyendo.';
  275.  
  276. /* Agrega la referencia */
  277. content += '<br /><br />Fuente: [url]' + obNoticias.items[idPost].alternate[0].href + '[/url]';
  278.  
  279. http.get({
  280. host : foro.host,
  281. port : foro.port,
  282. path : foro.pathPhp + '?action=post;board=' + parseInt(foro.idForo) + '.0',
  283. headers: { 'Cookie' : foro.cookies }
  284. }, function(res5){
  285. /* esperando un HTTP 200 */
  286. if(res5.statusCode == 200){
  287.  
  288. bufferIO = '';
  289. /* Procesa el contenido */
  290. res5.on('data', function(chunk5){
  291. bufferIO += chunk5.toString() + '';
  292. }).on('end', function(){
  293.  
  294. /* Obtiene el hash de posteo que no sirve de nada */
  295. var seqnum = bufferIO.split('input type="hidden" name="seqnum" value="');
  296. seqnum = seqnum[1].split('"');
  297. seqnum = seqnum[0].trim();
  298. var svEdit = bufferIO.split("sSessionVar: '");
  299. svEdit = svEdit[1].split("'");
  300. svEdit = svEdit[0];
  301. var siEdit = bufferIO.split("sSessionId: '");
  302. siEdit = siEdit[1].split("'");
  303. siEdit = siEdit[0];
  304.  
  305. postea(
  306. 'topic=0&icon=xx&sel_face=&sel_size=&sel_color=&message_mode=1&notify=0&lock=0&goback=1&sticky=0&move=0&additional_options=0seqnum=' + escape(seqnum) + '&' + escape(svEdit) + '=' + escape(siEdit) + '&subject=' + escape(obNoticias.items[idPost].title) + '&message=' + escape(content),
  307. md5(obNoticias.items[idPost].title)
  308. );
  309. });
  310.  
  311. }else{
  312. console.log(' - Error en el servidor del foro : ' + res5.statusCode);
  313. return false;
  314. }
  315.  
  316. }).on('error', function(e){
  317. console.log(' - Imposible conectar al servidor del foro.');
  318. return false;
  319. });
  320. }
  321. }
  322.  
  323. /* Inicia el loop de posteos */
  324. console.log(' - Sincronizando temas ...');
  325. obtieneToken();
  326.  
  327. }).on('error', function(e){
  328. console.log(' - Imposible conectar al servidor del foro.');
  329. return false;
  330. });
  331.  
  332. }else{ /* 302 sin cookies? */
  333. console.log(' - La clave de acceso al foro es incorrecta.');
  334. return false;
  335. }
  336.  
  337. }else{
  338. console.log(' - La clave de acceso al foro es incorrecta.');
  339. return false;
  340. }
  341.  
  342. }).on('error', function(e){
  343. console.log(' - Imposible conectar al servidor del foro.');
  344. return false;
  345. });
  346. try{ post.write(post_data); }catch(e){}
  347.  
  348. }else{
  349. console.log(' - No hay items para sincronizar :)');
  350. return false;
  351. }
  352.  
  353. });
  354.  
  355. }else{
  356. console.log(' - Error en el servidor de Google Reader : ' + res3.statusCode);
  357. return false;
  358. }
  359.  
  360. }).on('error', function(e){
  361. console.log(' - Imposible conectar al servidor de Google Reader.');
  362. return false;
  363. });
  364.  
  365. });
  366.  
  367. }else{
  368. console.log(' - Error en el servidor de Google Reader : ' + res2.statusCode);
  369. return false;
  370. }
  371.  
  372. }).on('error', function(e){
  373. console.log(' - Imposible conectar al servidor de Google Reader.');
  374. return false;
  375. });
  376. });
  377.  
  378. }else{
  379. console.log(' - Error en el servidor de cuentas de Google : ' + res.statusCode);
  380. return false;
  381. }
  382.  
  383. }
  384. ).on('error', function(e){
  385. console.log(' - Imposible conectar al servidor de cuentas de Google.');
  386. return false;
  387. });
  388.  
  389.  
  390. return true;

Si van a retocar el código por favor les pido que mantengan en la parte superior del código el nombre del autor, o sea yo.


« Última modificación: 14 Diciembre 2012, 17:25 pm por WHK » En línea

Danielbetu

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Robot con inteligencia artificial que me ayuda con el foro (nodejs)
« Respuesta #1 en: 30 Agosto 2013, 04:20 am »

Hola, recién  lo veo, sos un genio!! Buen trabajo!! ;)


En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Robot con inteligencia artificial que me ayuda con el foro (nodejs)
« Respuesta #2 en: 30 Agosto 2013, 16:31 pm »

Buen trabajo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Inteligencia Artificial JAVA
Java
...:::Téotl:::... 3 8,030 Último mensaje 30 Agosto 2013, 04:12 am
por Danielbetu
Inteligencia artificial
Foro Libre
konarr 9 7,463 Último mensaje 27 Julio 2012, 09:07 am
por Yoghurt
Inteligencia Artificial « 1 2 »
Java
bengy 11 8,849 Último mensaje 5 Octubre 2012, 04:55 am
por ChavalChavito
Ayuda con objetos de javascript (NodeJS)
Desarrollo Web
Dext3rCode 3 3,268 Último mensaje 5 Mayo 2016, 04:24 am
por MinusFour
Ayuda con algoritmo basado en Inteligencia Artificial
Programación C/C++
bajo0123 1 2,533 Último mensaje 31 Mayo 2016, 13:56 pm
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines