Desarrollando una aplicación facebook Paso a Paso Bruno Kámiche Inventarte.net Lima – Perú [email_address]
PASOS PREVIOS ANTES DE CREAR UNA APLICACIÓN
Pasos Previos: - Tener una idea clara y por escrito del objetivo de la aplicación - Definir la secuencia de pantallas y operaciones que aparecerán en la aplicación - Definir la estructura de datos que dará soporte a tu aplicación ¡ ESTABLECE TU ROADMAP !
DEFINE LA ARQUITECTURA QUE UTILIZARÁS
Para que el funcionamiento de la aplicación sea óptimo se deberán utilizar servidores especializados: - Servidores de procesos (WebServer + PHP) - Servidor de Base de Datos - Servidor de contenido estático Si tu aplicación estará basada en flash y lo servirás desde un servidor diferente al de PHP recuerda crear los archivos de políticas de seguridad ( crossdomain.xml )
Base de Datos Servidor de Aplicación Servidor de Contenido Estático
<?xml version=&quot;1.0&quot;?> <!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd&quot;> <cross-domain-policy> <allow-access-from domain=&quot;*&quot; /> </cross-domain-policy>  Ejemplo de archivo crossdomain.xml
CREAR LA APLICACIÓN EN FACEBOOK
 
 
 
 
 
 
 
 
 
 
 
 
DIFERENCIAS ENTRE UNA APLICACIÓN  FBML y IFRAME
Aplicaciones FBML: - Puedes hacer una aplicación nueva mucho más rapido - Carga más rapido - Permite un acceso mas simple a los servicios de Facebook - Puedes utilizar URLs amigables en tu aplicación Aplicaciones IFRAME: - Son más fáciles de integrar a facebook (en sitios previamente existentes) - La interacción con el browser es más rápida - Te permite el uso de Javascript, HTML y CSS sin restricciones - Funcionan mejor si requieres mucho uso de AJAX - Permite el empleo de herramientas de Debug de HTML y Javascript - Puedes utilizar librerias de Javascript existentes ( Jquery )
DESARROLLA TU APLICACIÓN ¡MANOS A LA OBRA!
Utiliza un archivo de configuración: Ejm: <?php $db_ip  = '<ip o nombre de tu servidor>'; $db_user = '<nombre de usuario>'; $db_pass = '<password>'; $db_name = '<nombre de la BD>'; $api_key = '<api key>'; $secret  = '<secret key>'; $memcachedserver = '<ip o nombre de tu servidor memcached>'; $static='http://static.mydomain.com'; ?>
Archivo de autorización: <?php @ob_end_flush(); @ob_start(&quot;ob_gzhandler&quot;); @ob_implicit_flush(0); @error_reporting(E_ALL & ~E_NOTICE); @mb_internal_encoding(&quot;UTF-8&quot;); @mb_http_output(&quot;UTF-8&quot;); @ini_set(&quot;default_charset&quot;,&quot;UTF-8&quot;); include_once 'config.php'; include_once 'db/db.php'; $db->sql_query(&quot;SET NAMES UTF8&quot;); @session_start(); // the facebook client library require_once('client/facebook.php'); require_once('mainfile.php'); if(isset($_POST[&quot;fb_sig_user&quot;])) $user=$_POST[&quot;fb_sig_user&quot;]; else die(); $facebook=new Facebook($api_key, $secret); $db->sql_query(&quot;INSERT INTO users(facebookid, datetime) VALUES($user, UNIX_TIMESTAMP(NOW()))&quot;); @ob_end_flush(); ?>
Archivo de eliminación de Usuario: <?php @ob_end_flush(); @ob_start(&quot;ob_gzhandler&quot;); @ob_implicit_flush(0); @error_reporting(E_ALL & ~E_NOTICE); @mb_internal_encoding(&quot;UTF-8&quot;); @mb_http_output(&quot;UTF-8&quot;); @ini_set(&quot;default_charset&quot;,&quot;UTF-8&quot;); // this defines some of your basic setup include_once 'config.php'; include_once 'db/db.php'; $db->sql_query(&quot;SET NAMES UTF8&quot;); if(isset($_POST[&quot;fb_sig_user&quot;])) { $user=$_POST[&quot;fb_sig_user&quot;]; $db->sql_query(&quot;DELETE FROM users WHERE facebookid=$user&quot;); } @ob_end_flush(); ?>
Puntos a tomar en cuenta: - Asegúrate de utilizar UTF-8 tanto en la base de datos como en el programa. - Utiliza memcached para mantener datos en memoria y evitar consultas a la base de datos (http://www.danga.com/memcached/) - Si tu aplicación es de tipo IFRAME habilita el uso de sesiones para poder enviar datos. - Cuando sea la primera vez que el usuario utiliza tu aplicación debes generar un “profile box” con un contenido default o en blanco.
Activar el uso de UTF-8 en PHP: @mb_internal_encoding(&quot;UTF-8&quot;); @mb_http_output(&quot;UTF-8&quot;); @ini_set(&quot;default_charset&quot;,&quot;UTF-8&quot;); Activar el uso de UTF-8 en MySQL (Lo primero que debes hacer apenas una vez establecida la conexión) $db->sql_query(&quot;SET NAMES UTF8&quot;); Activar el uso de Sesiones (para poder pasar información entre llamadas de un link a otro) @ini_set(&quot;session.use_trans_sid&quot;,&quot;0&quot;); @session_start();
Como parsear URLs amigables : function ProcessParameters() { global $PATHS; $_SERVER[&quot;PATH_INFO&quot;]=$URL=$_SERVER[&quot;REQUEST_URI&quot;]; $PARAMSTR=&quot;&quot;; $p=strpos($URL,&quot;?&quot;); if($p!==false) { $_SERVER[&quot;QUERY_STRING&quot;]=$PARAMSTR=substr($URL,$p+1); $_SERVER[&quot;PATH_INFO&quot;]=$URL=substr($URL,0,$p); } if(substr($URL,0,1)==&quot;/&quot;) $URL=substr($URL,1); if(substr($URL,-1)==&quot;/&quot;) $URL=substr($URL,0,strlen($URL)-1); $NPATHS=sizeof($PATHS=split(&quot;/&quot;, $URL)); $NPARAMS=sizeof($PARAMS=split(&quot;&&quot;,$PARAMSTR)); for($nx=0;$nx<$NPARAMS;$nx++) { $param=split(&quot;=&quot;,$PARAMS[$nx]); $param[0]=str_replace(&quot;.&quot;,&quot;_&quot;,$param[0]); if(isset($param[1])) $_GET[$param[0]]=htmlspecialchars_decode(urldecode($param[1]));  else $_GET[$param[0]]=&quot;&quot;; } return($PATHS[0]); }
$PATHS=array(); $opt=ProcessParameters(); switch($opt) { case &quot;urlamigable1&quot;: app_funcion1(); break; case &quot;urlamigable2&quot;: app_funcion2(); break; case &quot;&quot;: app_main(); break; default: echo &quot;<fb:redirect url=\&quot;{$appurl}\&quot; />&quot;; die(); }
Como crear un “Profile BOX”: <?php function app_setinfobox($user, $htmlw=&quot;&quot;, $htmln=&quot;&quot;) { // narrow : 184 * 250 // wide : 380 * X try { $result=$facebook->api_client->profile_setFBML(NULL, $user,   &quot;<fb:wide>&quot;.$htmlw.&quot;</fb:wide>&quot;.&quot;<fb:narrow>&quot;.$htmln.&quot;</fb:narrow>&quot;,    NULL,    &quot;&quot;,    &quot;<fb:narrow>&quot;.$htmln.&quot;</fb:narrow>&quot;); } catch (Exception $e) { } } ?>
Como publicar contenido en el News Feed del usuario y sus amigos utilizando Javascript: <script type='text/javascript'> var attachment = {&quot;name&quot;:&quot;<Nombre de tu Aplicación>&quot;,&quot;href&quot;:&quot;{$appurl}&quot;,   &quot;caption&quot;:&quot;{*actor*} <mensaje>.&quot;,   &quot;description&quot;:&quot;<texto que quieres publicar>&quot;,   &quot;media&quot;:[{&quot;type&quot;:&quot;image&quot;, &quot;src&quot;:&quot;<url de la imagen>&quot;,&quot;href&quot;:&quot;{$appurl}&quot;}]   }; var actionLinks = [{ &quot;text&quot;: &quot;Texto de Action Link&quot;, &quot;href&quot;: &quot;{$appurl}&quot;}]; Facebook.streamPublish(&quot;&quot;,attachment,actionLinks,null,&quot;<titulo para escribir contenido>&quot;); </script>
Como publicar en el News Feed utilizando FBML: En la aplicación se deberá mostrar el siguiente contenido: <form fbtype=&quot;feedStory&quot; id=&quot;publishformdata&quot; action=&quot;<url del form>&quot;> <input type=&quot;hidden&quot; name=&quot;<variable>&quot; value=&quot;<valor>&quot;/> <input type=&quot;submit&quot; label=&quot;Presiona aquí para continuar&quot; />  </form>
Programa para Procesar el Feed Form: <?php include(“config.php”); // Recibir y validar los parametros en $_POST $template=<id del template definido>; // *titulo* *mensaje* $title=&quot;<titulo del mensaje>&quot;; $mensaje=&quot;<cuerpo del mensaje>&quot;; $images=array(   array(&quot;src&quot;=>&quot;<url de la imagen>&quot;,&quot;href&quot;=>&quot;{$appurl}&quot;) ); $tokens=array(   &quot;images&quot;=>$images,   &quot;titulo&quot;=>$title,   &quot;mensaje&quot;=>$mensaje ); $feed = array('template_data' => $tokens, 'template_id' => $template );  $publish = array('method'=> 'feedStory', 'content' => array( 'feed' => $feed, 'next' => &quot;{$appurl}&quot;));  echo json_encode($publish); ?>
Como utilizar el Editor de Templates
 
 
 
 
¡Gracias! Bruno Kámiche Inventarte.net Lima – Perú [email_address]

Step by step developing with Facebook PHP API by Bruno Kamiche

  • 1.
  • 2.
  • 3.
    Desarrollando una aplicaciónfacebook Paso a Paso Bruno Kámiche Inventarte.net Lima – Perú [email_address]
  • 4.
    PASOS PREVIOS ANTESDE CREAR UNA APLICACIÓN
  • 5.
    Pasos Previos: -Tener una idea clara y por escrito del objetivo de la aplicación - Definir la secuencia de pantallas y operaciones que aparecerán en la aplicación - Definir la estructura de datos que dará soporte a tu aplicación ¡ ESTABLECE TU ROADMAP !
  • 6.
    DEFINE LA ARQUITECTURAQUE UTILIZARÁS
  • 7.
    Para que elfuncionamiento de la aplicación sea óptimo se deberán utilizar servidores especializados: - Servidores de procesos (WebServer + PHP) - Servidor de Base de Datos - Servidor de contenido estático Si tu aplicación estará basada en flash y lo servirás desde un servidor diferente al de PHP recuerda crear los archivos de políticas de seguridad ( crossdomain.xml )
  • 8.
    Base de DatosServidor de Aplicación Servidor de Contenido Estático
  • 9.
    <?xml version=&quot;1.0&quot;?> <!DOCTYPEcross-domain-policy SYSTEM &quot;http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd&quot;> <cross-domain-policy> <allow-access-from domain=&quot;*&quot; /> </cross-domain-policy> Ejemplo de archivo crossdomain.xml
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
    DIFERENCIAS ENTRE UNAAPLICACIÓN FBML y IFRAME
  • 24.
    Aplicaciones FBML: -Puedes hacer una aplicación nueva mucho más rapido - Carga más rapido - Permite un acceso mas simple a los servicios de Facebook - Puedes utilizar URLs amigables en tu aplicación Aplicaciones IFRAME: - Son más fáciles de integrar a facebook (en sitios previamente existentes) - La interacción con el browser es más rápida - Te permite el uso de Javascript, HTML y CSS sin restricciones - Funcionan mejor si requieres mucho uso de AJAX - Permite el empleo de herramientas de Debug de HTML y Javascript - Puedes utilizar librerias de Javascript existentes ( Jquery )
  • 25.
    DESARROLLA TU APLICACIÓN¡MANOS A LA OBRA!
  • 26.
    Utiliza un archivode configuración: Ejm: <?php $db_ip = '<ip o nombre de tu servidor>'; $db_user = '<nombre de usuario>'; $db_pass = '<password>'; $db_name = '<nombre de la BD>'; $api_key = '<api key>'; $secret = '<secret key>'; $memcachedserver = '<ip o nombre de tu servidor memcached>'; $static='http://static.mydomain.com'; ?>
  • 27.
    Archivo de autorización:<?php @ob_end_flush(); @ob_start(&quot;ob_gzhandler&quot;); @ob_implicit_flush(0); @error_reporting(E_ALL & ~E_NOTICE); @mb_internal_encoding(&quot;UTF-8&quot;); @mb_http_output(&quot;UTF-8&quot;); @ini_set(&quot;default_charset&quot;,&quot;UTF-8&quot;); include_once 'config.php'; include_once 'db/db.php'; $db->sql_query(&quot;SET NAMES UTF8&quot;); @session_start(); // the facebook client library require_once('client/facebook.php'); require_once('mainfile.php'); if(isset($_POST[&quot;fb_sig_user&quot;])) $user=$_POST[&quot;fb_sig_user&quot;]; else die(); $facebook=new Facebook($api_key, $secret); $db->sql_query(&quot;INSERT INTO users(facebookid, datetime) VALUES($user, UNIX_TIMESTAMP(NOW()))&quot;); @ob_end_flush(); ?>
  • 28.
    Archivo de eliminaciónde Usuario: <?php @ob_end_flush(); @ob_start(&quot;ob_gzhandler&quot;); @ob_implicit_flush(0); @error_reporting(E_ALL & ~E_NOTICE); @mb_internal_encoding(&quot;UTF-8&quot;); @mb_http_output(&quot;UTF-8&quot;); @ini_set(&quot;default_charset&quot;,&quot;UTF-8&quot;); // this defines some of your basic setup include_once 'config.php'; include_once 'db/db.php'; $db->sql_query(&quot;SET NAMES UTF8&quot;); if(isset($_POST[&quot;fb_sig_user&quot;])) { $user=$_POST[&quot;fb_sig_user&quot;]; $db->sql_query(&quot;DELETE FROM users WHERE facebookid=$user&quot;); } @ob_end_flush(); ?>
  • 29.
    Puntos a tomaren cuenta: - Asegúrate de utilizar UTF-8 tanto en la base de datos como en el programa. - Utiliza memcached para mantener datos en memoria y evitar consultas a la base de datos (http://www.danga.com/memcached/) - Si tu aplicación es de tipo IFRAME habilita el uso de sesiones para poder enviar datos. - Cuando sea la primera vez que el usuario utiliza tu aplicación debes generar un “profile box” con un contenido default o en blanco.
  • 30.
    Activar el usode UTF-8 en PHP: @mb_internal_encoding(&quot;UTF-8&quot;); @mb_http_output(&quot;UTF-8&quot;); @ini_set(&quot;default_charset&quot;,&quot;UTF-8&quot;); Activar el uso de UTF-8 en MySQL (Lo primero que debes hacer apenas una vez establecida la conexión) $db->sql_query(&quot;SET NAMES UTF8&quot;); Activar el uso de Sesiones (para poder pasar información entre llamadas de un link a otro) @ini_set(&quot;session.use_trans_sid&quot;,&quot;0&quot;); @session_start();
  • 31.
    Como parsear URLsamigables : function ProcessParameters() { global $PATHS; $_SERVER[&quot;PATH_INFO&quot;]=$URL=$_SERVER[&quot;REQUEST_URI&quot;]; $PARAMSTR=&quot;&quot;; $p=strpos($URL,&quot;?&quot;); if($p!==false) { $_SERVER[&quot;QUERY_STRING&quot;]=$PARAMSTR=substr($URL,$p+1); $_SERVER[&quot;PATH_INFO&quot;]=$URL=substr($URL,0,$p); } if(substr($URL,0,1)==&quot;/&quot;) $URL=substr($URL,1); if(substr($URL,-1)==&quot;/&quot;) $URL=substr($URL,0,strlen($URL)-1); $NPATHS=sizeof($PATHS=split(&quot;/&quot;, $URL)); $NPARAMS=sizeof($PARAMS=split(&quot;&&quot;,$PARAMSTR)); for($nx=0;$nx<$NPARAMS;$nx++) { $param=split(&quot;=&quot;,$PARAMS[$nx]); $param[0]=str_replace(&quot;.&quot;,&quot;_&quot;,$param[0]); if(isset($param[1])) $_GET[$param[0]]=htmlspecialchars_decode(urldecode($param[1])); else $_GET[$param[0]]=&quot;&quot;; } return($PATHS[0]); }
  • 32.
    $PATHS=array(); $opt=ProcessParameters(); switch($opt){ case &quot;urlamigable1&quot;: app_funcion1(); break; case &quot;urlamigable2&quot;: app_funcion2(); break; case &quot;&quot;: app_main(); break; default: echo &quot;<fb:redirect url=\&quot;{$appurl}\&quot; />&quot;; die(); }
  • 33.
    Como crear un“Profile BOX”: <?php function app_setinfobox($user, $htmlw=&quot;&quot;, $htmln=&quot;&quot;) { // narrow : 184 * 250 // wide : 380 * X try { $result=$facebook->api_client->profile_setFBML(NULL, $user, &quot;<fb:wide>&quot;.$htmlw.&quot;</fb:wide>&quot;.&quot;<fb:narrow>&quot;.$htmln.&quot;</fb:narrow>&quot;, NULL, &quot;&quot;, &quot;<fb:narrow>&quot;.$htmln.&quot;</fb:narrow>&quot;); } catch (Exception $e) { } } ?>
  • 34.
    Como publicar contenidoen el News Feed del usuario y sus amigos utilizando Javascript: <script type='text/javascript'> var attachment = {&quot;name&quot;:&quot;<Nombre de tu Aplicación>&quot;,&quot;href&quot;:&quot;{$appurl}&quot;, &quot;caption&quot;:&quot;{*actor*} <mensaje>.&quot;, &quot;description&quot;:&quot;<texto que quieres publicar>&quot;, &quot;media&quot;:[{&quot;type&quot;:&quot;image&quot;, &quot;src&quot;:&quot;<url de la imagen>&quot;,&quot;href&quot;:&quot;{$appurl}&quot;}] }; var actionLinks = [{ &quot;text&quot;: &quot;Texto de Action Link&quot;, &quot;href&quot;: &quot;{$appurl}&quot;}]; Facebook.streamPublish(&quot;&quot;,attachment,actionLinks,null,&quot;<titulo para escribir contenido>&quot;); </script>
  • 35.
    Como publicar enel News Feed utilizando FBML: En la aplicación se deberá mostrar el siguiente contenido: <form fbtype=&quot;feedStory&quot; id=&quot;publishformdata&quot; action=&quot;<url del form>&quot;> <input type=&quot;hidden&quot; name=&quot;<variable>&quot; value=&quot;<valor>&quot;/> <input type=&quot;submit&quot; label=&quot;Presiona aquí para continuar&quot; /> </form>
  • 36.
    Programa para Procesarel Feed Form: <?php include(“config.php”); // Recibir y validar los parametros en $_POST $template=<id del template definido>; // *titulo* *mensaje* $title=&quot;<titulo del mensaje>&quot;; $mensaje=&quot;<cuerpo del mensaje>&quot;; $images=array( array(&quot;src&quot;=>&quot;<url de la imagen>&quot;,&quot;href&quot;=>&quot;{$appurl}&quot;) ); $tokens=array( &quot;images&quot;=>$images, &quot;titulo&quot;=>$title, &quot;mensaje&quot;=>$mensaje ); $feed = array('template_data' => $tokens, 'template_id' => $template ); $publish = array('method'=> 'feedStory', 'content' => array( 'feed' => $feed, 'next' => &quot;{$appurl}&quot;)); echo json_encode($publish); ?>
  • 37.
    Como utilizar elEditor de Templates
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
    ¡Gracias! Bruno KámicheInventarte.net Lima – Perú [email_address]