Как я могу получить изображение профиля Facebook из электронной почты?

Там есть плагин outlook под названием Xobni, который имеет действительно классную функцию, если у контакта есть адрес электронной почты, он отобразит это изображение профиля контакта и отобразит его. В их FAQ указано следующее:

Xobni отправляет зашифрованный адрес электронной почты в Facebook, чтобы получить профиль Facebook для человека, который в настоящее время просматривается на боковой панели Xobni. Ваш собственный профиль Facebook никогда не изменяется Xobni, и все настройки конфиденциальности Facebook строго соблюдаются при просмотре других профилей.

Я хотел бы дублировать эту функциональность. Однако я не могу понять, какой API-вызов они используют. Я предполагаю, когда они говорят "зашифрованный адрес электронной почты", что условия мирян для хэша электронной почты. После того, как имя пользователя получено, график api выглядит идеально для фактического получения изображения, но у меня проблемы с хешем электронной почты с идентификатором профиля.

Ответ 1

Вы можете запросить следующий URL-адрес, чтобы получить идентификатор пользователя (если он существует на Facebook):

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

Затем <img src="https://graph.facebook.com/USER_ID/picture"> дает вам изображение.

Дополнительная информация: статья на codinglogs.com

Ответ 2

Я ищу способ сделать это точно... Никаких попыток пока не удалось.

Кто-нибудь смог найти решение?Забастовкa >

Обновление: Я собрал этот фрагмент в PHP. Это был единственный способ, которым я смог достичь своей цели. Я не уверен, как Xobni это делает (я уверен, что они менее навязчивы в этом)

<?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 . '" />';

        }

    }

}


?

Ответ 3

Теперь больше невозможно искать информацию о пользователе с помощью электронного адреса через API-интерфейс Facebook Graph. Хотя он по-прежнему работает, если у вас есть идентификатор пользователя Facebook, но если вы не можете получить идентификатор Facebook с помощью API поиска, вы больше не сможете этого делать.

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

API вернет следующий ответ:

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

Ответ 4

Большое спасибо @McHerbie, вы дали мне ключ, чтобы НАКОНЕЦ заставить мой код работать. Ключом является функция urlencode() для кодирования электронной почты!!! спасибо, это мой рабочий код с помощью PHP Simple HTML Dom Parser:

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

Ответ 5

Я знаю, что этот пост немного устарел, но только сейчас его нашел - вы можете попробовать API FullContact Person (полное раскрытие - я предвзято, я работаю на них):

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

С одной стороны, он будет вытягивать связанные профили социальных сетей при запросе на основе электронной почты, чтобы вы могли найти и вытащить связанный профиль... но, с другой стороны, вы также можете сэкономить время и использовать его для прямого перемещения изображений профиля.

Схема ответа включает в себя:

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

Дополнительная информация: http://www.fullcontact.com/developer/docs/person/#lookup-by-email-3