studio picture php facebook download profile-picture

php - picture - Recuperando imagen de perfil de Facebook/Google+/Linkedin con solo dirección de correo electrónico



get profile picture facebook api (5)

Creo que Spokeo podría tener un acuerdo con Facebook para acceder a los datos. No me sorprendería.

De todos modos, si está en un perfil, puede buscar profile_id en el HTML. Es un truco, no estoy seguro de si funciona.

Lo que necesito

Necesito encontrar y descargar automáticamente la imagen de perfil para que el usuario conozca solo su dirección de correo electrónico. Originalmente, me centré en Facebook teniendo en cuenta la cantidad de gente que lo usa activamente. Sin embargo, parece que ya no hay soporte directo de su API.

Hubo una pregunta similar aquí: cómo obtener un ID de usuario de Facebook de la dirección de correo electrónico de acceso que está bastante desactualizada y las respuestas actuales son "está obsoleto" / "no es posible" ... EDITAR: he encontrado una pregunta aún mejor: Buscar usuario de Facebook (url en la página de perfil) por dirección de correo electrónico conocida (donde realmente se explica por qué y desde cuando esta característica no es compatible)

Debe haber una forma...

Lo que me hace pensar que esto debería ser posible es que Spokeo lo está haciendo de alguna manera: http://www.spokeo.com/email-search/search?e=beb090303%40hotmail.com

Hay algunos servicios / API que ofrecen este tipo de característica:
Clearbit
Pipl
... pero no he encontrado nada gratis.

Alternativas

Si hay alguna solución alternativa o enfoque diferente al uso de la API de Facebook para lograr esto, me gustaría saber. Si Facebook no tiene ninguna esperanza aquí, la combinación de estos: Google+ , Linkedin y / o Gravatar podría hacer.

Mi primer intento (original):

Una vez que tienes el nombre de usuario o ID de usuario de Facebook, es fácil construir una URL para descargar la imagen. Así que estaba tratando de buscar los ID de usuario de Facebook usando correos electrónicos con /search API Graph de /search :
https://graph.facebook.com/[email protected]&type=user&access_token=TOKEN

que desafortunadamente siempre termina con "Se requiere un token de acceso de usuario para solicitar este recurso".

Uso de FB PHP API + FB App ID & Secret

También he intentado esto: al principio recupero access_token usando la ID de la aplicación y el secreto, y luego intento usarlo como parte de la solicitud /search con curl :

function post_query_url($url, $data) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $res = curl_exec($ch); curl_close($ch); return $res; } function get_query_url($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $ret = curl_exec($ch); curl_close($ch); return $ret; } function get_retrieve_app_access_token($app_id, $secret) { $url = ''https://graph.facebook.com/oauth/access_token?client_id=''.$app_id.''&client_secret=''.$secret.''&grant_type=client_credentials''; $res = get_query_url($url); if (!empty($res)) { $tokens = explode(''='', $res); if (count($tokens) == 2) return $tokens[1]; } return null; } function post_retrieve_app_access_token($app_id, $secret) { $url = ''https://graph.facebook.com/oauth/access_token''; $data = ''client_id=''.$app_id.''&client_secret=''.$secret.''&grant_type=client_credentials''; $res = post_query_url($url, $data); if (!empty($res)) { $tokens = explode(''='', $res); if (count($tokens) == 2) return $tokens[1]; } return null; } function get_id_from_email($email, $accessToken) { $url = ''https://graph.facebook.com/search?q=''.urlencode($email).''&type=user&access_token=''.$accessToken; $res = get_query_url($url); if (!empty($res)) { return $res; } return null; } echo ''Retrieving token...<br>''; $token = post_retrieve_app_access_token(''MY_APP_ID'', ''SECRET''); echo ''Retrieved token: '' . $token . ''<br>''; echo ''Retrieving user ID...<br>''; $id = get_id_from_email(''[email protected]'', $token); echo ''Retrieved ID: '' . $id . ''<br>'';

produce algo como:

Retrieving token... Retrieved token: 367458621954635|DHfdjCnvO243Hbe1AFE3fhyhrtg Retrieving user ID... Retrieved ID: {"error":{"message":"A user access token is required to request this resource.","type":"OAuthException","code":102}}

Otra información

Ya que está pidiendo un "token de acceso de usuario", también he intentado acceder al Explorador de gráficos de Facebook: https://developers.facebook.com/tools/explorer/ dejar que genere el token de acceso y consultarlo: [email protected]&type=user&debug=all Ese finaliza con:

{ "error": { "message": "(#200) Must have a valid access_token to access this endpoint", "type": "OAuthException", "code": 200 } }

... así que Facebook parece un poco desesperado aquí.


Debería necesitar un token de acceso y una identificación de Facebook del usuario. sin conocerlos no pueden obtener su foto de perfil


Es exactamente por eso que Gravatar existe y por qué las personas usan Gravatar, los usuarios saben qué imagen de perfil público vinculan a qué dirección de correo electrónico y saben dónde cambiarla.

Su aplicación puede tener la posibilidad de que los usuarios carguen su propia imagen de perfil y se reincorporen a Gravatar.

Si solo intenta extraer una imagen de Facebook o Google+, podría asustar a los usuarios y también les resultará más difícil saber de dónde proviene su servicio.

Usar Gravatar en PHP es tan simple como esto:

<?php $email = "[email protected]"; $default = ""; // absolute url to default image goes here or leave empty for default gravatar image $size = 200; $grav_url = "http://www.gravatar.com/avatar/" . md5(strtolower(trim($email))) . "?d=" . urlencode($default) . "&s=" . $size; header("content-type: image/jpeg"); echo file_get_contents($grav_url); ?>

Además de eso, también puedes utilizar Facebook y / o Google+ como proveedores externos de inicio de sesión donde los usuarios pueden otorgarle a tu aplicación acceso a su información de perfil.


Hubo un error: no se puede buscar al usuario por correo electrónico después de julio de 2013. Rompiendo cambios que se ha cerrado como "Por diseño" con respuesta oficial:

"La capacidad de ingresar una dirección de correo electrónico en el tipo de búsqueda" usuario "se eliminó el 10 de julio de 2013. Este tipo de búsqueda solo arroja resultados que coinciden con el nombre de un usuario (incluido el nombre alternativo)" ~ Joseph Tuấn Anh Phan (Facebook Equipo)

entonces probablemente no haya soporte directo de Graph API.

He intentado Graph API Explorer donde también puedes probar jugar con FQL (solo necesitas seleccionar la versión 2.0 ya que las versiones más nuevas ya no son compatibles), desafortunadamente consultas como:

SELECT uid, name FROM user where email = ''[email protected]''

da:

"error": { "message": "(#604) Your statement is not indexable. The WHERE clause must contain an indexable column. Such columns are marked with * in the tables linked from http://developers.facebook.com/docs/reference/fql ", "type": "OAuthException", "code": 604 }

y la referencia para el usuario de tabla muestra que solo uid y third_party_id se pueden usar en WHERE .


Siempre puedes permitir que la gente comente iniciando sesión con su cuenta g + / facebook / lo que sea (aunque es necesario que hagas algo similar a OpenID); si han iniciado sesión, debería poder obtener el uid de Facebook.

Además, hay algo llamado libravatar , que permite a las personas asociar imágenes con su OpenID o dirección de correo electrónico (y que vuelve a gravatar si no han configurado nada específicamente para libravatar); usar eso debería darte más fotos que si te apegas a "solo" gravatar.