Uso dell'API Graph

L'API Graph è il metodo principale per consentire l'ingresso e l'uscita dei dati nel social graph di Facebook. Si tratta di un'API di basso livello basata su HTTP che viene usata per richiedere dati, pubblicare nuove notizie, caricare foto e per altre operazioni necessarie alle app. Questa guida spiega come eseguire tutte queste operazioni nell'API Graph.

Nozioni di base

La panoramica sull'API Graph include nozioni principali sulla terminologia e sulla struttura dell'API. Le sezioni seguenti spiegano in modo più approfondito le operazioni che è possibile eseguire mediante l'API.

Lettura

Per leggere i nodi e i segmenti nell'API Graph, esegui una richiesta HTTP GET all'endpoint di interesse. Ad esempio, per recuperare informazioni relative all'utente, esegui la richiesta HTTP GET in questo modo:

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

La maggior parte delle chiamate API deve essere firmata con un token d'accesso. Per determinare le autorizzazioni necessarie al token d'accesso, consulta la documentazione di riferimento per l'API Graph relativa al nodo o al segmento che desideri leggere. Per generare rapidamente i token e sperimentare l'API per scoprire come funziona, puoi anche usare il tool di esplorazione per la API Graph.

Il nodo /me è un particolare endpoint che si traduce nell'user_id dell'utente (o nel page_id di una Pagina Facebook), il cui token d'accesso viene attualmente usato per effettuare le chiamate API. Se avessi un token d'accesso per l'utente potresti recuperare tutte le sue foto usando:

GET graph.facebook.com
  /me/photos

La risposta cambia in base al nodo o al segmento che stai leggendo, ma sarà visualizzata in questo formato generico:

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

Scelta dei campi

Per impostazione predefinita, non tutti i campi presenti nel nodo o nel segmento vengono restituiti dopo una query. Puoi scegliere quali campi o segmenti desideri che ti siano restituiti con il parametro fields della query. Si tratta di una soluzione utile per rendere le chiamate API più rapide ed efficienti.

Ad esempio, la chiamata all'API Graph seguente che usa il tuo token d'accesso per l'utente https://graph.facebook.com/me?fields=id,name,picture restituisce solo l'ID, il nome e l'immagine del tuo profilo:

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

Ordinamento

Puoi ordinare un insieme di dati in modo cronologico. Ad esempio, puoi mostrare i commenti a una foto in ordine cronologico inverso usando la chiave reverse_chronological:

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

order deve avere uno dei seguenti valori:

  • chronological
  • reverse_chronological

Ricerca dell'URL

È possibile scoprire la maggior parte degli oggetti mediante il relativo ID, ma quando questo non è possibile l'unico strumento di identificazione che hai a disposizione è un URL.

Puoi usare il nodo URL, introdotto nella versione 2.1, per restituire gli ID degli URL di un oggetto Open Graph o per recuperare i dati associati all'URL di un deep link all'interno dell'app.

Scopri di più su come recuperare i dati di un deep link all'interno dell'app con l'API Index nella nostra documentazione su App Links.

Modifica delle richieste API

Alcuni endpoint API possono essere usati con parametri aggiuntivi per modificare la richiesta. La natura delle azioni svolte da questi modificatori può variare, pertanto li abbiamo descritti separatamente in ognuno dei documenti di riferimento per l'API, dove necessario. Qui sotto trovi un elenco dei modificatori comuni che è possibile usare con la maggior parte degli endpoint.

Nome Descrizione Tipo

return_ssl_resources

Usato per la richiesta di un'immagine da restituire tramite connessione sicura (HTTPS) per evitare gli avvisi di contenuti misti nei browser.

bool

locale

Usato quando l'app deve recuperare contenuti localizzati in una determinata lingua (se disponibili).

Locale

Sotto puoi trovare altri modificatori relativi a paginazione e introspezione.

Richieste nidificate

La funzione di espansione dei campi, offerta dall'API Graph, ti consente di nidificare in modo efficace più query al graph in un'unica chiamata. Alcune risorse, tra cui gran parte dell'API pubblicitaria, non sono in grado di usare l'espansione dei campi su alcune o tutte le connessioni.

Ad esempio, con un'unica chiamata, puoi richiedere le prime N foto dei primi K album. La risposta mantiene la gerarchia dei dati in modo che gli sviluppatori non debbano unificarli nel client.

Si tratta di una funzione diversa da quella delle richieste batch che ti consente di effettuare più chiamate API Graph, potenzialmente non collegate, mediante un'unica richiesta.

