Obtendo uma imagem de perfil do Facebook a partir do usuário (via Graph) – detectar se é uma imagem em branco (ou seja, padrão)?

Estou tentando buscar as fotos de perfil das pessoas que comentam na página do Facebook de um cliente, para que elas possam ser exibidas no site, etc.

Estou obtendo as IDs de usuário através da chamada /[page_name]/feed/ graph e eu estou colocando isso em um formulário de URL assim:

 $id = $item['from']['id']; $link = "http://graph.facebook.com/{$id}/picture?type=large"; 

Está funcionando bem – Estou recebendo uma série de fotos de perfil de volta, no entanto, algumas são as seguintes: http://img.bestphpide.com/php/yDnr5YfbJCH.gif

Quero mostrar apenas fotos de perfil reais – existe uma maneira de detectar isso?

Isso é possível, mas precisará de comparação de arquivos. O Facebook usa 2 imagens como avatares padrão, 1 para machos, outra para fêmeas. Então, você terá que comparar a imagem que você obtém com uma dessas.

Uma comparação simples seria compará-los depois de converter seus bytes em strings. Exemplo mais simples:

  

Essa seria uma operação lenta, então você pode colocá-lo como um trabalho cron para verificar as imagens no backend. Você pode otimizar um pouco armazenando o md5 do avatar padrão no db, então apenas 1 URL precisa ser buscado para comparação.

Isso pode ser feito CHANGE PROOF, use um gráfico api url, que certamente retornará o avatar padrão, então você não precisa se preocupar com a mudança na imagem padrão do avatar, você só precisa comparar 2 URLs api de gráfico. por exemplo. compare: a) http://graph.facebook.com/MY_TEST_ID/picture?type=large (isso sempre retorna o avatar padrão) b) http://graph.facebook.com/MY_NEW_USER_ID/picture?type=large (o usuário Eu quero testar)

A API de gráfico inclui uma bandeira que permite que você detecte se o avatar do avatar de um usuário é ou não o padrão …

Você pode realizar isso anexando &redirect=false até o final do seu URL de imagem de gráfico.

Por exemplo:

Uma URL de imagem normal, como

 http://graph.facebook.com/[USERNAME]/picture?type=large 

redirectá para um arquivo de imagem real, dando a impressão de retornar uma imagem real. Mas um url como

 http://graph.facebook.com/[USERNAME]/picture?type=large&redirect=false 

retornará JSON – algo como:

 {"data": { "url": "http://img.bestphpide.com/php/623549_1210877749_349605729_n.jpg", "is_silhouette": false }} 

(fonte: http://developers.facebook.com/docs/reference/api/using-pictures/ )

UPDATE: O URI mudou: type=large já não funciona, você deve especificar a largura / altura explícita assim:

 http://graph.facebook.com/[USERNAME]/picture?width=200&height=600 

Observe o atributo "is_silhouette" – será true ou false . Se é true , a imagem do Facebook do usuário é uma imagem padrão .

Fazer este julgamento numa base “inline” exigirá o CURL, e você pode integrá-lo com seu código, algo assim:

 // Setup $id = $item['from']['id']; $link = "http://graph.facebook.com/{$id}/picture?type=large"; // Get avatar info from FB via cURL $url = $link. "&redirect=false"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $avatarInfo = curl_exec($ch); curl_close($ch); // Process cURL response $isDefaultAvatar = false; if ($avatarInfo) { $avatarInfo = json_decode($avatarInfo); if (isset($avatarInfo->data->is_silhouette) && $avatarInfo->data->is_silhouette) $isDefaultAvatar = true; } // Output echo "This " .($isDefaultAvatar ? "IS" : "IS NOT"). " a default avatar."; 

Hash a imagem padrão, armazene o hash para o padrão masculino / feminino, compare?

Se você já está fazendo uma chamada para a API de Gráficos para obter dados de usuário como o avatar, não faça uma chamada de API adicional para /picture como sugerido acima.

Basta include a picture nos campos param quando você faz sua primeira chamada para Graph API, então a resposta includeá o deslocamento is_silhouette , se for definido como verdadeiro, o usuário tem o avatar padrão.

Pedido:

 https://graph.facebook.com/v2.7/me?access_token=[token]&fields=name,picture 

Resposta:

 { "id": "100103095474350", "name": "John Smith", "picture": { "data": { "is_silhouette": true, "url": "https://scontent.xx.fbcdn.net/v/...jpg" } } }