2010-05-17 19 views
11

Hay un plugin de outlook llamado Xobni que tiene una característica realmente genial, si un contacto tiene una dirección de correo electrónico, buscará la foto de perfil de ese contacto y la mostrará. Sus preguntas frecuentes indican lo siguiente:¿Cómo puedo obtener la imagen del perfil de Facebook del correo electrónico?

Xobni envía una dirección de correo electrónico encriptada a Facebook para recuperar el perfil de Facebook de la persona que se está viendo actualmente en la barra lateral de Xobni. Tu propio perfil de Facebook nunca se ve alterado por Xobni, y todas las configuraciones de privacidad de Facebook se siguen estrictamente cuando se visualizan otros perfiles.

Me gustaría duplicar esta funcionalidad. Sin embargo, no puedo entender qué llamada API están usando. Estoy asumiendo cuando dicen "dirección de correo electrónico cifrada", que son los términos comunes para el hash de correo electrónico. Una vez que se deriva un nombre de usuario, la API gráfica parece ideal para obtener realmente la imagen, pero estoy teniendo problemas para pasar del hash de correo electrónico al ID de perfil.

+0

Más información: He definido un sniffer en mi máquina para controlar las llamadas salientes, y descubrí que es un inédito, probablemente no método público llamado facebook.users.getByEmail. estaré jugando un poco con esto, pero no soy muy optimista. ¿Alguien más tiene alguna idea sobre cómo ir del correo electrónico a uid? – Forbini

+0

Si alguna vez resolver esto, hágamelo saber - lo más cerca que he recibido es decir, si está conectado Usted puede obtener el ID de perfil mediante el análisis de la página de búsqueda, lo que puede dar una dirección de correo electrónico. Esto requiere el script/programa para enviar válido registrado en las cookies con la solicitud de búsqueda de la página, aunque ... – Mala

Respuesta

3

Estoy buscando una manera de hacer esto exacto ... No han funcionado todavía.

¿Alguien ha sido capaz de encontrar una solución?

Actualización: He creado este fragmento en PHP. Es casi la única forma en que he podido lograr mi objetivo. No estoy seguro de cómo lo está haciendo Xobni (estoy seguro de que son menos intrusivos sobre él)

<?php 

/* Email to Search By */ 
$eml = '[email protected]'; 

/* This is where we are going to search.. */ 
$url = 'http://www.facebook.com/search.php?q=' . urlencode($eml); 

/* Fetch using cURL */ 
$ch = curl_init(); 

/* Set cURL Options */ 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

/* Tell Facebook that we are using a valid browser */ 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'); 

/* Execute cURL, get Response */ 
$response = curl_exec($ch); 

/* Check HTTP Code */ 
$response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

/* Close cURL */ 
curl_close($ch); 

/* 200 Response! */ 
if ($response_code == 200) { 

    /* Parse HTML Response */ 
    $dom = new DOMDocument(); 
    @$dom->loadHTML($response); 

    /* What we are looking for */ 
    $match = 'http://www.facebook.com/profile.php?id='; 

    /* Facebook UIDs */ 
    $uids = array(); 

    /* Find all Anchors */ 
    $anchors = $dom->getElementsByTagName('a'); 
    foreach ($anchors as $anchor) { 
     $href = $anchor->getAttribute('href'); 
     if (stristr($href, $match) !== false) { 
      $uids[] = str_replace($match, '', $href); 
     } 
    } 

    /* Found Facebook Users */ 
    if (!empty($uids)) { 

     /* Return Unique UIDs */ 
     $uids = array_unique($uids); 

     /* Show Results */ 
     foreach ($uids as $uid) { 

      /* Profile Picture */ 
      echo '<img src="http://graph.facebook.com/' . $uid. '/picture" alt="' . $uid . '" />'; 

     } 

    } 

} 


? 
+0

Ok .. resulta que esto no funcionará 100% .La $ búsquedas partidos para el profile.php? Id = enlace mientras algunos usuarios de Facebook han configurado sus enlaces personalizados que son facebook.com/MyAliasName. (Maldita sea, pensé que lo tenía) Trabajando en averiguar dónde más se puede encontrar esta información. – McHerbie

+1

Actualización: http://zesty.ca/facebook/ – McHerbie

13

puede consultar la siguiente dirección URL para obtener identificador de usuario (si es que existe en Facebook):

https://graph.facebook.com/search?access_token=YOUR_ACCESS_TOKEN&q=EMAIL_ADDRESS_URL_ENCODED&type=user 

Luego <img src="https://graph.facebook.com/USER_ID/picture"> le da la imagen.

Más información: article at codinglogs.com

2

Muchas gracias @McHerbie, que me dio la pista para finalmente obtener mi código de trabajo. La clave es la función urlencode() para codificar el correo electrónico. gracias, esta es mi código de trabajo usando PHP simple HTML DOM Analizador:

public function getFacebookPictureByScrapping($email="[email protected]", $file="fbPicture.jpg") { 
      require_once('protected/extensions/simplehtmldom/simple_html_dom.php'); 
      $userEmail = urlencode($email); 

      ini_set('user_agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'); 

      $url = "http://www.facebook.com/search.php?q=$userEmail&type=all&init=srp"; 
      $html = new simple_html_dom(); 
      $html = file_get_html($url); 

      if (is_object($picture = $html->find(".uiList .img",0))) { 
       $image = file_get_contents($picture->src, false); 
       file_put_contents($file); 
       return $file; 
      } else { 
       return null; 
      } 
    } 
+0

por lo que sé, no es posible obtener imágenes de perfil más – aleksdj

1

Sé que este post es un poco viejo, pero sólo ahora encontré - puede probar la API FullContact persona (información completa - I' m sesgada, yo trabajo para ellos):

http://www.fullcontact.com/developer/

por un lado, se va a tirar de los perfiles en redes sociales asociados cuando consulta basada en el correo electrónico para que pueda encontrar y tirar del perfil asociado ... pero, por otro lado, también puede guardar algo de tiempo & usarlo para extraer las imágenes de perfil directamente.

El esquema de respuesta incluye:

"photos": 
    [ 
    { 
     "typeId": [photo type], 
     "typeName": [photo type name], 
     "url": [photo url], 
     "isPrimary": [boolean] 
    } 
    ] 

Más información: http://www.fullcontact.com/developer/docs/person/#lookup-by-email-3

+1

favor lea la FAQ que he publicado a usted antes de la publicación de las respuestas más promocionales. –

+0

Eres bienvenido :) –

3

Ya no es posible para buscar información de usuario con la dirección de correo electrónico a través de la API de Facebook Graph es. Aunque todavía funciona si tiene el ID de usuario de Facebook, pero si no puede obtener el ID de Facebook con la API de búsqueda, ya no podrá hacerlo.

https://developers.facebook.com/x/bugs/453298034751100/

La API devolverá la siguiente respuesta:

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