L'espansione dei campi assume questo formato generico:

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

In questo caso, <first-level> sarà costituito da uno o più campi o segmenti (separati da virgola) del nodo principale. <second-level> sarà costituito da uno o più campi o segmenti (separati da virgola) del nodo di primo livello.

Non esistono limiti sul numero di livelli che è possibile nidificare. Inoltre, puoi usare l'argomento .limit(n) in ogni campo o segmento per limitare il numero di oggetti che desideri ottenere.

È più facile capire il concetto vedendolo in azione, pertanto questa è una query di esempio per recuperare fino a cinque album creati da un utente e gli ultimi cinque post della sezione Notizie.

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

Possiamo estendere l'operazione a ogni oggetto album e recuperare anche le prime due foto e gli utenti taggati in ognuna:

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

Estendiamola nuovamente aggiungendo il nome di ogni foto, l'URL delle immagini e gli utenti taggati:

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

Diamo un'occhiata a un esempio che usa la paginazione basata sul cursore:

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

Puoi vedere come l'espansione dei campi è in grado di funzionare con nodi, segmenti e campi restituendo dati complessi mediante un'unica richiesta.

Risultati paginati

Se esegui una richiesta API a un nodo o a un segmento, di solito non ricevi tutti i risultati in un'unica risposta. Questo poiché alcune risposte potrebbero contenere migliaia di oggetti, pertanto la maggior parte viene paginata per impostazione predefinita.

Paginazione basata sul cursore

La paginazione basata sul cursore rappresenta il metodo più efficace per la paginazione e deve essere usata ogni volta che è possibile. Un cursore si riferisce a una stringa casuale di caratteri che contrassegna un determinato elemento in un elenco di dati. A meno che l'elemento non venga eliminato, il cursore punterà sempre alla stessa parte dell'elenco e diventerà non valido una volta rimosso l'elemento. Per questo motivo, la tua app non deve memorizzare i cursori e ritenere che siano validi in futuro.

Leggendo un segmento che supporta la paginazione basata sul cursore, visualizzerai la seguente risposta 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 segmento paginato in base al cursore supporta i seguenti parametri:

  • before: si tratta del cursore che punta all'inizio della pagina di dati restituita.
  • after: si tratta del cursore che punta alla fine della pagina di dati restituita.
  • limit: questo è il numero massimo di oggetti che potrebbero essere restituiti. Una query potrebbe restituire un numero di oggetti inferiore rispetto al valore di limit a causa dei filtri. Per indicare che la tua query ha raggiunto la fine della lista di dati, non ti basare sul numero di risultati inferiore rispetto al valore di limit. Usa invece l'assenza di next come descritto di seguito. Ad esempio, se imposti limit su 20, verranno trovati 20 oggetti ma, a causa dei filtri per la privacy, ne verranno mostrati solo 9. Se reimposti limit su 40, verranno trovati 40 oggetti ma, sempre a causa dei filtri, ne verranno restituiti solo 12. Se la ricerca non contiene risultati, non ci sarà alcuna paginazione né indicazione che sono disponibili più elementi, anche se potrebbero essercene aumentando il valore di limit. Per motivi legati alle prestazioni, alcuni segmenti possono fissare anche un massimo per il valore di limit.
  • next: l'endpoint API Graph che restituisce la pagina di dati successiva. Se non è incluso, sarà l'ultima pagina di dati. Date le modalità con cui la paginazione usa la visibilità e la privacy, è possibile che una pagina sia vuota ma contenga un link per proseguire a quella successiva. Interrompi la paginazione se il link non viene visualizzato.
  • previous: l'endpoint API Graph che restituisce la pagina di dati precedente. Se non è incluso sarà la prima pagina di dati.

Non memorizzare i cursori, poiché diventano subito non validi in caso di elementi aggiunti o eliminati.

Paginazione basata sul tempo

La paginazione basata sul tempo è usata per navigare mediante i dati restituiti usando il tempo Unix, che punta a determinati parametri temporali in un elenco di dati.

