Что мне нужно
Мне нужно автоматически найти и загрузить изображение профиля для пользователя, зная его адрес электронной почты. Первоначально я сосредоточился на Facebook, учитывая количество людей, активно использующих его. Однако, похоже, нет никакой прямой поддержки от их API больше.
Здесь был аналогичный вопрос: Как получить идентификатор пользователя facebook с адреса электронной почты для входа в систему, который является довольно устаревшим, а текущие ответы есть "он устарел" / "это невозможно"... EDIT: Я нашел еще лучший вопрос: Найти пользователя Facebook (ссылка на страницу профиля) по известному адресу электронной почты (где это действительно объясняется, почему и с тех пор, когда эта функция не является 't поддерживается)
Должен быть способ...
Что заставляет меня думать, что это возможно, так это то, что Spokeo как-то это делает: http://www.spokeo.com/email-search/search?e=beb090303%40hotmail.com
Есть несколько сервисов /API, предлагающих такую функцию:
Clearbit
Pipl
... но я не нашел ничего свободного.
Альтернативы
Если для достижения этого существует какой-то подход или иной подход, чем использование Facebook API, я хотел бы знать. Если Facebook действительно совершенно безнадежен здесь, то можно было бы сделать комбинацию из них: Google +, Linkedin и/или Gravatar.
Моя первая (оригинальная) попытка:
После того, как у вас есть имя пользователя или идентификатор пользователя Facebook, вам легко создать URL-адрес для загрузки изображения. Поэтому я пытался найти идентификаторы пользователей Facebook, используя электронные письма с помощью /search
Graph API: https://graph.facebook.com/[email protected]&type=user&access_token=TOKEN
который, к сожалению, всегда заканчивается словами: "Для запроса этого ресурса требуется токен доступа пользователя".
Использование FB PHP API + FB App ID и секретныйЯ также пробовал это: сначала я извлекаю access_token
, используя идентификатор приложения и секрет, а затем я пытаюсь использовать его как часть запроса /search
с 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>';
выводит что-то вроде:
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}}
Дополнительная информация
Поскольку он запрашивает "токен доступа пользователя", я также попытался перейти в Facebook Graph Explorer: https://developers.facebook.com/tools/explorer/
пусть он генерирует токен доступа для меня и запрашивает:
[email protected]&type=user&debug=all
На этом заканчивается:
{
"error": {
"message": "(#200) Must have a valid access_token to access this endpoint",
"type": "OAuthException",
"code": 200
}
}
... так что Facebook кажется любопытным здесь безнадежным.