elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Aporte]Integrar Facebook SDK PHP con CodeIgniter
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Aporte]Integrar Facebook SDK PHP con CodeIgniter  (Leído 3,011 veces)
[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
[Aporte]Integrar Facebook SDK PHP con CodeIgniter
« en: 9 Mayo 2012, 18:51 pm »

Para los que no saben, CodeIgniter es un framework php.

Estoy empezando con el desarrollo de una aplicacion en Facebook (modo iframe) utilizando el SDK para php.

Pero se me ocurrio no hacerlo cpn php 'puro', sino usar CodeIgniter. El problema fue la integracion de SDK de Facebok con este framework. Luego de buscar mucho en internet, probrar librerias de 3ros y hasta una version de CI adaptada para aplicaciones Facebook, finalmente me decidi por integrarlo yo mismo.

Lo primero logicamente es descargar y subir CodeIgniter a nuestro servidor web, dentro del directorio raiz del mismo. Luego descargar el SDK PHP de facebook, y subir solo la carpeta 'src' tambien a la raiz de nuestro servidor web, y renombrarla como 'fb_libs'.

Una vez que hallamos subido todo lo necesario, pasaremos a crear una libreria para manejar la clase Facebbok. En el directorio 'applicationlibraries'  creamos el archivo 'fb.php' con el siguiente contenido:

Código
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. class FB {
  3. private $o;
  4. var $user;
  5.  
  6. public function __construct()
  7. {
  8. require 'fb_libs/facebook.php';
  9. $this->o = new Facebook(array(
  10. 'appId'  => 'api_key_de_tu_aplicacion',
  11. 'secret' => 'codigo_secreto_de_tu_aplicacion',
  12. ));
  13. // See if there is a user from a cookie
  14. $this->user = $this->o->getUser();
  15. if (!$this->user)
  16. {
  17. $params = array(
  18. 'scope' => 'read_stream',
  19. 'redirect_uri' => 'https://apps.facebook.com/PAGINA_DE_TRABAJO/'
  20. );
  21. die('<script>window.top.location="'.$this->o->getLoginUrl($params).'"</script>');
  22. }
  23. }
  24.  
  25. public function api($query){
  26. return $this->o->api($query);
  27. }
  28. }
  29. ?>

Prestando atencion en poner los datos de nuestra aplicacion. (api_key, codigo_secreto y pagina_trabajo).

Por ejemplo, para usarla creamos un controlador llamado 'welcome.php' (que es el controlador por defecto) y ponemos el siguiente codigo:

Código
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2.  
  3. class Welcome extends CI_Controller {
  4.  
  5. public function __construct()
  6. {
  7. parent::__construct();
  8. $this->load->library('fb');
  9. $this->user_profile = $this->fb->api('/me');
  10. }
  11.  
  12. public function index()
  13. {
  14. $data['name'] = $this->user_profile['first_name'];
  15. $data['location'] = $this->user_profile['location']['name'];
  16. $this->load->view('welcome_message', $data);
  17. }
  18. }
  19.  

Y luego creamos la vista 'welcome_message.php' con el siguiente codigo:

Código
  1. <!DOCTYPE html>
  2. <html lang="es">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Usando FB en CI by Unsigned</title>
  6. </head>
  7. <body>
  8. Nombre: <?=$name?><br />
  9. Ciudad: <?=$location?>
  10. <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds</p>
  11. </body>
  12. </html>

No voy a entrar mucho en detalles, calculo que quien lee esto es porque minimamente conoce CodeIgniter, y probablemente este empezando o conozca la el SDK de Facebook para PHP. :P

Lo unico que quiero aclara son dos cosas:

1) Debemos cargar la libreria en todos nuestros controladores, o ponerla en auto load. Si lo hacemos a mano, se debe cargar justo despues de llamar al constructor padre.

2) La libreria se encarga automaticamente de redirigir a los usuarios al link de O Auth. Esto es en caso de que sea la primera vez que el usuario la usa, o dicho de otra forma, si el usuario no la tiene instalada en su perfil de facebook, automaticamente se lo re dirige.

3) Por ultimo, para usar la API del sdk desde nuestro controladores basta con llamar a la funcion api() del objeto $this->fb, ejemplo:


Código
  1. $foto_perfil_url = $this->fb->api('/me/picture');

Espero les sea util.

Saludos

PD: estoy en laburo, luego arreglo y aplio mas el post, quizas termine siendo un tutorial xD.


« Última modificación: 9 Mayo 2012, 19:22 pm por El As del Club Paris » En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
EFEX


Desconectado Desconectado

Mensajes: 1.171


"Dinero Facil"


Ver Perfil WWW
Re: [Aporte]Integrar Facebook SDK PHP con CodeIgniter
« Respuesta #1 en: 10 Mayo 2012, 06:23 am »

Si para mi fue un poco dolor de cabeza utilizar esta api :P, hace un tiempo atras un cliente que tengo me pidió que queria actualizar una sub pagina de su perfil de facebook (promociones de productos y cuando se agregan nuevos productos al sitio) desde el panel de control de su sitio. Esta fue la forma que puedo hacerlo funcionar...