Usando un endpoint che sfrutta la paginazione basata sul tempo, visualizzerai la seguente risposta 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 segmento paginato in base al tempo supporta i seguenti parametri:

  • until: un parametro temporale Unix o un valore strtotime che punta alla fine di una serie di dati basati sul tempo.
  • since: un parametro temporale Unix o un valore strtotime che punta all'inizio di una serie di dati basati sul tempo.
  • limit: questo è il numero massimo di oggetti che potrebbero essere restituiti. Una query potrebbe restituire un numero di oggetti inferiore rispetto al valore di limit a causa dei filtri. Per indicare che la tua query ha raggiunto la fine della lista di dati, non ti basare sul numero di risultati inferiore rispetto al valore di limit. Usa invece l'assenza di next come descritto di seguito. Ad esempio, se imposti limit su 10 e vengono restituiti 9 risultati, potrebbero essere disponibili altri dati, ma un elemento è stato rimosso a causa dei filtri per la privacy. Per motivi legati alle prestazioni, alcuni segmenti possono fissare anche un massimo per il valore di limit. In tutti i casi, l'API restituisce i link di paginazione corretti.
  • next: l'endpoint API Graph che restituisce la pagina di dati successiva.
  • previous: l'endpoint API Graph che restituisce la pagina di dati precedente.

Per risultati coerenti, specifica entrambi i parametri since e until. Inoltre, è consigliabile che la differenza massima di tempo sia di 6 mesi.

Paginazione basata sull'offset

La paginazione basata sull'offset può essere usata quando la cronologia non è importante e desideri solo che ti sia restituito un determinato numero di oggetti. Usala solo se il segmento non supporta la paginazione basata sul cursore o sul tempo.

Un segmento paginato in base all'offset supporta i seguenti parametri:

  • offset: determina l'inizio di ogni pagina secondo il numero specificato.
  • limit: questo è il numero massimo di oggetti che potrebbero essere restituiti. Una query potrebbe restituire un numero di oggetti inferiore rispetto al valore di limit a causa dei filtri. Per indicare che la tua query ha raggiunto la fine della lista di dati, non ti basare sul numero di risultati inferiore rispetto al valore di limit. Usa invece l'assenza di next come descritto di seguito. Ad esempio, se imposti limit su 10 e vengono restituiti 9 risultati, potrebbero essere disponibili altri dati, ma un elemento è stato rimosso a causa dei filtri per la privacy. Per motivi legati alle prestazioni, alcuni segmenti possono fissare anche un massimo per il valore di limit. In tutti i casi, l'API restituisce i link di paginazione corretti.
  • next: l'endpoint API Graph che restituisce la pagina di dati successiva. Se non è incluso, sarà l'ultima pagina di dati. Date le modalità con cui la paginazione usa la visibilità e la privacy, è possibile che una pagina sia vuota ma contenga un link per proseguire a quella successiva. Interrompi la paginazione se il link non viene visualizzato.
  • previous: l'endpoint API Graph che restituisce la pagina di dati precedente. Se non è incluso sarà la prima pagina di dati.

Tieni presente che, se all'elenco di oggetti sottoposto a paginazione ne vengono aggiunti di nuovi, i contenuti di ogni pagina basata sull'offset cambieranno.

La paginazione basata sull'offset non è supportata per tutte le chiamate API. Per ottenere risultati coerenti, ti consigliamo di eseguire la paginazione sfruttando i link per proseguire alla pagina successiva o tornare a quella precedente, restituiti nella risposta.

Invio di richieste di grandi dimensioni

Alcuni endpoint API Graph accettano parametri di grandi dimensioni. Se le richieste superano i duemila caratteri, è probabile che visualizzerai errori da parte del server che rifiuta le richieste GET di dimensioni troppo grandi.

Come best practice per le richieste di grandi dimensioni, usa una richiesta POST anziché GET e aggiungi un parametro method=GET. In questo modo, la richiesta POST verrà interpretata come GET.

Invio di più richieste

La versione standard dell'API Graph è concepita per ottenere i dati relativi a un singolo oggetto e consultare le connessioni tra gli oggetti in modo semplice. Inoltre, include la possibilità limitata di recuperare contemporaneamente i dati di alcuni oggetti.

Se la tua app deve accedere a quantità importanti di dati o devi modificare diversi oggetti contemporaneamente, spesso risulta più efficiente eseguire query in batch anziché inviare più richieste HTTP.

L'API Graph supporta diverse funzioni che ti consentono di farlo, tra cui la ricerca di più ID e l'invio in batch. Le richieste batch vengono illustrate in una guida separata, mentre sotto puoi consultare ulteriori informazioni sulla ricerca di più ID.

Più richieste di lettura degli ID

Puoi inviare una singola richiesta GET per recuperare più nodi usando l'endpoint ?ids con gli ID degli oggetti presenti di tali nodi. Ad esempio, per ricercare la Pagina Facebook for Developers e l'utente della sessione corrente con un'unica richiesta, usa la seguente chiamata API Graph:

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

Equivale a queste singole richieste API:

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

I dati restituiti saranno simili a questi:

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

Ciò è valido anche per i segmenti, a condizione che tutti gli ID richiesti dispongano del segmento richiesto. Ad esempio:

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

Equivale a queste singole richieste API:

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

I dati restituiti saranno simili a questi:

{
  "{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
    ]
  }, 
}

Tieni presente che, sebbene i filtri, l'espansione e la limitazione dei campi funzionino con queste ricerche per più ID, riceverai un messaggio di errore nel caso in cui un oggetto non disponga di uno dei campi richiesti. Ad esempio, se hai cercato una Pagina e un utente mediante questo metodo, quindi hai applicato un filtro su fields=id,picture,gender, la richiesta non avrà esito positivo poiché le Pagine non dispongono del campo gender.

Introspezione

L'API Graph supporta l'introspezione dei nodi. Di conseguenza, puoi visualizzare i segmenti del nodo senza conoscerne prima il tipo. Per ottenere queste informazioni, aggiungi metadata=1 alla richiesta API Graph:

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

Il risultato in JSON includerà la proprietà metadata, che indica i segmenti supportati da un determinato nodo:

{
   "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"
   }
}

Pubblicazione

La maggior parte dei nodi nell'API Graph dispone di segmenti che possono essere destinazioni di pubblicazione, ad esempio /{user-id}/feed o /{album-id}/photos. La pubblicazione mediante l'API Graph avviene tramite una richiesta HTTP POST al segmento, includendo i parametri necessari. Ad esempio, per pubblicare un post per conto dell'utente, esegui la richiesta HTTP POST in questo modo:

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

Le chiamate di pubblicazione devono essere firmate con un token d'accesso. Per determinare le autorizzazioni necessarie al token d'accesso, consulta la documentazione di riferimento per l'API Graph relativa al nodo in cui desideri pubblicare.

I segmenti che possono essere destinazioni di pubblicazione sono numerosi. I dettagli sono disponibili nella documentazione di riferimento di ciascun nodo.

La guida agli scenari più comuni per l'API Graph contiene maggiori informazioni relative ad alcuni degli scenari di pubblicazione più comuni.

Invio di più richieste

Puoi concatenare le chiamate di pubblicazione e di lettura usando le richieste batch. Per maggiori informazioni, consulta Invio di più richieste API.

Lettura dopo la scrittura

Diversi segmenti supportano la lettura dopo la scrittura. Consulta la documentazione di riferimento di ogni endpoint per sapere se supporta la lettura dopo la scrittura e quali sono i campi disponibili.

Aggiornamento

Gli aggiornamenti dell'API Graph vengono eseguiti tramite una richiesta HTTP POST al nodo pertinente, includendo i parametri aggiornati:

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

Le chiamate di aggiornamento devono essere firmate con un token d'accesso con le stesse autorizzazioni necessarie per la pubblicazione sull'endpoint, come descritto nella documentazione di riferimento per l'API Graph relativa al nodo che desideri aggiornare.

Lettura dopo la scrittura

Diversi segmenti supportano la lettura dopo la scrittura. Consulta la documentazione di riferimento di ogni endpoint per sapere se supporta la lettura dopo la scrittura e quali sono i campi disponibili.

Eliminazione

Elimina i nodi dal graph inviando richieste HTTP DELETE:

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

In generale, le app possono eliminare solo i contenuti creati da esse. Per maggiori informazioni, consulta la guida di riferimento relativa al nodo o al segmento.

Per i client che non supportano i metodi HTTP, invia una richiesta POST all'endpoint con l'argomento method=delete per sovrascrivere il metodo HTTP. Ad esempio, puoi eliminare un commento inviando la seguente richiesta:

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

Lettura dopo la scrittura

Per la creazione e l'aggiornamento degli endpoint, l'API Graph può leggere subito un oggetto pubblicato o aggiornato correttamente e restituire i campi supportati dall'endpoint di lettura corrispondente.

Per usare questa funzione, includi un fieldsparametro nella richiesta eindica i campi che desideri vengano restituiti. Ad esempio, per pubblicare il messaggio "Hello" nel feed di un utente, potresti effettuare la richiesta seguente:

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

La richiesta restituirebbe i campi specificati come risposta in formato JSON, in questo modo:

{
  "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 documentazione di riferimento di ogni endpoint per sapere se supporta la lettura dopo la scrittura e quali sono i campi disponibili.

Errori

Se la lettura non va a buon fine per qualsiasi motivo (ad esempio, la richiesta riguardava un campo non esistente), l'API Graph risponderà con un errore di risposta standard. Inoltre, la risposta comprenderà una proprietà original_response il cui valore sarà quello normalmente restituito dall'endpoint quando il processo va a buon fine.

Ad esempio, questa richiesta contiene un campo non valido:

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

La risposta sarebbe questa:

{
  "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"
    }
  }
}

Puoi eseguire una ricerca degli oggetti pubblici nel social graph con l'endpoint /search. La sintassi di ricerca è la seguente:

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

Le query di ricerca all'API Graph richiedono l'inclusione di un token d'accesso. Per eseguire una ricerca, ti serve un token d'accesso.

Tipi di ricerca disponibili

Supportiamo i seguenti tipi di ricerca:

Tipo Descrizione Valore `q`

user

Ricerca di un utente (se consente la ricerca del proprio nome).

Nome

page

Ricerca di una Pagina.

Nome

event

Ricerca di un evento.

Nome

group

Ricerca di un gruppo.

Nome

place

Ricerca di un luogo. Per limitare la ricerca a determinate posizioni e distanze, aggiungi il parametro center (con latitudine e longitudine) e il parametro facoltativo distance (in metri).

Nome

placetopic

Restituisce un elenco di possibili argomenti della Pagina di un luogo e i relativi ID. Per ottenere un elenco completo, usa il parametro topic_filter=all.

Nessuno

ad_*

Un insieme di opzioni di ricerca da usare per individuare le opzioni di targetizzazione.

Consulta Opzioni di targetizzazione.

Esempio:

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

Gestione degli errori

Le richieste effettuate alle nostre API possono determinare diverse risposte di errore. Il seguente argomento le descrive fornendo un elenco di valori di errore e uno schema che illustra la strategia più comune da usare.

Ricezione di codici di errore

La seguente risposta rappresenta un errore comunemente restituito quando una richiesta API non va a buon fine:

{
  "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: una descrizione leggibile dell'errore.
  • code: un codice di errore. I valori comuni sono elencati di seguito, insieme alle strategie più comuni da usare.
  • error_subcode: informazioni aggiuntive sull'errore. I valori comuni sono elencati di seguito.
  • error_user_msg: il messaggio da presentare all'utente. La lingua del messaggio si basa sulla lingua della richiesta API.
  • error_user_title: il titolo della finestra di dialogo, se visualizzata. La lingua del messaggio si basa sulla lingua della richiesta API.
  • fbtrace_id: identificatore interno per l'assistenza. Se segnali un bug relativo a una chiamata API Graph, includi fbtrace_id per aiutarci a individuare i dati del registro per il debug.

Codici di errore

Codice o tipo Nome Cosa fare

OAuthException

Se non è presente un sottocodice, lo stato di accesso o il token d'accesso è scaduto, è stato revocato o non è altrimenti valido. Ottieni un nuovo token d'accesso.

Se presente, vedi il sottocodice.

102

API Session

Se non è presente un sottocodice, lo stato di accesso o il token d'accesso è scaduto, è stato revocato o non è altrimenti valido. Ottieni un nuovo token d'accesso.

Se presente, vedi il sottocodice.

1

API Unknown

Potrebbe essere un problema temporaneo dovuto a inattività. Attendi e riprova a eseguire l'operazione. Se il problema si verifica di nuovo, controlla se stai richiedendo un'API esistente.

2

API Service

Problema temporaneo dovuto a inattività. Attendi e riprova a eseguire l'operazione.

4

API Too Many Calls

Problema temporaneo dovuto a throttling. Attendi e riprova a eseguire l'operazione, in alternativa esamina il volume di richieste API.

17

API User Too Many Calls

Problema temporaneo dovuto a throttling. Attendi e riprova a eseguire l'operazione, in alternativa esamina il volume di richieste API.

10

API Permission Denied

L'autorizzazione non è stata concessa o è stata rimossa. Gestisci le autorizzazioni mancanti.

190

Access token has expired

Ottieni un nuovo token d'accesso.

200-299

API Permission (più valori a seconda dell'autorizzazione)

L'autorizzazione non è stata concessa o è stata rimossa. Gestisci le autorizzazioni mancanti.

341

Application limit reached

Problema temporaneo dovuto a inattività o throttling. Attendi e riprova a eseguire l'operazione, in alternativa esamina il volume di richieste API.

368

Temporarily blocked for policies violations

Attendi e riprova a eseguire l'operazione.

506

Duplicate Post

Non puoi pubblicare post duplicati consecutivamente. Modifica i contenuti del post e riprova.

1609005

Error Posting Link

Si è verificato un problema durante l'estrazione dei dati dal link fornito. Verifica l'URL e prova a ripetere l'operazione.

Sottocodici degli errori di autenticazione

Codice Nome Cosa fare

458

App Not Installed

L'utente non ha effettuato l'accesso all'app. Ripeti l'autenticazione dell'utente.

459

User Checkpointed

L'utente deve effettuare l'accesso all'indirizzo https://www.facebook.com o https://m.facebook.com per risolvere un problema.

460

Password Changed

Su iOS 6 e versioni successive, se l'utente ha effettuato l'accesso mediante il flusso integrato nel sistema operativo, reindirizzalo alle relative impostazioni di Facebook nel dispositivo per aggiornare la password. Altrimenti, dovrà effettuare nuovamente l'accesso all'app.

463

Expired

Lo stato di accesso o il token d'accesso è scaduto, è stato revocato o non è valido. Gestisci i token d'accesso scaduti.

464

Unconfirmed User

L'utente deve effettuare l'accesso all'indirizzo https://www.facebook.com o https://m.facebook.com per risolvere un problema.

467

Invalid access token

Il token d'accesso è scaduto, è stato revocato o non è valido. Gestisci i token d'accesso scaduti.

Parametri complessi

La maggior parte dei tipi di parametri è rappresentata da primitive semplici, come string e int, ma esistono anche tipi list e object che possono essere specificati nella richiesta.

Il tipo list è specificato nella sintassi JSON, ad esempio: ["firstitem", "seconditem", "thirditem"]

Anche il tipo object è specificato nella sintassi JSON, ad esempio: {"firstkey": "firstvalue", "secondKey": 123}

Debug delle richieste API

Modalità debug dell'API Graph

Quando la modalità debug è abilitata, la risposta dell'API Graph può contenere campi aggiuntivi che spiegano i possibili problemi relativi alla richiesta.

Per abilitare la modalità debug, usa il parametro debug nella stringa della query. Ad esempio:

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

Se l'autorizzazione user_friends non è stata concessa, la procedura restituirà la seguente risposta:

{
  "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"
      }
    ]
  }
}

Il valore del parametro debug può essere impostato su "all" o su un livello di severità minimo richiesto, che corrisponde al type del messaggio:

Valore del parametro debug Risultato restituito

all

Tutti i messaggi di debug disponibili.

info

I messaggi di debug di tipo info e warning.

warning

Solo i messaggi di debug di tipo warning.

Se disponibili, le informazioni di debug vengono restituite come oggetti JSON sotto la chiave __debug__ nell'array messages. Ogni elemento dell'array è un oggetto JSON contenente i seguenti campi:

Campo Tipo di dati Descrizione

message

Stringa

Il messaggio.

type

Stringa

La severità del messaggio.

link

Stringa

[Facoltativo] Un URL che punta alle informazioni correlate.

È possibile usare la modalità debug anche con il tool di esplorazione per la API Graph.

Individuazione della versione usata dalle richieste API

Quando crei un'app ed esegui le richieste API Graph, può essere utile individuare la versione dell'API da cui riceverai la risposta. Ad esempio, effettuando le chiamate senza una versione specifica, è probabile che tu non conosca quella dell'API che invierà la risposta.

Per ogni risposta, l'API Graph fornisce un'intestazione denominata facebook-api-version che indica la versione esatta dell'API che l'ha generata. Ad esempio, una chiamata API Graph che genera una richiesta con la versione 2.0 avrà la seguente intestazione HTTP:

facebook-api-version:v2.0

L'intestazione facebook-api-version ti consente di stabilire se le chiamate API vengono restituite dalla versione prevista.

Informazioni di debug per la segnalazione di bug

Se desideri segnalare un bug relativo all'API Graph, mettiamo a tua disposizione altre intestazioni per le richieste da inviare insieme alla segnalazione per aiutarci a individuare e a riprodurre il problema. Le intestazioni di tali richieste sono X-FB-Debug, x-fb-rev e X-FB-Trace-ID.