Facebook Graph API: ottieni immagini più grandi in una sola richiesta


88

Attualmente sto utilizzando Graph API Explorer per eseguire alcuni test. È un ottimo strumento.

Voglio ottenere l'elenco degli amici dell'utente, con i nomi, gli ID e le immagini degli amici. Quindi digito:

https://graph.facebook.com/me/friends?fields=id,picture,name

Ma l'immagine è solo 50x50 e ne vorrei una più grande in questa richiesta.

È possibile ?

Risposte:


68

tuttavia, non è necessario estrarre l'attributo "immagine". c'è un modo molto più conveniente, l'unica cosa di cui hai bisogno è userid, vedi l'esempio sotto;

https://graph.facebook.com/user_id/picture?type=large

Il tipo di ps definisce la dimensione che desideri

tieni presente che usando il token con autorizzazioni di base, / me / friends restituirà l'elenco di amici solo con attributi id + name


1
Ma non sono d'accordo con te l'ultima frase: con il permesso di base, puoi accedere a più di id + attributo nome, es: graph.facebook.com/btaylor
Martin

29
uhm, che ne dici di "in una richiesta"?
Iulian Onofrei

4
Puoi anche usare full_picture instat of picture.
Bo Pennings

"message": "(# 12) il bordo dell'immagine per questo tipo è deprecato per le versioni v2.3 e successive",
Toolkit

202

Come descritto in questo bug su Facebook, ora puoi anche richiedere dimensioni di immagine specifiche tramite la nuova sintassi di " espansione del campo " dell'API .

Così:

https://graph.facebook.com/____OBJECT_ID____?fields=picture.type(large)

27
Infatti. fields = picture.width (640) è ancora meglio.
Kaay

6
Sembra che l'API Graph di Facebook abbia cambiato la loro API. Facebook ha risposto "I sottocampi non sono supportati dall'immagine" quando ho provato a utilizzare il tuo suggerimento.
Phat H. VU

2
ricezione dell'errore: {"errore": {"messaggio": "Richiesta di ricezione non supportata. Leggi la documentazione dell'API Graph su developers.facebook.com/docs/graph-api ", "type": "GraphMethodException", "code": 100}}
Vineesh TP

13
Vedere? Field = full_picture, allegati per query 2.x
Kevin

3
Con le nuove modifiche di Facebook, non è possibile ottenere un'immagine più grande. Qualche suggerimento a qualcuno?
shadab.tughlaq

82

Il modo migliore per convincere tutti gli amici (che usano anche l'app, ovviamente) con le dimensioni corrette delle immagini è usare l' espansione del campo , con uno dei tag di dimensione (quadrato, piccolo, normale, grande):

/me/friends?fields=picture.type(large)

(modifica: questo non funziona più)

... oppure puoi specificare la larghezza / altezza:

me/friends?fields=picture.width(100).height(100)

A proposito, puoi anche scriverlo in questo modo:

me?fields=friends{picture.type(large)}

1
grazie per le informazioni, aggiornerò la risposta. full_picture non sembra funzionare per gli amici però: / me / friends? fields = full_picture - hai idea di come sarebbe possibile?
luschn

34

Cambia l'array di campi id,name,pictureinid,name,picture.type(large)

https://graph.facebook.com/v2.8/me?fields=id,name,picture.type(large)&access_token=<the_token>

Risultato:

{
   "id": "130716224073524",
   "name": "Julian Mann",
   "picture": {
      "data": {
         "is_silhouette": false,
         "url": "https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/15032818_133926070419206_3681208703790460208_n.jpg?oh=a288898d87420cdc7ed8db5602bbb520&oe=58CB5D16"
      }
   }
}

7
Quanto è grande 200 x 200?
AlxVallejo

1
Nell'ultima (2.10) l'API Graph non è di dimensioni "grandi" disponibili:Graph returned an error: (#100) For field 'picture': type must be one of the following values: thumbnail, small, album
Honza

33

Puoi impostare la dimensione dell'immagine in pixel, in questo modo:

https://graph.facebook.com/v2.8/me?fields=id,name,picture.width(500).height(500)

Allo stesso modo, è typepossibile utilizzare il parametro

{user-id}/?fields=name,picture.type(large)

Dalla documentazione

digita enum {small, normal, album, large, square}



20

Ho studiato ampiamente Graph API Explorer e finalmente ho trovato full_picture

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture

PS Ho notato che full_picture non fornisce sempre l'immagine a dimensione intera che desidero. "allegati" sì

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture,attachments

questa è solo la larghezza dello spettacolo: 720px. solo la tua foto di grandi dimensioni trova come questa. per i più grandi graph.facebook.com/photo_id puoi vedere 6 foto di diverse dimensioni.
gokhan

L'ho appena testato con l'endpoint degli amici e non ha funzionato
luschn

9

Hum ... Penso di aver trovato una soluzione.

In effetti, in può solo richiedere

https://graph.facebook.com/me/friends?fields=id,name

Secondo http://developers.facebook.com/docs/reference/api/ (sezione "Immagini"), l'URL delle foto del profilo può essere costruito con l'ID utente

Ad esempio, supponendo che l'ID utente sia in $ id:

"http://graph.facebook.com/$id/picture?type=square"
"http://graph.facebook.com/$id/picture?type=small"
"http://graph.facebook.com/$id/picture?type=normal"
"http://graph.facebook.com/$id/picture?type=large"

Ma non è l'URL dell'immagine finale, quindi se qualcuno ha una soluzione migliore, sarei felice di saperlo :)



3

Puoi specificare width& heightnella tua richiesta all'API del grafico di Facebook:http://graph.facebook.com/user_id/picture?width=500&height=500


2

Da v2.7, /<picture-id>?fields=imagesti fornirà un elenco con dimensioni diverse delle immagini, il primo elemento è l'immagine a grandezza naturale.

Non conosco alcuna soluzione per più immagini contemporaneamente.


1

Nelle immagini l'URL trovato nelle risposte del grafico (il " http://photos-c.ak.fbcdn.net/ "), è sufficiente sostituire l'impostazione predefinita "_s.jpg" con "_n.jpg" (? Dimensione normale) o "_b.jpg" (? grande formato) o "_t.jpg" (miniatura).

URL Hacakable / API REST migliorano il Web.


1
Sembra dare sempre "Si è verificato un errore durante l'elaborazione della tua richiesta. Riferimento # 50.27f74317.14274.604fb0" ora purtroppo
Kevin

1

utenti rest-fb (immagine quadrata, risoluzione più grande): Connection myFriends = fbClient.fetchConnection ("me / friends", User.class, Parameter.with ("fields", "public_profile, email, first_name, last_name, gender, picture .width (100) .height (100) "));


1

Ho ricevuto questo errore quando ho effettuato una richiesta con picture.type(full_picture):

"(# 100) Per il campo" immagine ": il tipo deve essere uno dei seguenti valori: piccolo, normale, album, grande, quadrato"

Quando faccio la richiesta con picture.type(album)e picture.type(square), mi risponde con un'immagine di dimensioni 50x50 pixel.

Quando faccio la richiesta con picture.type(large), mi risponde con un'immagine di dimensione 200x200 pixel.

Quando picture.width(800)effettuo la richiesta con , mi risponde con un'immagine di dimensioni 477x477 pixel.

con picture.width(250), risposte 320x320.

con picture.width(50), risposte 50x50.

con picture.width(100), risposte 100x100.

con picture.width(150), risposte 160x160.

Penso che Facebook dia le immagini che vengono ridimensionate in modo diverso quando l'utente aggiunge per la prima volta quella foto.

Quello che vedo qui l'API per la richiesta dell'immagine dell'utente non supporta il ridimensionamento dell'immagine richiesta. Dà la dimensione dell'immagine più vicina, penso.


Vero ... "picture.type (large)" mi ha dato anche un 200x200 - non molto grande devo dire
James


0

Penso che al momento l'unico modo per ottenere immagini di grandi dimensioni di amici sia usare FQL. Innanzitutto, devi recuperare un elenco di amici:

https://graph.facebook.com/me/friends

Quindi analizza questo elenco ed estrai tutti gli amici ids. Quando ce l'hai, esegui la seguente query FQL:

SELECT id, url FROM profile_pic WHERE id IN (id1, id2) AND width=200 AND height=200

200qui è solo una dimensione esemplare, puoi inserire qualsiasi cosa. Dovresti ottenere la seguente risposta:

{
  "data": [
    {
      "id": ..., 
      "url": "https://fbcdn-profile-a.akamaihd.net/..."
    }, 
    {
      "id": ..., 
      "url": "https://fbcdn-profile-a.akamaihd.net/..."
    }
  ]
}

Ogni URL è il collegamento a un'immagine di 200x200px.




0

Variante in stile JS. Basta impostare un'enorme larghezza dell'immagine di grandi dimensioni e otterrai la variante più grande.

FB.api(
  '/' + userId,
  {fields: 'picture.width(2048)'},
  function (response) {
    if (response && !response.error) {
      console.log(response.picture.data.url);
    }
  }
);

0

Puoi usare full_picture invece della chiave picture per ottenere un'immagine a grandezza naturale.


0

Nota : dall'API Graph v8.0 must provide the access tokenper ogni richiesta di ID utente che fai.

Colpire l'API del grafico:

https://graph.facebook.com/<user_id>/picture?height=1000&access_token=<any_of_above_token>

Con Firebase:

FirebaseUser user = mAuth.getCurrentUser();
String photoUrl = user.getPhotoUrl() + "/picture?height=1000&access_token=" +
  loginResult.getAccessToken().getToken();

Ottieni il token registerCallbackproprio in questo modo

       LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            FirebaseUser user = mAuth.getCurrentUser();
            String photoUrl = user.getPhotoUrl() + "/picture?height=1000&access_token=" + loginResult.getAccessToken().getToken();
        }

        @Override
        public void onCancel() {
            Log.d("Fb on Login", "facebook:onCancel");
        }

        @Override
        public void onError(FacebookException error) {
            Log.e("Fb on Login", "facebook:onError", error);
        }
    });

Questo è ciò che dice la documentazione:

A partire dal 24 ottobre 2020, sarà richiesto un token di accesso per tutte le query basate su UID. Se interroghi un UID e quindi devi includere un token:

  • utilizzare un token di accesso utente per le richieste autenticate di accesso a Facebook
  • utilizzare un token di accesso alla pagina per le richieste con ambito di pagina
  • utilizzare un token di accesso all'app per le richieste lato server
  • utilizzare un token di accesso client per richieste lato client mobile o web

Ti consigliamo di utilizzare un token client solo se non sei in grado di utilizzare uno degli altri tipi di token.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.