Desautorizar todas las aplicaciones de Facebook automáticamente

Hoy vi que el muro de mi hermano estaba siendo spammeado por aplicaciones spammers de Facebook, entonces le dije que las desautorizara para que se detuvieran...
Cuando fuimos a sus opciones de privacidad nos dimos cuenta que tenía 120 aplicaciones, y Facebook no permitía eliminarlas a todas de una sola vez! Una por una, esperando a que aparezca el cartelito de confirmación!
Por ello es que escribí un script que te permite desautorizar muchas apps de Facebook de manera automarizada, lo dejás corriendo en la página para eliminar aplicaciones y te vas a hacer otra cosa en otra pestaña...
javascript: function eventFire(el,etype){if(el.fireEvent){el.fireEvent('on'+etype);}else{var evObj=document.createEvent('Events');evObj.initEvent(etype,true,false);el.dispatchEvent(evObj);}}
var remove=[];var i=0;removeNext();function removeNext(){if(typeof(remove[i])=="object"){eval(remove[i].href);++i;setTimeout(function(){confirmRemove();},300);}
else{remove=document.getElementsByClassName('fbSettingsListItemDelete');i=0;setTimeout(removeNext,100);}}
function confirmRemove(){var remove=document.getElementsByName('remove');if(typeof(remove[0])=="object"){eventFire(remove[0],"click");acceptRemove();}
else{setTimeout(confirmRemove,100);}}
function acceptRemove(){var ok=document.getElementsByName('ok');if(typeof(ok[0])=="object"){eventFire(ok[0],"click");removeNext();}
else{setTimeout(acceptRemove,100);}}
Simplemente entran a http://www.facebook.com/settings/?tab=applications y pegan el script en la barra de direcciones de navegador. Van a empezar a aparecer cartelitos y a aceptarse automáticamente, debido a que Facebook no te permite eliminar otra aplicación hasta que no terminaste de eliminar la otra, tarda aproximadamente ~800ms por app, así que hacé los cálculos para la cantidad de apps que tengas xD.
AVISO: Solo lo probé en Chrome, si lo usan en otro navegador y funciona dejen un comentario indicando que así lo hace ^^. Ya no tengo más apps para probar en otro navegador jaja.
Función de tiempo faltante para una fecha en PHP
Mientras trabajaba en un proyecto di con el usual caso de necesitar una función que me permita mostrar el tiempo faltante para una fecha dada en años, meses, semanas, días, horas, minutos, segundos o una combinación entre estos...
Me quedó tan linda que no pude evitar hacer un post en el blog con esta por si a alguien le sirve ^^
function dateTo($str, $t1, $t2 = false) {
// Si nos dan un segundo parámetros calculamos el tiempo entre dos fechas
$t = $t1-($t2?$t2:time());
// Un array con todos los reemplazos que vamos a usar
$p = array(
'{s}'=>1,
'{i}'=>60,
'{h}'=>60*60,
'{d}'=>60*60*24,
'{w}'=>60*60*24*7,
'{m}'=>60*60*24*30,
'{y}'=>60*60*24*365
);
// Obtenemos todos los tiempos que fueron proveídos en la string
preg_match_all("/\{[sihdwmy]\}/", $str, $ma);
// Creamos un array ordenado del mayor al menor tiempo requerido
$found = Array();
foreach ($ma[0] as &$m) {
$found[$m] = $p[$m];
}
arsort($found);
// Reemplazamos la string con los tiempos
foreach ($found as $i => &$fo) {
$str = str_replace($i, (int) ($t/$fo), $str);
$t = $t % $fo;
}
return $str;
}
Para usarla lo único que tienen que hacer es:
dateTo("Faltan {y} años, {m} meses, {w} semanas, {d} días, {h} horas, {i} minutos y {s} segundos para llegue Marty McFly", strtotime("2015-10-21"));
Lo cual devolvería algo como:
Faltan 4 años, 8 meses, 3 semanas, 4 días, 3 horas, 18 minutos, 57 segundos para que llegue Marty McFly
También te permite escribir algo como:
dateTo("Faltan {m} meses y {s} segundos para el 2012!", strtotime("2012-1-1"));
Lo cual devolvería algo como:
Faltan 10 meses y 1998806 segundos para el 2012!
Ya que detecta la el interval de tiempo más grande y saltea los demás para mostrar los intervalos del mayor al menor...
Y también podés escribir la fecha negativa para calcular el tiempo que pasó desde un momento dado:
dateTo("Hace {d} días, {h} horas, {i} minutos y {s} segundos que fue mi cumpleaños!", strtotime("2010/12/14"));
Lo cual devuelve:
Hace -59 días, -20 horas, -54 minutos y -14 segundos que fue mi cumpleaños!
Ahh pero está negativo, no me sirve ¬¬
Bueno, para eso está el tercer parámetro! ^^
dateTo("Hace {d} días, {h} horas, {i} minutos y {s} segundos que fue mi cumpleaños!", time(), strtotime("2010/12/14"));
Lo que te da este hermoso resultado
Hace 59 días, 20 horas, 57 minutos y 17 segundos que fue mi cumpleaños!
Creo que con esos ejemplos ya queda bastante claro como va la función ![]()
En un futuro tengo ganas de implementarle condicionales, para poder escribir algo como esto:
dateTo("[Faltan [{m} meses, ][{d} días, ][{h} horas, ][{i} minutos y ][{s} segundos para año nuevo!]]Feliz año nuevo!", strtotime("2012/1/1"));
Y que elimine las partes entre corchetes si el tiempo dentro de estos es 0 o negativo, para así poder reciclar más fácil la misma string...
Bueno, eso es todo, espero que a alguien le sirva, yo sigo con mi "proyectito" que ya lo interrumpí demasiado con esto jaja.
EDITO:
Acá hice una variación de la función para obtener el tiempo faltante en un array. El array es opcional, si no lo ponés devuelve el tiempo faltante de todos los tiempos (por así decirlo jaja).
function dateToArray($arr, $t1 = false, $t2 = false) {
$p = array(
's'=>1,
'i'=>60,
'h'=>60*60,
'd'=>60*60*24,
'w'=>60*60*24*7,
'm'=>60*60*24*30,
'y'=>60*60*24*365
);
if (!is_array($arr)) {
$t2 = $t1;
$t1 = $arr;
$r = &$p;
}
else {
foreach ($arr as $ar) {
$r[$ar] = $p[$ar];
}
}
arsort($r);
$t = $t1-($t2?$t2:time());
foreach ($r as $i => $q) {
$r[$i] = (int) ($t/$q);
$t = $t % $q;
}
return $r;
}
El funcionamiento es básicamente el mismo, solo que en el primer parámetro ponés un array en vez de una string, con las keys de los nombres de los tiempos, y, m, w, d, h, i, s.
Si alguien tiene ganas puede combinar las 2 funciones en una sola
.
Yo no tengo. Y tampoco necesito hacerlo jaja.
Facebook Chat Updater

¿Cansados de querer hablarle a una persona por el chat de Facebook y que en el mismísimo momento en que le están por escribir se desconecta? Bueno, yo sí.
Esto sucede porque Facebook actualiza la lista personas conectadas en el chat de manera poco frecuente, y siempre que vas a comenzar a hablarle a una persona.
Tras una tarde de ingeniería inversa en el debugger de Chrome logré descifrar de manera precaria como es que funciona el cliente de Facebook y di con la forma de actualizar la lista de amigos manualmente:
Arbiter._instance._events["buddylist/initialized"][0]._forceUpdate();
Si pegan el código en la barra de navegación con un "javascript:" detrás de este podrán ver como se actualiza la lista, y si tienen la consola abierta también verá como es que hace un llamado a la dirección "http://www.facebook.com/ajax/chat/buddy_list.php?__a=1" mediante AJAX.
Claro, podrían pegar el código con un setInterval cada vez que entran a Facebook... pero sería muy engorroso. Por esta razón decidí escribir una extensión para Google Chrome -la primera extensión que he hecho- que actualiza la lista de amigos conectados cada 3 segundos una vez que carga la página...
Descargar extensión Facebook Chat Updater para Google Chrome
Siéntanse libres de hacer una extensión para su navegador web favorito usando Arbiter._instance._events["buddylist/initialized"][0]._forceUpdate();