如何从电子邮件中获取 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 获取用户的个人资料图片。请看详情

Facebook Graph API,如何获取用户电子邮件?

获取 Facebook API 个人资料图片 ios Swift

如果我在 ios 中使用电话号码登录,如何从 Facebook 获取电子邮件 ID?

我如何从 facebook 公开资料 Facebook IOS Swift SDK 中获取性别

如何从 facebook 获取其他人或页面视频缩略图?