如何从电子邮件中获取 Facebook 个人资料图片?
Posted
技术标签:
【中文标题】如何从电子邮件中获取 Facebook 个人资料图片?【英文标题】:How can I get Facebook Profile image from email? 【发布时间】:2010-05-17 18:51:42 【问题描述】:有一个名为 Xobni 的 Outlook 插件,它有一个非常酷的功能,如果联系人有电子邮件地址,它将获取该联系人的个人资料图片并显示它。他们的常见问题解答如下:
Xobni 向 Facebook 发送一个加密的电子邮件地址,以检索当前在 Xobni 侧边栏中查看的人的 Facebook 个人资料。 Xobni 绝不会更改您自己的 Facebook 个人资料,并且在查看其他个人资料时严格遵守所有 Facebook 隐私设置。
我想复制这个功能。但是,我无法弄清楚他们正在使用哪个 API 调用。我假设当他们说“加密的电子邮件地址”时,这是电子邮件哈希的外行术语。派生用户名后,graph api 看起来非常适合实际获取图像,但我在从电子邮件哈希到配置文件 ID 时遇到了麻烦。
【问题讨论】:
更多信息:我在我的机器上设置了一个嗅探器来监控出站呼叫,我发现它是一个未发布的、可能是非公开的方法,称为 facebook.users.getByEmail。我会玩这个,但我并不乐观。其他人对从电子邮件转到 uid 有什么想法吗? 如果您知道这一点,请告诉我 - 我得到的最接近的是,如果您已登录,您可以通过解析搜索页面获取配置文件 ID,您可以提供电子邮件地址。这需要您的脚本/程序在搜索页面请求中发送有效的登录 cookie,但是... 【参考方案1】:您可以查询以下 URL 以获取用户 ID(如果 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">
给你图片。
更多信息:article at codinglogs.com
【讨论】:
【参考方案2】:我正在寻找一种方法来做这件事……目前还没有任何尝试。
有人找到解决办法了吗?
更新:我已经用 php 编写了这个 sn-p。这只是我能够实现目标的唯一方法。我不确定 Xobni 是如何做到的(我确信他们对它的干扰较小)
<?php
/* Email to Search By */
$eml = 'user@domain.com';
/* 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" />';
?
【讨论】:
好的.. 结果这不会 100% 工作。$match 搜索 profile.php?id= 链接,而一些 facebook 用户设置了他们的自定义链接,即 facebook.com/MyAliasName。 (该死!我以为我有)努力找出在哪里可以找到这些信息。【参考方案3】:不再可以通过 Facebook Graph API 使用电子邮件地址搜索用户信息。如果您拥有 Facebook 用户 ID,它仍然可以工作,但如果您无法通过搜索 API 获取 Facebook ID,则无法再执行此操作。
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="your@email.com", $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】:我知道这篇文章有点老了,但现在才发现它——你可以试试 FullContact Person API(完全披露——我有偏见,我为他们工作):
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
【讨论】:
在发布更多促销答案之前,请阅读我发布给您的常见问题解答条目。以上是关于如何从电子邮件中获取 Facebook 个人资料图片?的主要内容,如果未能解决你的问题,请参考以下文章
Facebook Graph API,如何获取用户电子邮件?
获取 Facebook API 个人资料图片 ios Swift
如果我在 ios 中使用电话号码登录,如何从 Facebook 获取电子邮件 ID?