API Graph de Facebook: obtenga imágenes más grandes en una sola solicitud

88

Actualmente estoy usando Graph API Explorer para hacer algunas pruebas. Esa es una buena herramienta.

Quiero obtener la lista de amigos del usuario, con los nombres, identificadores e imágenes de los amigos. Entonces escribo:

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

Pero la imagen es solo 50x50, y me gustaría una más grande en esta solicitud.

Es posible ?

Martín
fuente

Respuestas:

68

Sin embargo, no es necesario extraer el atributo 'imagen'. hay una forma mucho más conveniente, lo único que necesita es el ID de usuario, vea el ejemplo a continuación;

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

ps type define el tamaño que desea

Por favor tenga en cuenta que al usar token con permisos básicos, / me / friends devolverá la lista de amigos solo con los atributos id + nombre

tormenta de cerveza
fuente
1
Pero no estoy de acuerdo con su última oración: con un permiso básico, puede acceder a más que id + atributo de nombre, por ejemplo: graph.facebook.com/btaylor
Martin
29
uhm, ¿qué pasa con "en una solicitud"?
Iulian Onofrei
4
También puede utilizar la imagen completa de la imagen.
Bo Pennings
"message": "(# 12) el borde de la imagen para este tipo está obsoleto para las versiones v2.3 y superiores",
Toolkit
202

Como se describe en este error en Facebook, también puede solicitar tamaños de imagen específicos ahora a través de la nueva expansión de campo API " sintaxis de " .

Al igual que:

https://graph.facebook.com/____OBJECT_ID____?fields=picture.type(large)
thaddeusmt
fuente
27
En efecto. fields = picture.width (640) es incluso mejor.
kaay
6
Parece que la API Graph de Facebook cambió su API. Facebook respondió "Los subcampos no son compatibles con la imagen" cuando traté de usar tu sugerencia.
Phat H. VU
2
obteniendo error: {"error": {"mensaje": "Solicitud de obtención no admitida. Lee la documentación de la API Graph en developers.facebook.com/docs/graph-api ", "type": "GraphMethodException", "code": 100}}
Vineesh TP
13
Ver el? Field = full_picture, adjuntos para consultas 2.x
Kevin
3
Con los nuevos cambios de Facebook, no se puede obtener la imagen más grande. ¿Alguna pista a alguien?
shadab.tughlaq
81

La mejor manera de conseguir que todos los amigos (que también utilizan la aplicación, por supuesto) tengan tamaños de imagen correctos es utilizar la expansión de campo , ya sea con una de las etiquetas de tamaño (cuadrado, pequeño, normal, grande):

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

(editar: esto ya no funciona)

... o puede especificar el ancho / alto:

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

Por cierto, también puedes escribirlo así:

me?fields=friends{picture.type(large)}
luschn
fuente
1
gracias por la información, actualizaré la respuesta. full_picture no parece funcionar para amigos: / yo / friends? fields = full_picture - ¿tienes alguna idea de cómo sería posible?
luschn
34

Cambie la matriz de campos id,name,pictureaid,name,picture.type(large)

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

Resultado:

{
   "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"
      }
   }
}
Julian Mann
fuente
7
¿Cuánto mide 200 x 200?
AlxVallejo
1
En la última (2.10), la API Graph no tiene un tamaño "grande" disponible:Graph returned an error: (#100) For field 'picture': type must be one of the following values: thumbnail, small, album
Honza
33

Puede establecer el tamaño de la imagen en píxeles, así:

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

De manera similar, el typeparámetro se puede utilizar

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

De la documentación

escriba enum {pequeño, normal, álbum, grande, cuadrado}

Agu Dondo
fuente
20

Investigué ampliamente Graph API Explorer y finalmente encontré full_picture

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

PD: me di cuenta de que full_picture no siempre proporciona la imagen de tamaño completo que quiero. 'adjuntos' hace

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture,attachments
Parque Jonghee
fuente
esto es solo mostrar ancho: 720px. Tu única foto grande encuentra como esta. para mayor graph.facebook.com/photo_id u puede ver fotos de 6 tamaños diferentes.
gokhan
Acabo de probar esto con el endpoint de amigos y no funcionó
luschn
9

Hum ... creo que he encontrado una solución.

De hecho, solo puede solicitar

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

Según http://developers.facebook.com/docs/reference/api/ (sección "Imágenes"), la URL de las fotos del perfil se puede construir con la identificación del usuario

Por ejemplo, asumiendo que la identificación del usuario está en $ 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"

Pero no es la URL de la imagen final, así que si alguien tiene una mejor solución, me encantaría saber :)

Martín
fuente
1
TIPOS DE TAMAÑO DE IMAGEN: developers.facebook.com/docs/graph-api/reference/user/picture
jave.web
3

Puede especificar width& heighten su solicitud a la API de gráficos de Facebook:http://graph.facebook.com/user_id/picture?width=500&height=500

Alexey Kislitsin
fuente
2

Desde v2.7, /<picture-id>?fields=imageste dará una lista con diferentes tamaños de imágenes, siendo el primer elemento la imagen a tamaño completo.

No conozco ninguna solución para varias imágenes a la vez.

maxbellec
fuente
1

En las imágenes, la URL que se encuentra en las respuestas del gráfico (el " http://photos-c.ak.fbcdn.net/ "), simplemente reemplace el "_s.jpg" predeterminado por "_n.jpg" (? Tamaño normal) o "_b.jpg" (? tamaño grande) o "_t.jpg" (miniatura).

Las URL de Hacakable / API REST mejoran la Web.

Ronan
fuente
1
Parece que siempre da "Se produjo un error al procesar su solicitud. Referencia # 50.27f74317.14274.604fb0" ahora desafortunadamente
Kevin
1

usuarios de rest-fb (imagen cuadrada, resolución más grande): Connection myFriends = fbClient.fetchConnection ("yo / amigos", User.class, Parameter.with ("fields", "public_profile, email, first_name, last_name, gender, picture .width (100) .height (100) "));

sigi
fuente
1

Recibí este error cuando hice una solicitud con picture.type(full_picture):

"(# 100) Para el campo 'imagen': el tipo debe ser uno de los siguientes valores: pequeño, normal, álbum, grande, cuadrado"

Cuando hago la solicitud con picture.type(album)y picture.type(square), me responde con una imagen de 50x50 píxeles de tamaño.

Cuando hago la solicitud con picture.type(large), me responde con una imagen de 200x200 píxeles de tamaño.

Cuando hago la solicitud con picture.width(800) , me responde con una imagen de 477x477 píxeles de tamaño.

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

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

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

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

Creo que Facebook muestra las imágenes cuyo tamaño cambia de forma variable cuando el usuario agrega esa foto por primera vez.

Lo que veo aquí, la API para solicitar la imagen del usuario, no admite el cambio de tamaño de la imagen solicitada. Da el tamaño de imagen más cercano, creo.

Ebleme
fuente
Es cierto ... "picture.type (large)" también me dio un 200x200 - no muy grande debo decir
James
0

Creo que a partir de ahora la única forma de obtener imágenes grandes de amigos es usar FQL. Primero, necesitas buscar una lista de amigos:

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

Luego analice esta lista y extraiga todos los amigos ids. Cuando tenga eso, simplemente ejecute la siguiente consulta FQL:

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

200aquí es solo un tamaño ejemplar, puede ingresar cualquier cosa. Debería obtener la siguiente respuesta:

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

Cada URL es el enlace a una imagen de 200x200px.

Paweł Gościcki
fuente
0

Tengo el mismo problema, pero probé este para resolver mi problema. devuelve una imagen grande. No es la solución perfecta, pero puedes probar esta.

https://graph.facebook.com/v2.0/OBJECT_ID/picture?access_token=XXXXX

Ajay
fuente
Simplemente agregue un parámetro más a la solicitud: type = large. Por favor, revise mi respuesta a continuación.
nacido en hula el
0

Variante de estilo JS. Simplemente establezca un ancho de imagen enorme y obtendrá la variante más grande.

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

Puede usar full_picture en lugar de la clave de imagen para obtener una imagen a tamaño completo.

Khalil ur Rehman
fuente
0

Nota : Desde Graph API v8.0 usted must provide the access tokenpor cada solicitud de UserID que haga.

Accediendo a la API de gráficos:

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

Con base de fuego:

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

Obtienes el token de registerCallbackesta manera

       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);
        }
    });

Esto es lo que dice la documentación:

A partir del 24 de octubre de 2020, se requerirá un token de acceso para todas las consultas basadas en UID. Si consulta un UID y, por lo tanto, debe incluir un token:

  • utilizar un token de acceso de usuario para solicitudes autenticadas de inicio de sesión de Facebook
  • utilizar un token de acceso a la página para solicitudes de ámbito de página
  • usar un token de acceso a la aplicación para solicitudes del lado del servidor
  • utilizar un token de acceso de cliente para solicitudes móviles o del lado del cliente web

Recomendamos que solo use un token de Cliente si no puede usar uno de los otros tipos de token.

Gmacv
fuente