我需要的
我需要为只知道他的电子邮件地址的用户自动查找和下载个人资料图片。最初,考虑到积极使用它的人数,我专注于 Facebook。但是,他们的 API 似乎不再提供直接支持。
这里有类似的问题: How to get a facebook user id from the login email address这已经过时了,目前的答案是“它已被弃用”/“不可能”......编辑:我发现了更好的问题:通过已知的电子邮件地址查找 Facebook 用户(个人资料页面的 URL)(实际上解释了为什么以及何时不支持此功能)
一定有办法...
是什么让我认为这应该是可能的,因为Spokeo正在以某种方式做到这一点: http ://www.spokeo.com/email-search/search?e=beb090303%40hotmail.com
有一些服务/API 提供这种功能:
Clearbit Pipl
...
但我没有找到任何免费的东西。
备择方案
如果有一些解决方法或不同的方法而不是使用 Facebook 的 API 来实现这一点,我想知道。如果 Facebook 在这里真的完全没有希望,那么结合这些:Google+、Linkedin和/或Gravatar就可以了。
我的第一次(原始)尝试:
一旦你有了 Facebook 的用户名或用户 ID,就很容易建立 URL 来下载图片。因此,我尝试使用带有/search
Graph API 的电子邮件来查找 Facebook 的用户 ID:
https://graph.facebook.com/search?q=beb090303@hotmail.com&type=user&access_token=TOKEN
不幸的是,它总是以“请求此资源需要用户访问令牌”结尾。
使用 FB PHP API + FB App ID & Secret我也试过这个:起初我access_token
使用应用程序 ID 和秘密检索,然后我尝试将它用作/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('beb090303@hotmail.com', $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/
让它为我生成访问令牌并查询:
search?q=beb090303@hotmail.com&type=user&debug=all
那个以:
{
"error": {
"message": "(#200) Must have a valid access_token to access this endpoint",
"type": "OAuthException",
"code": 200
}
}
...所以 Facebook 在这里似乎有点绝望。