Obtener un Page access token que nunca expira

Para obtener un Page access token que nunca expira necesitamos obtener un User access token, que luego utilizaremos para consultar los page access token de las fanpages que administremos. Primero veremos como obtener el Page Access Token de la forma tradicional:

Paso 1: “Obtener un User access token

  1. Ir al Graph API Explorer: https://developers.facebook.com/tools/explorer/
  2. Seleccionar la aplicación con la que trabajaremos del menú desplegable
  3. Hacer click en el botón “Get Access Token
  4. Se abrirá una ventana, vamos a la solapa de “Extended Permissions” y debemos tildar el permiso “manage_pages” y opcionalmente todos aquellos que creamos necesarios para nuestro programa
  5. Click en “Get Access Token“. Obtendremos el string con el token en el campo de texto.

Paso 2: “Consultar los pages access token de las fanpages que administramos

  1. En el campo para ejecutar llamadas a la API de Facebook esxribiremos: “me/accounts
  2. Click en “Submit
  3. Obtendremos un listado de fanpages que administramos, deberemos buscar aquella con la que vayamos a trabajar y copiar el valor de “access_token

Este Page access token expira luego de 1 hora, por lo que ahora pasaremos al método para obtener uno que no expire nunca:

  1. Necesitamos un User access token, lo podremos obtener con el paso 1 visto anteriormente.
  2. Necesitamos el “App Secret“. Entramos al dashboard de nuestra aplicación, hacemos click en el botón “Show” al lado del campo “App Secret”. Nos pedirá nuestra contraseña para mostrar el campo.
    • Aquí también tendremos nuestro “App ID
  3. Estos 3 datos deberán ser reemplazados en la siguiente URL según corresponda: https://graph.facebook.com/v2.0/oauth/access_token?grant_type=fb_exchange_token&client_id=[APP-ID]&client_secret=[APP-SECRET]&fb_exchange_token=[USER-ACCESS-TOKEN]
  4. Una vez reemplazados los datos, los pegamos en un navegador y tocamos enter, allí veremos un string conocido como “Long lived User Access Token” que expira en 2 meses.
  5. Copiamos este token, lo pegamos en el campo “Access Token” en el Graph API Explorer y hacemos lo explicado en el paso 2 para obtener un Page Access Token que nunca expira.

Detectar el navegador desde PHP

Detectar el navegador desde PHP puede resultar útil para proyectos en los que dependiendo el dispositivo tengamos que mostrar contenido diferenciado, por ejemplo si sabemos que tenemos un SWF embebido y el mismo no es soportado por dispositivos móviles, deberemos mostrar un mensaje amigable en lugar de un horrible cuadrado gris.

Con esta función detectaremos si el usuario ingresa desde un smarthphone, una tables o desde un navegador de escritorio:

 

Importar fichero SQL de gran tamaño (actualizado)

A partir del problema para importar un fichero SQL de gran tamaño (http://cesarmansilla.com/blog/2014/11/06/importar-fichero-sql-gran-tamano/) me topé con la necesidad de optimizar aún más el proceso, ya que al tener que pasar esta base desde el servidor de desarrollo al servidor de producción la solución planteada no resultó la más óptima.

Lo que hice fué sencillo, pero en una primera instancia se me pasó por alto: creé el fichero .sql nuevamente, pero esta vez con batch inserts. El fichero final resultó de 1/4 parte del peso (de 442MB a 123MB). Luego lo comprimí con 7-Zip para obtener un archivo .gz de 43MB. Nada mal!

Al código que utilicé en un principio le hice algunos ajustes y quedó de la siguiente manera:


Este es el ejemplo de lo que genera el script:

 

Importar fichero SQL de gran tamaño

Me topé con la necesidad de importar un fichero SQL de gran tamaño (8,500,00 registros) a mi base de datos. Pasé por varias instancias antes de encontrar la solución.

En principio, los códigos me fueron entregados en un fichero txt, separados cada uno por un salto de linea (al menos es algo). El tamaño de este archivo era de 89MB, a partir de acá sabía que estaba frente a un problema.

Intento #1: Procesar el fichero tal como estaba. Pasaron 5 minutos y recién se habían insertado 6,000 registros…

Cambié algunas directivas para asegurarme de que no se generara un timeout,  leí el contenido del archivo y lo recorrí con un bucle, primero intenté insertar en base directamente, luego mostrar las consultas en pantalla. Ninguna funcionó.

 Intento #2: Divide y vencerás (si no te cansas antes)…

Abrí el archivo y fuí dividiendolo en varios archivos más pequeños(copy / paste). En principio fueron de a 1,000,000 de códigos, luego 500,000 y así… Después pensaba recorrer cada uno de estos archivos, pero ejecutar tantas consultas no solucionaba el problema.

Intento #3: Desde linea de comandos. Consta de varios pasos porque tuve que crear el archivo “.sql“, pero si ya tenés este archivo, solamente deberás hacer la parte de ejecución desde consola.

Creación del archivo SQL:

Ejecución desde consola:

Abrir la consola (Inicio > “cmd” desde Windows) y ubicarse el directorio donde la instalación de MySQL, por ejemplo.

Nos conectamos a la base de datos con la siguiente instrucción (luego de ejecutarla nos pedirá ingresar la contraseña):

A partir de acá podemos ejecutar sentencias en nuestra base de datos, en nuestro caso ejecutaremos las sentencias del archivo “mysql_full.sql” que acabamos de crear (442MB):

Solo resta esperar a que termine la ejecución, el tiempo dependerá de la potencia del equipo. Pero sin duda es la forma más rápida y efectiva de importar fichero SQL de gran tamaño.

Redireccionar aplicación desde tab

En ciertas ocasiones es necesario redireccionar una aplicación a partir de un tab de Facebook hacia el canvas, por ejemplo para contar con más espacio de trabajo, ya que el canvas se puede configurar para que ocupe el total de alto y ancho del navegador del usuario, en cambio un tab (o solapa) tiene un ancho máximo de 810px.

Para esto podemos valernos de una variable que Facebook envía al iframe y que contiene cierta información del usuario y de la aplicación. Previamente debemos procesar esta variable ya que es un hash y debemos decodificarlo para obtener su info en un array.

La variable en cuestion se llama “signed_request” y podemos procesarla de la siguiente manera: