Usar la API Graph

La API Graph es el modo principal para mover datos en la gráfica social de Facebook. Es una API de bajo nivel basada en HTTP que se usa para consultar datos, publicar historias nuevas, subir fotos y otra gran variedad de tareas que puedas requerir que realice la aplicación. En esta guía se explica cómo conseguir todas estas cosas en la API Graph.

Conceptos básicos

En nuestra información general sobre la API Graph encontrarás los conceptos básicos de la terminología y la estructura de la API Graph. En las siguientes secciones encontrarás más información sobre las diferentes operaciones que se pueden realizar con la API.

Leer

Todos los nodos y los perímetros en la API Graph se pueden leer simplemente con una solicitud GET HTTP al extremo relevante. Por ejemplo, si quisieras recuperar información sobre el usuario actual, tendrías que hacer una solicitud GET HTTP como se indica a continuación:

GET /v2.5/me HTTP/1.1
Host: graph.facebook.com

La mayoría de las llamadas a la API deben firmarse con un token de acceso. Para determinar los permisos que se necesitan en este token de acceso, consulta la referencia de la API Graph para el nodo o perímetro que quieres leer. También puedes utilizar el explorador de la API Graph para generar tokens rápidamente y jugar con la API para descubrir cómo funciona.

El nodo /me es un extremo especial que se traduce en el identificador user_id de la persona (o el identificador page_id de la página de Facebook) cuyo token de acceso se utiliza actualmente para hacer llamadas a la API. Si tuvieras un token de acceso de usuario, podrías recuperar todas las fotos de un usuario con:

GET graph.facebook.com
  /me/photos

La respuesta que recibas variará según el nodo o el perímetro que estés leyendo, pero tendrá la siguiente forma general:

{
   "fieldname": {field-value},
   ....
}

Seleccionar campos

De forma predeterminada, no todos los campos en un nodo o perímetro se devuelven cuando haces una consulta. Puedes elegir los campos (o perímetros) que quieres que se devuelvan con el parámetro de consulta fields. Esto resulta realmente útil para hacer que tus llamadas a la API sean más eficaces y rápidas.

Por ejemplo, la siguiente llamada a la API Graph usando tu propio token de acceso de usuario https://graph.facebook.com/me?fields=id,name,picture solo devolverá el identificador, el nombre y la foto en el perfil:

GET graph.facebook.com/me?fields=id,name,picture

Ordenar

Puedes ordenar determinados conjuntos de datos cronológicamente. Por ejemplo, puedes ordenar los comentarios de una foto en orden cronológico inverso con la clave reverse_chronological:

GET graph.facebook.com
  /{photo-id}?
    fields=comments.order(reverse_chronological)

El valor de order debe ser uno de los siguientes:

  • chronological
  • reverse_chronological

Buscar URL

La mayoría de los objetos se pueden descubrir con sus identificadores, pero hay veces en que esto no es posible y lo único que tienes es una URL para identificar algo.

Puedes utilizar el nodo "URL" que se incluyó en la versión 2.1 para devolver los identificadores de las direcciones URL del objeto de Open Graph o para buscar datos asociados con una URL de App Links.

Obtén más información sobre cómo buscar datos de App Links con la API de índice en nuestra documentación sobre App Links.

Modificar solicitudes de API

Algunos extremos de API se pueden utilizar con parámetros adicionales que modificarán la solicitud. La función de cada uno de estos modificadores varía. Por ello, cuando corresponde, ofrecemos información completa de cada modificador en los documentos de referencia de la API. A continuación, encontrarás una lista de los modificadores comunes que se pueden utilizar con casi todos los extremos.

Nombre Descripción Tipo

return_ssl_resources

Se utiliza cuando necesitas que se devuelva una foto a través de una conexión segura (HTTPS) para evitar advertencias de contenido mixto en los navegadores.

bool

locale

Se utiliza si la aplicación necesita la capacidad para recuperar contenido localizado en el idioma de una configuración regional en concreto (cuando está disponible).

Locale

A continuación, se muestran otros modificadores para paginación e introspección.

Hacer solicitudes anidadas

La función de expansión de campo de la API Graph te permite anidar de forma eficaz varias consultas gráficas en una sola llamada. Algunos recursos, como la mayoría de las API de anuncios, no pueden utilizar la expansión de campo en algunas o todas las conexiones.

Por ejemplo, en una llamada, puedes pedir las dos primeras fotos de los primeros cinco álbumes o la combinación que quieras. La respuesta mantiene la jerarquía de datos, de modo que los desarrolladores no tienen que enlazar los datos en el cliente.

Esto difiere de la función de solicitudes por lotes, que te permite hacer varias llamadas potencialmente sin relación a la API Graph en una sola solicitud.

A continuación, figura el formato general que adopta la expansión de campo:

GET graph.facebook.com
  /{node-id}?
    fields=<first-level>{<second-level>}

En este caso, <first-level> serían uno o varios campos o perímetros (separados por comas) del nodo principal. Y <second-level> serían uno o más perímetros o campos (separados por comas) del nodo de primer nivel.

No hay limitación en cuanto a la cantidad de anidación de niveles que puede ocurrir aquí. También puedes utilizar un argumento .limit(n) en cada campo o perímetro para restringir la cantidad de objetos que quieres obtener.

Esto es más fácil de entender si lo ves en acción, por lo que te mostramos una consulta de ejemplo que recuperará hasta cinco álbumes creados por una persona y sus últimas cinco publicaciones en su sección de noticias.

GET graph.facebook.com
  /me?
    fields=albums.limit(5),posts.limit(5)

Después podemos extender esto un poco más para cada objeto de álbum, también recuperar las dos primeras fotos y las personas etiquetadas en cada foto:

GET graph.facebook.com
  /me?
    fields=albums.limit(5){name, photos.limit(2)},posts.limit(5)

Ahora podemos extenderlo de nuevo recuperando el nombre de cada foto, la URL de la foto y las personas etiquetadas:

GET graph.facebook.com
  /me?
    fields=albums.limit(5){name, photos.limit(2){name, picture, tags.limit(2)}},posts.limit(5)

Veamos un ejemplo usando la paginación basada en el cursor:

GET graph.facebook.com
  /me?fields=albums.limit(5){name,photos.limit(2).after(MTAyMTE1OTQwNDc2MDAxNDkZD){name,picture,tags.limit(2)}},posts.limit(5)

Puedes ver cómo funciona la expansión de campo en los nodos, los perímetros y los campos para devolver datos realmente complejos en una sola solicitud.

Recorrer resultados de páginas

Cuando haces una solicitud de API a un nodo o perímetro, por lo general, no recibes todos los resultados de la solicitud en una sola respuesta. Esto se debe a que algunas respuestas contienen miles de objetos, por lo que la mayoría de las respuestas están paginadas de forma predeterminada.

Paginación basada en el cursor

El método de paginación más eficiente es el basado en el cursor y se debe usar siempre que sea posible. Un cursor hace referencia a una cadena de caracteres aleatoria que marca un elemento específico en una lista de datos. A menos que se elimine este elemento, el cursor siempre apunta a la misma parte de la lista, pero se invalidará si se elimina un elemento. Por lo tanto, tu aplicación no debe almacenar cursores ni suponer que seguirán siendo válidos en el futuro.

Al leer un perímetro que admite la paginación de cursor, verás la siguiente respuesta JSON:

{
  "data": [
     ... Endpoint data is here
  ],
  "paging": {
    "cursors": {
      "after": "MTAxNTExOTQ1MjAwNzI5NDE=",
      "before": "NDMyNzQyODI3OTQw"
    },
    "previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw"
    "next": "https://graph.facebook.com/me/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
  }
}

Un perímetro con paginación de cursor admite los siguientes parámetros:

  • before: este es el cursor que apunta al inicio de la página de datos que se devolvió.
  • after: este es el cursor que apunta al final de la página de datos que se devolvió.
  • limit: este es el número máximo de objetivos que se podrían devolver. Es posible que una consulta devuelva un número menor que el valor de limit debido a los filtros. Que el número de resultados sea menor que el número de limit no indica necesariamente que tu consulta llegó al final de la lista de datos, obtén el resultado en ausencia de next, como se describe a continuación. Por ejemplo, si estableces el valor de limit en diez y se devuelven nueve resultados, es posible que haya más datos disponibles pero que un elemento se haya eliminado debido al filtro de privacidad. Por motivos de rendimiento, algunos perímetros tienen un máximo superior en el valor limit. En todos los casos, la API devuelve los enlaces de paginación correctos.
  • next: el extremo de API Graph que devolverá la siguiente página de datos. Si no se incluye, esta es la última página de datos. Debido a la forma en que funciona la paginación con visibilidad y privacidad, es posible que una página parezca vacía, pero incluya un enlace de paginación "next". Debes dejar de paginar cuando el enlace "next" no aparezca más.
  • previous: el extremo de API Graph que devolverá la página de datos anterior. Si no se incluye, esta es la primera página de datos.

No almacenes los cursores. Los cursores pueden perder su validez muy rápidamente si se agregan o eliminan elementos.

Paginación basada en el tiempo

La paginación basada en el tiempo se utiliza para navegar por los datos de resultados con marcas de tiempo de UNIX que apuntan a horas específicas en una lista de datos.

Al utilizar un extremo que utiliza la paginación basada en el tiempo, verás la siguiente respuesta JSON:

{
  "data": [
     ... Endpoint data is here
  ],
  "paging": {
    "previous": "https://graph.facebook.com/me/feed?limit=25&since=1364849754",
    "next": "https://graph.facebook.com/me/feed?limit=25&until=1364587774"
  }
}

Un perímetro paginado por tiempo admite los siguientes parámetros:

  • until: una marca de tiempo de Unix o un valor de datos strtotime que apunta al final del intervalo de datos basados en el tiempo.
  • since: una marca de tiempo de Unix o un valor de datos de strtotime que apunta al inicio del intervalo de datos basados en el tiempo.
  • limit: este es el número máximo de objetivos que se podrían devolver. Es posible que una consulta devuelva un número menor que el valor de limit debido a los filtros. Que el número de resultados sea menor que el número de limit no indica necesariamente que tu consulta llegó al final de la lista de datos, obtén el resultado en ausencia de next, como se describe a continuación. Por ejemplo, si estableces el valor de limit en diez y se devuelven nueve resultados, es posible que haya más datos disponibles pero que un elemento se haya eliminado debido al filtro de privacidad. Por motivos de rendimiento, algunos perímetros tienen un máximo superior en el valor limit. En todos los casos, la API devuelve los enlaces de paginación correctos.
  • next: el extremo de API Graph que devolverá la siguiente página de datos.
  • previous: el extremo de API Graph que devolverá la página de datos anterior.

Para obtener resultados coherentes, especifica los parámetro since y until. Además, te recomendamos que la diferencia de tiempo sea de seis meses como máximo.

Paginación basada en el intervalo

Puedes utilizar la paginación de intervalo cuando no te importe la cronología y solo quieras que se devuelva un número específico de objetos. Solo debe utilizarse si el perímetro no admite la paginación de cursor o basada en el tiempo.

Un perímetro paginado de intervalo admite los siguientes parámetros:

  • offset: comienza el inicio de cada página con el número especificado.
  • limit: este es el número máximo de objetivos que se podrían devolver. Es posible que una consulta devuelva un número menor que el valor de limit debido a los filtros. Que el número de resultados sea menor que el número de limit no indica necesariamente que tu consulta llegó al final de la lista de datos, obtén el resultado en ausencia de next, como se describe a continuación. Por ejemplo, si estableces el valor de limit en diez y se devuelven nueve resultados, es posible que haya más datos disponibles pero que un elemento se haya eliminado debido al filtro de privacidad. Por motivos de rendimiento, algunos perímetros tienen un máximo superior en el valor limit. En todos los casos, la API devuelve los enlaces de paginación correctos.
  • next: el extremo de API Graph que devolverá la siguiente página de datos. Si no se incluye, esta es la última página de datos. Debido a la forma en que funciona la paginación con visibilidad y privacidad, es posible que una página parezca vacía, pero incluya un enlace de paginación "next". Debes dejar de paginar cuando el enlace "next" no aparezca más.
  • previous: el extremo de API Graph que devolverá la página de datos anterior. Si no se incluye, esta es la primera página de datos.

Ten en cuenta que si se agregan nuevos objetos a la lista de elementos que se está paginando, el contenido de cada página basada en intervalo cambiará.

La paginación basada en intervalo no es compatible con las llamadas a la API. Para obtener resultados coherentes, te recomendamos paginar mediante los enlaces anteriores o siguientes que devolvemos en la respuesta.

Hacer solicitudes grandes

Algunos extremos de API Graph pueden aceptar parámetros muy grandes. Si tus solicitudes terminan teniendo más de dos mil caracteres, tal vez empieces a ver errores, ya que los servidores rechazarán las solicitudes GET muy grandes.

Como práctica recomendada, para las solicitudes grandes utiliza una solicitud POST en lugar de una solicitud GET y agrega un parámetro method=GET. Si haces esto, la solicitud POST se interpretará como si fuera una solicitud GET.

Hacer varias solicitudes

La versión estándar de la API Graph está diseñada para facilitar la obtención de datos de un objeto individual y para buscar conexiones entre objetos. También incluye una capacidad limitada para recuperar datos para unos cuantos objetos al mismo tiempo.

Si tu aplicación necesita la capacidad de acceder a cantidades significativas de datos de una sola vez, o si necesitas hacer cambios en varios objetos a la vez, suele ser más eficaz poner en lotes tus consultas, en vez de hacer varias solicitudes HTTP individuales.

Para activar esto, la API Graph admite varias funciones, como la búsqueda de varios identificadores y el procesamiento por lotes. Las solicitudes por lotes se explican en una guía diferente, pero puedes leer más sobre la búsqueda de varios identificadores a continuación.

Solicitudes de lectura de varios identificadores

Puedes hacer una sola solicitud GET que recupere varios nodos mediante el extremo ?ids con los identificadores de objeto de esos nodos. Por ejemplo, para buscar la página de desarrolladores de Facebook y el usuario de la sesión actual en una sola solicitud, puedes utilizar la siguiente llamada a la API Graph:

GET graph.facebook.com
  /?ids=platform,me

Esto es equivalente a las siguientes solicitudes de API individuales:

GET graph.facebook.com
  /platform
  
GET graph.facebook.com
  /me

Los datos devueltos se verán así:

{
  "me": {
    "id": "1234567890"
    ... // Other fields
  }, 
  "platform": {
    "id": "19292868552"
    ... // Other fields
  }
}

Esto también puede funcionar con perímetros, siempre y cuando todos los identificadores solicitados tengan el perímetro solicitado. Por ejemplo:

GET graph.facebook.com
  /photos?ids={user-id-a},{user-id-b}

Esto es equivalente a las siguientes solicitudes de API individuales:

GET graph.facebook.com
  /{user-id-a}/photos
  
GET graph.facebook.com
  /{user-id-b}/photos

Los datos devueltos se verán así:

{
  "{user-id-a}": {
    "data": [
      {
        "id": "12345", 
        "picture": "{photo-url}", 
        "created_time": "2014-07-15T15:11:25+0000"
      }
      ... // More photos
    ]
  },
  "{user-id-b}": {
    "data": [
      {
        "id": "56789", 
        "picture": "{photo-url}", 
        "created_time": "2014-01-15T12:24:47+0000"
      }
      ... // More photos
    ]
  }, 
}

Ten en cuenta que si bien el filtrado de campos, la expansión de campo y la limitación funcionarán con estas búsquedas de varios identificadores, se producirá un error si uno de los objetos no tiene uno de los campos solicitados. Por ejemplo, si buscaras una página y un usuario con este método y después filtraras con fields=id,picture,gender, la solicitud fallaría porque las páginas no tienen un campo gender.

Introspección

La API Graph admite la introspección de nodos. Esto permite ver todos los perímetros que tiene un nodo sin conocer su tipo por adelantado. Para obtener esta información, agrega metadata=1 a la solicitud de la API Graph:

GET graph.facebook.com
  /{node-id}?
    metadata=1

El objeto JSON resultante incluirá una propiedad metadata que enumera todos los perímetros compatibles con el nodo determinado:

{
   "name": {node-name},
   "metadata": {
      "connections": {
         "feed": "http://graph.facebook.com/me/feed",
         "picture": "https://graph.facebook.com/me/picture",
         ....
      }
      "fields": [
        {
          "name": "id",
          "description": "The user's Facebook ID. No `access_token` required. `string`."
        },
        ....
      ],
      "type": "user"
   }
}

Publicar

La mayoría de los nodos en la API Graph tienen perímetros que pueden ser destinos de publicación (como /{user-id}/feedo /{album-id}/photos). Cada publicación con la API Graph se hace a través de una solicitud POST HTTP al perímetro relevante con todos los parámetros necesarios incluidos. Por ejemplo, para publicar algo en nombre de alguien, tienes que hacer una solicitud POST HTTP como se indica a continuación:

POST graph.facebook.com
  /{user-id}/feed?
    message={message}&
    access_token={access-token}

Todas las llamadas de publicación deben firmarse con un token de acceso. Para determinar los permisos que se necesitan en este token de acceso, consulta la referencia de la API Graph para el nodo en el que quieres publicar.

Hay un gran número de perímetros que pueden ser destinos de publicación. Encontrarás más detalles en el documento de referencia de cada nodo.

La guía de escenarios comunes para la API Graph contiene información adicional para algunos escenarios comunes de publicación.

Hacer varias solicitudes

Puedes encadenar llamadas de publicación con llamadas de lectura con las solicitudes por lotes. Para obtener más información, consulta Hacer varias solicitudes de API.

Lectura después de escritura

Muchos perímetros admiten la lectura después de escritura. Consulta la documentación de referencia de cada extremo para comprobar que sea compatible con la lectura después de escritura y cuáles campos están disponibles.

Actualizar

Cada actualización con la API Graph se hace a través de una solicitud POST HTTP al nodo relevante con todos los parámetros actualizados incluidos:

POST graph.facebook.com
  /{node-id}?
    {updated-field}={new-value}&
    access_token={access-token}

Todas las llamadas de actualización deben firmarse con un token de acceso con los mismos permisos necesarios de publicación para ese extremo, tal como se indica en la referencia de la API Graph para el nodo que quieres actualizar.

Lectura después de escritura

Muchos perímetros admiten la lectura después de escritura. Consulta la documentación de referencia de cada extremo para comprobar que sea compatible con la lectura después de escritura y cuáles campos están disponibles.

Eliminar

Para eliminar nodos de la gráfica envía solicitudes DELETE HTTP a dichos nodos:

DELETE graph.facebook.com
  /{node-id}?
    access_token=...

En general, una aplicación solo puede eliminar contenido que haya creado. Consulta la guía de referencia del nodo o perímetro para obtener más información.

Para admitir clientes que no admiten todos los métodos HTTP, alternativamente puedes emitir una solicitud POST a un extremo con el argumento adicional method=delete para reemplazar el método HTTP. Por ejemplo, puedes eliminar un comentario emitiendo la siguiente solicitud:

POST graph.facebook.com
  /{comment-id}?
    method=delete

Lectura después de escritura

Para crear y actualizar extremos, la API Graph puede leer inmediatamente un objeto correctamente publicado o actualizado y devolver los campos compatibles con el correspondiente extremo de lectura.

Para usar esta función, incluye un parámetro fields en tu solicitud y enumera los campos que quieres que se devuelvan. Por ejemplo, para publicar el mensaje "Hola" en la sección de noticias de un usuario, puedes hacer la siguiente solicitud:

POST graph.facebook.com
  /126577551217199/feed?
    message=Hello&
    fields=created_time,from,id,message,permalink_url

Esto devolvería los campos especificados como una respuesta con formato JSON de la siguiente manera:

{
  "created_time": "2017-04-06T22:04:21+0000",
  "from": {
    "name": "Jay P Jeanne",
    "id": "126577551217199"
  },
  "id": "126577551217199_122842541590700",
  "message": "Hello",
  "permalink_url": "https://www.facebook.com/126577551217199/posts/122842541590700",
}

Consulta la documentación de referencia de cada extremo para comprobar que sea compatible con la lectura después de escritura y cuáles campos están disponibles.

Errores

Si ocurre un error de lectura por cualquier motivo (por ejemplo, solicitar un campo que no existe), la API Graph responderá con una respuesta de error estándar. Además, la respuesta incluirá una propiedad original_response, cuyo valor será lo que el extremo devuelve normalmente cuando se hace de manera correcta.

Por ejemplo, esta solicitud contiene un campo no válido:

POST graph.facebook.com
  /126577551217199/feed?
    message=Hello&
    fields=permalink_urls

Esta sería la respuesta:

{
  "error": {
    "message": "(#100) Tried accessing nonexisting field (permalink_urls) on node type (Post)",
    "type": "FacebookApiException",
    "code": 100,
    "fbtrace_id": "AzMnKh6NRKY",
    "original_response": {
      "id": "126577551217199_122842541590700"
    }
  }
}

Puedes buscar en varios objetos públicos de la gráfica social con el extremo /search. La sintaxis para la búsqueda es:

GET graph.facebook.com
  /search?
    q={your-query}&
    type={object-type}