fb_connect.php
Código
  1. <?php
  2. include(APPPATH.'libraries/facebook/facebook.php');
  3. class Fb_connect extends Facebook{
  4.  
  5. public $user = NULL;
  6. public $user_id = FALSE;
  7.  
  8. public $fbLoginURL = "";
  9. public $fbLogoutURL = "";
  10.  
  11. public $fb = FALSE;
  12. public $fbSession = FALSE;
  13. public $appkey = 0;
  14.  
  15. public $fbmessage = array();
  16.  
  17.  
  18. public function __construct()
  19. {
  20. $CI = & get_instance();
  21. $CI->config->load("facebook",TRUE);
  22. $config = $CI->config->item('facebook');
  23. parent::__construct($config);
  24. $this->user_id = $this->getUser(); // New code
  25. //$me = null;
  26. // login or logout url will be needed depending on current user state.
  27. //(if using the javascript api as well, you may not need these.)
  28. //if ($me)
  29. //{
  30. //    $this->fbLogoutURL = $this->getLogoutUrl();
  31. //} else {
  32. //    $this->fbLoginURL = $this->getLoginUrl();
  33. //}
  34. }
  35.  
  36. public function saveDataParam($data)
  37. {
  38. $this->fbmessage = $data;
  39. if ($this->user_id)
  40. {
  41. try {
  42. //$me = $this->api('/me');
  43. //$this->user = $me;
  44. $page_id = '123654789156245';  // ID de la subpagina del perfil.
  45. $page_info = $this->api("/$page_id?fields=access_token");
  46. if( !empty($page_info['access_token']) )
  47. {
  48. $args = array(
  49. 'access_token'  => $page_info['access_token'],
  50. 'message'       => $this->fbmessage['fbmessage']['message'],
  51. 'caption'       => $this->fbmessage['fbmessage']['caption'],
  52. 'link'          => $this->fbmessage['fbmessage']['link'],
  53. 'name'          => $this->fbmessage['fbmessage']['name'],
  54. 'description'   => $this->fbmessage['fbmessage']['description']
  55. //'picture' => $this->fbmessage['fbmessage']['image']
  56. //'actions' => array(array('name' => 'Get Search',
  57. );
  58. $post_id = $this->api("/$page_id/feed","post",$args);
  59.  
  60. }
  61. } catch (FacebookApiException $e)
  62. {
  63. error_log($e);
  64. }
  65. }
  66. }
  67.  
  68. } // end class
  69.  

controlador
Código
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2.  
  3. class Shopcontroller extends CI_Controller {
  4.  
  5. public function addproduct()
  6. {
  7. //. . .
  8. $fbmessage = array("fbmessage" =>
  9. 'message' => 'Mensaje',
  10. 'description' => 'Descripción del mensaje',
  11. 'caption' => 'Titulo',
  12. 'link' => 'htttp://www.enlace.com',
  13. 'name' => 'Nombre',
  14. 'image' => 'http://www.enlace.com/img/imagen.jpg'
  15. )
  16. );
  17. $this->loginByFacebook($fbmessage);
  18. //. . .
  19. }
  20.  
  21. private function loginByFacebook($fbmessage)
  22. {
  23. $this->load->library('fb_connect');
  24. $param['redirect_uri'] = site_url("usercontroller/facebook"); //Redireccionar a ...
  25. $param['scope'] = 'email, publish_stream,manage_pages,user_birthday,offline_access';
  26. $this->fb_connect->saveDataParam($fbmessage);
  27. redirect($this->fb_connect->getLoginUrl($param));
  28. }
  29.  
  30. private function loginOutFacebook()
  31. {
  32. $this->load->library('fb_connect');
  33. $this->fb_connect->logout();
  34. }
  35. }
  36.  

Luego en la carpeta de tu aplicación config/facebook.php(lo creas)
Código
  1. <?php
  2. $config['appId'] = 'MY_ID';
  3. $config['secret'] = MY_ID_SECRET';
  4.  


También para actualizar tu perfil. (Enlace)
Espero que se entienda saludos  ;D


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pequeño aporte(proxy),pero aporte al fin.:D
Programación Visual Basic
Tengu 0 2,409 Último mensaje 22 Julio 2007, 17:33 pm
por Tengu
Integrar FACEBOOK ( comentarios ) en mi web? how? help! X.X
Desarrollo Web
XXXXXX 5 11,311 Último mensaje 28 Junio 2010, 19:47 pm
por XXXXXX
¿Cómo integrar Facebook en una web que usa acciones y vistas?
Desarrollo Web
Kasswed 1 3,099 Último mensaje 27 Noviembre 2010, 14:38 pm
por madpitbull_99
IDE para CodeIgniter?
PHP
[u]nsigned 0 3,779 Último mensaje 16 Diciembre 2010, 21:55 pm
por [u]nsigned
IDE para CodeIgniter?
Desarrollo Web
[u]nsigned 1 5,125 Último mensaje 18 Abril 2011, 17:43 pm
por Nakp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines