API do Facebook Graph: obtenha imagens maiores em uma solicitação

88

Atualmente estou usando o Graph API Explorer para fazer alguns testes. Essa é uma boa ferramenta.

Quero obter a lista de amigos do usuário, com nomes, ids e fotos dos amigos. Então eu digito:

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

Mas a imagem é apenas 50x50 e eu gostaria de uma maior nesta solicitação.

É possível ?

Martin
fonte

Respostas:

69

você não precisa puxar o atributo 'imagem' embora. há uma maneira muito mais conveniente, a única coisa que você precisa é a id do usuário, veja o exemplo abaixo;

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

tipo ps define o tamanho que você deseja

Por favor, tenha em mente que usando token com permissões básicas, / me / friends retornará a lista de amigos apenas com atributos id + name

tempestade de cerveja
fonte
1
Mas não concordo com a última frase: com permissão básica, você pode acessar mais do que o atributo id + nome, ex: graph.facebook.com/btaylor
Martin
29
uhm, que tal "em um pedido"?
Iulian Onofrei
4
Você também pode usar full_picture em vez de imagem.
Bo Pennings
"mensagem": "(# 12) borda da imagem para este tipo está obsoleto para as versões v2.3 e superior",
Toolkit
198

Conforme descrito neste bug no Facebook, você também pode solicitar tamanhos de imagem específicos agora por meio da nova sintaxe de " expansão de campo " da API .

Igual a:

https://graph.facebook.com/____OBJECT_ID____?fields=picture.type(large)
thaddeusmt
fonte
27
De fato. fields = picture.width (640) é ainda melhor.
kaay
6
Parece que a API Graph do Facebook mudou sua API. O Facebook respondeu "Subcampos não são suportados por imagem" quando tentei usar sua sugestão.
Phat H. VU
2
erro de obtenção: {"error": {"message": "Solicitação de obtenção não suportada. Leia a documentação da API Graph em developers.facebook.com/docs/graph-api ", "type": "GraphMethodException", "code": 100}}
Vineesh TP
13
Veja o? Field = full_picture, anexos para consultas 2.x
Kevin,
3
Com as novas alterações do Facebook, não é possível obter uma imagem maior. Alguma dica de alguém?
shadab.tughlaq
81

A melhor maneira de fazer com que todos os amigos (que também estão usando o aplicativo, é claro) tenham tamanhos de imagem corretos é usar a expansão de campo , seja com uma das tags de tamanho (quadrado, pequeno, normal, grande):

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

(editar: isso não funciona mais)

... ou você pode especificar a largura / altura:

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

Aliás, você também pode escrever assim:

me?fields=friends{picture.type(large)}
Luschn
fonte
1
obrigado pela informação, atualizarei a resposta. full_picture não parece funcionar para amigos: / me / friends? fields = full_picture - você tem alguma ideia de como isso seria possível?
luschn
34

Altere a matriz de campos id,name,pictureparaid,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
fonte
7
Qual é o tamanho de 200 x 200?
AlxVallejo
1
No último (2.10) Graph API não está disponível em tamanho "grande":Graph returned an error: (#100) For field 'picture': type must be one of the following values: thumbnail, small, album
Honza
33

Você pode definir o tamanho da imagem em pixels, assim:

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

De maneira semelhante, o typeparâmetro pode ser usado

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

Da documentação

digite enum {pequeno, normal, álbum, grande, quadrado}

Agu Dondo
fonte
20

Eu pesquisei o Graph API Explorer extensivamente e finalmente encontrei full_picture

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

PS Percebi que full_picture nem sempre fornece a imagem em tamanho real que desejo. 'anexos' faz

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture,attachments
Jonghee Park
fonte
esta é apenas a largura de exibição: 720px. sua única foto grande encontra-se assim. para o maior graph.facebook.com/photo_id você pode ver 6 tamanhos diferentes de fotos.
gokhan
Acabei de testar isso com o endpoint de amigos e não funcionou
luschn
9

Hum ... acho que encontrei uma solução.

Na verdade, pode apenas solicitar

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

De acordo com http://developers.facebook.com/docs/reference/api/ (seção "Imagens"), a url das fotos do perfil pode ser construída com o ID do usuário

Por exemplo, supondo que o ID do usuário esteja em $ 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"

Mas não é o URL final da imagem, então se alguém tiver uma solução melhor, ficarei feliz em saber :)

Martin
fonte
1
TIPOS DE TAMANHO DE IMAGEM: developers.facebook.com/docs/graph-api/reference/user/picture
jave.web
3

Você pode especificar width& heightem sua solicitação à API gráfica do Facebook:http://graph.facebook.com/user_id/picture?width=500&height=500

Alexey Kislitsin
fonte
2

De v2.7, /<picture-id>?fields=imagesapresentará uma lista com diferentes tamanhos de imagens, sendo o primeiro elemento a imagem em tamanho real.

Não conheço nenhuma solução para várias imagens de uma vez.

maxbellec
fonte
1

No URL das imagens encontrado nas respostas do gráfico (as " http://photos-c.ak.fbcdn.net/ "), basta substituir o padrão "_s.jpg" por "_n.jpg" (? Tamanho normal) ou "_b.jpg" (? tamanho grande) ou "_t.jpg" (miniatura).

URLs Hacakable / API REST tornam a Web melhor.

Ronan
fonte
1
Parece sempre fornecer "Ocorreu um erro ao processar sua solicitação. Referência # 50.27f74317.14274.604fb0" agora, infelizmente
Kevin
1

usuários rest-fb (imagem quadrada, res. maior): Connection myFriends = fbClient.fetchConnection ("me / friends", User.class, Parameter.with ("fields", "public_profile, email, first_name, last_name, gender, picture .width (100) .height (100) "));

sigi
fonte
1

Recebi este erro quando fiz uma solicitação com picture.type(full_picture):

"(# 100) Para o campo 'imagem': o tipo deve ser um dos seguintes valores: pequeno, normal, álbum, grande, quadrado"

Quando faço a solicitação com picture.type(album)e picture.type(square), me responde com uma imagem de tamanho 50x50 pixel.

Quando faço a solicitação com picture.type(large), me responde com um tamanho de imagem de 200x200 pixels.

Quando eu faço a solicitação com picture.width(800), me responde com um tamanho de pixel 477x477 de imagem.

com picture.width(250), respostas 320x320.

com picture.width(50), respostas 50x50.

com picture.width(100), respostas 100x100.

com picture.width(150), respostas 160x160.

Eu acho que o Facebook dá as imagens que são redimensionadas de maneiras diferentes quando o usuário adiciona essa foto pela primeira vez.

O que vejo aqui a API para solicitação de imagem do usuário não suporta o redimensionamento da imagem solicitada. Isso dá o tamanho de imagem mais próximo, eu acho.

Ebleme
fonte
Verdadeiro ... "picture.type (large)" também me deu um 200x200 - não muito grande, devo dizer
James
0

Acho que, a partir de agora, a única maneira de obter fotos grandes de amigos é usando FQL. Primeiro, você precisa buscar uma lista de amigos:

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

Em seguida, analise essa lista e extraia todos os amigos ids. Quando você tiver isso, basta executar a seguinte consulta FQL:

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

200aqui é apenas um tamanho exemplar, você pode inserir qualquer coisa. Você deve obter a seguinte resposta:

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

Com cada url sendo o link para uma imagem de 200x200px.

Paweł Gościcki
fonte
0

Variante com estilo JS. Basta definir a largura da imagem grande e enorme e você terá a maior variante.

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

Você pode usar full_picture em vez da chave de imagem para obter a imagem em tamanho real.

Khalil ur Rehman
fonte