Todas las consultas de búsqueda de la API Graph necesitan un token de acceso incluido en la solicitud. Necesitas un token de acceso de usuario para ejecutar una búsqueda.

Tipos de búsqueda disponibles

Admitimos la búsqueda de los siguientes tipos:

Tipo Descripción Valor "q"

user

Busca una persona (si permite que su nombre pueda buscarse).

Nombre

page

Busca una página.

Nombre

event

Busca un evento.

Nombre

group

Busca un grupo.

Nombre

place

Busca un lugar. Para limitar tu búsqueda a una ubicación y distancia específicas, puedes agregar el parámetro center (con latitud y longitud) y un parámetro distance opcional (en metros).

Nombre

placetopic

Devuelve una lista de posibles temas de páginas de lugar y sus identificadores. Utilízalo con el parámetro topic_filter=all para obtener la lista completa.

Ninguno

ad_*

Una colección de diferentes opciones de búsqueda que se pueden utilizar para buscar opciones de segmentación.

Consulta las opciones de segmentación.

Ejemplo:

GET graph.facebook.com
  /search?
    q=coffee&
    type=place&
    center=37.76,-122.427&
    distance=1000

Gestionar errores

Las solicitudes realizadas a nuestras API pueden obtener una serie de respuestas de error diferentes. El siguiente tema describe los métodos de recuperación y ofrece una lista de valores de error con un mapa al método de recuperación más común que debe utilizarse.

Recibir códigos de error

Lo siguiente representa una respuesta de error común que se genera a partir de una solicitud de API errónea:

{
  "error": {
    "message": "Message describing the error", 
    "type": "OAuthException", 
    "code": 190,
    "error_subcode": 460,
    "error_user_title": "A title",
    "error_user_msg": "A message",
    "fbtrace_id": "EJplcsCHuLu"
  }
}
  • message: descripción en lenguaje natural del error.
  • code: código de error. Los valores comunes se especifican más adelante, junto con los métodos de recuperación habituales.
  • error_subcode: información adicional sobre el error. Los valores comunes se especifican más adelante.
  • error_user_msg: mensaje para mostrar al usuario. El idioma del mensaje se basa en la configuración regional de la solicitud de la API.
  • error_user_title: título del cuadro de diálogo, si aparece. El idioma del mensaje se basa en la configuración regional de la solicitud de la API.
  • fbtrace_id: identificador de compatibilidad interno. Cuando reportes un error relacionado con una llamada a la API Graph, incluye fbtrace_id para ayudarnos a encontrar datos de registro para la depuración.

Códigos de error

Código o tipo Nombre Qué hacer

OAuthException

Si no existe un subcódigo, esto quiere decir que el estado de inicio de sesión o token de acceso caducó, se revocó o no es válido. Obtén un nuevo token de acceso.

Si existe un subcódigo, consúltalo.

102

Sesión de la API

Si no existe un subcódigo, esto quiere decir que el estado de inicio de sesión o token de acceso caducó, se revocó o no es válido. Obtén un nuevo token de acceso.

Si existe un subcódigo, consúltalo.

1

API desconocida

Puede ser un problema temporal ocasionado por un tiempo de inactividad. Espera y reintenta la operación. Si vuelve a ocurrir, comprueba que estés enviando la solicitud a una API existente.

2

Servicio de API

Problema temporal ocasionado por un tiempo de inactividad. Espera y reintenta la operación.

4

Demasiadas llamadas a la API

Problema temporal ocasionado por una limitación. Espera y reintenta la operación; o bien, revisa el volumen de tu solicitud a la API.

17

Demasiadas llamadas de usuario a la API

Problema temporal ocasionado por una limitación. Espera y reintenta la operación; o bien, revisa el volumen de tu solicitud a la API.

10

Permiso de API denegado

El permiso no se concedió; o bien, se eliminó. Administra los permisos faltantes.

190

El token de acceso caducó

Obtén un nuevo token de acceso.

200-299

Permiso de API (varios valores según el permiso)

El permiso no se concedió; o bien, se eliminó. Administra los permisos faltantes.

341

Límite de aplicación alcanzado

Problema temporal ocasionado por un tiempo de inactividad o una limitación. Espera y reintenta la operación; o bien, revisa el volumen de tu solicitud a la API.

368

Bloqueado temporalmente por infracción de las políticas

Espera y reintenta la operación.

506

Publicación duplicada

Las publicaciones duplicadas no se pueden publicar de manera consecutiva. Cambia el contenido de la publicación y vuelve a intentarlo.

1609005

Error en enlace de publicación

Hubo un problema al extraer los datos del enlace proporcionado. Comprueba la URL y vuelve a intentarlo.

Subcódigos de error de autenticación

Código Nombre Qué hacer

458

Aplicación no instalada

El usuario no inició sesión en la aplicación. Reautentica al usuario.

459

Usuario verificado

El usuario necesita iniciar sesión en https://www.facebook.com o https://m.facebook.com para corregir un problema.

460

Contraseña modificada

En iOS 6 y versiones superiores, si la persona inició sesión con el proceso integrado en el sistema operativo, se le dirigirá a la configuración del sistema operativo de Facebook en el dispositivo para actualizar su contraseña. De lo contrario, deberá volver a iniciar sesión en la aplicación.

463

Caducado

El estado de inicio de sesión o el token de acceso caducó, se revocó o no es válido. Administra los tokens de acceso caducados.

464

Usuario no confirmado

El usuario necesita iniciar sesión en https://www.facebook.com o https://m.facebook.com para corregir un problema.

467

Token de acceso no válido

El token de acceso caducó, se revocó o no es válido. Administra los tokens de acceso caducados.

Parámetros complejos

La mayoría de los tipos de parámetros son directamente primitivos, como string e int, pero también hay tipos list y object, que se pueden especificar en la solicitud.

El tipo list se especifica en sintaxis JSON, por ejemplo: ["firstitem", "seconditem", "thirditem"]

El tipo object también se especifica en sintaxis JSON, por ejemplo: {"firstkey": "firstvalue", "secondKey": 123}

Depurar solicitudes de API

Modo de depuración de la API Graph

Cuando está activado el modo de depuración, la API Graph puede contener campos adicionales que explican problemas potenciales con la solicitud.

Para activar el modo de depuración, usa el parámetro de cadena de consulta debug. Por ejemplo:

GET graph.facebook.com
  /v2.3/me/friends
    access_token=...&
    debug=all

Si no se concedió el permiso user_friends, se generará la siguiente respuesta:

{
  "data": [
  ], 
  "__debug__": {
    "messages": [
      {
        "message": "Field friends is only accessible on User object, if user_friends permission is granted by the user", 
        "type": "warning"
      }, 
      {
        "link": "https://developers.facebook.com/docs/apps/changelog#v2_0", 
        "message": "Only friends who have installed the app are returned in versions greater or equal to v2.0.", 
        "type": "info"
      }
    ]
  }
}

El valor del parámetro debug se puede establecer en "all" o en un nivel de gravedad solicitado mínimo que corresponda al type del mensaje:

Valor de parámetro "debug" Lo que se devolverá

all

Todos los mensajes de depuración disponibles.

info

Mensajes de depuración de tipo info y warning.

warning

Solo los mensajes de depuración de tipo warning.

La información de depuración, cuando está disponible, se devuelve como un objeto JSON en la clave __debug__ de la matriz messages. Cada elemento de esta matriz es un objeto JSON que contiene los siguientes campos:

Campo Tipo de datos Descripción

message

Cadena

El mensaje

type

Cadena

La gravedad del mensaje

link

Cadena

(Opcional) Una URL que apunta a información relacionada

También puedes utilizar el modo de depuración con el explorador de la API Graph.

Determinar qué versión utilizan las solicitudes de API

Cuando crees una aplicación y hagas solicitudes a la API Graph, tal vez te resulte útil poder determinar la versión de la API de la que obtienes una respuesta. Por ejemplo, si haces llamadas sin una versión especificada, tal vez no conozcas la versión de la API que responde.

La API Graph suministra un encabezado de solicitud con todas las respuestas denominado facebook-api-version que indica la versión exacta de la API que generó la respuesta. Por ejemplo, una llamada a la API Graph que genera una solicitud con la versión 2.0 tendrá el siguiente encabezado HTTP:

facebook-api-version:v2.0

Este encabezado facebook-api-version te permite determinar si las llamadas a la API se devuelven de la versión que esperas.

Información de depuración para reportar errores

Si necesitas reportar un error en la API Graph, incluimos algunos encabezados de solicitud adicionales que debes enviar con el informe de errores para ayudarnos a identificar y reproducir el problema. Estos encabezados de solicitud son X-FB-Debug, x-fb-rev y X-FB-Trace-ID.