Last active
July 2, 2016 22:40
-
-
Save MeLlamoPablo/4397b478d56dcac15527476c1918cfac to your computer and use it in GitHub Desktop.
Esta funcíón devuelve una promesa (Promise) con todas las menciones del usuario en 3DJuegos.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Esta funcíón devuelve una promesa (Promise) con todas las menciones del usuario en 3DJuegos. | |
EJEMPLO DE USO: | |
//Cuando se ejecuta getMentions() la promesa todavía no se ha completado. | |
var promesa = getMentions(); | |
//Usamos promesa.then() para ejecutar la acción que queremos una vez se haya completado | |
promesa.then(function(menciones){ | |
//Hacer algo con las menciones | |
console.log(menciones); | |
}); | |
Más información sobre la clase Promise: https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Promesa | |
El objeto de menciones devuelto por getMentions() tiene la siguiente estructura: | |
menciones //el array que contiene todas las menciones | |
menciones[0] //una mención en particular | |
menciones[0].usuario //datos sobre el usuario que nos ha mencionado | |
menciones[0].usuario.nombre //el nombre del usuario | |
menciones[0].usuario.avatar_url //la url de su avatar | |
menciones[0].usuario.perfil_url //la url de su perfil | |
menciones[0].tiempo //datos sobre cuándo se realizó la mención | |
menciones[0].tiempo.unix //el tiempo exacto de la mención, formato UNIX timestamp | |
menciones[0].usuario.hace //una string que indica hace cuánto se realizó la mención | |
menciones[0].mensaje //datos sobre el mensaje que lleva la mención | |
menciones[0].mensaje.url //la url del mensaje | |
menciones[0].mensaje.nombre_tema //el nomre del tema donde se ha escrito dicho mensaje | |
*/ | |
function getMentions(){ | |
var regex = /<td width="55"><a href="(.+)" title="(.+)"><img src="(.+)" class="br50 mar_8" width="38" height="38"><\/a><\/td><td width="120" class="nw"><a href=".+" class="c0 s13 n col_hover">.+<\/a><br><span class="hace" data-time="([0-9]+)">(.+)<\/span><\/td><td><div class="mar_6 b"><a href="(.+)" class="s16 c0 col_hover">(.+)<\/a><div/ | |
return new Promise(function(fulfill, reject){ | |
$.get('http://www.3djuegos.com/modulos/comunidad/foro.php?get_info=comu_info_foro_main&zona=info_foro_menciones', function(r){ | |
try{ | |
var rows = $(r)[2].children[2].children[0].children; | |
}catch(e){ | |
//Si hay un TypeError es porque hay un undefined por ahí. | |
//Significa que el usuario no tiene ninguna mención. | |
//Por lo tanto: | |
fulfill({}); return false; | |
} | |
var mentions = {}; | |
for(var i in rows){ | |
var html = rows[i].innerHTML; | |
if( | |
//Si es undefined, es que no es una mención. | |
//Es algo que hay por ahí que no se qué coño es la verdad. | |
typeof html !== 'undefined' | |
//Si contiene 'TE MENCIONAN' es que es la primera fila, | |
//que no es una mención en sí. | |
&& !html.includes('TE MENCIONAN') | |
//Si contiene 'class="linea_c' es que es un separador que hay | |
//entre menciones, no una mención en sí | |
&& !html.includes('class="linea_c') | |
) | |
mentions[i] = html; | |
} | |
//Ya tenemos las menciones en HTML. Las transformamos en un objeto bien hecho. | |
var result = [], j = 0; | |
for(var i in mentions){ | |
var matches = regex.exec(mentions[i]); | |
result[j] = { | |
usuario: { | |
nombre: matches[2], | |
avatar_url: matches[3], | |
perfil_url: matches[1] | |
}, | |
tiempo: { | |
unix: matches[4], | |
hace: matches[5] | |
}, | |
mensaje: { | |
url: matches[6], | |
nombre_tema: matches[7] | |
} | |
}; | |
j++; | |
} | |
fulfill(result); | |
}); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment