Skip to content

Instantly share code, notes, and snippets.

@MeLlamoPablo
Last active July 2, 2016 22:40
Show Gist options
  • Save MeLlamoPablo/4397b478d56dcac15527476c1918cfac to your computer and use it in GitHub Desktop.
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.
/*
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