【问题标题】:Get Facebook user's profile picture prior to authenticating app在验证应用程序之前获取 Facebook 用户的个人资料图片
【发布时间】:2012-01-21 14:54:06
【问题描述】:

总结:

我正在开发一个通过 Graph API 连接到 Facebook 的网站。有人问我,如果用户已经登录 Facebook,但在用户验证应用程序之前,我是否可以获得用户的个人资料图片。这可能吗?

编辑: 我知道您可以通过转到http://graph.facebook.com/USERNAME_OR_USERID/picture?type=large 来获取人们的头像,但是如果用户登录 Facebook,但没有授权我的应用程序,我是否能够获取用户的用户名或 ID?


详情:

根据Facebook API User documentation,你可以在没有access_token的情况下获得他们的Facebook ID,而且我知道如果你直接去一个用户的/me URL你可以看到他们的基本信息。使用 Facebook ID,我可以获取他们的个人资料照片。

但是,当我尝试使用以下代码从网站调用它时,我收到 OAuthException 错误。

FB.api('/me', function(response) {
    console.log(response);
});

我猜他们必须对应用进行身份验证,但我想看看我是否错过了获取他们的个人资料照片的方法。

感谢您的帮助!

【问题讨论】:

标签: facebook facebook-graph-api facebook-javascript-sdk


【解决方案1】:

无需身份验证即可获取每个人的 Facebook 头像。

您只需拨打http://graph.facebook.com/USERID/picture?type=large。 此 URL 会将您重定向到图像 URL。

编辑:不再允许通过用户名查询,所以我将USERNAME_OR_USERID 更新为USERID

【讨论】:

  • 谢谢,cebrici。我知道这个 URL,但是如果没有他们的身份验证,我将如何获取他们的用户名或 ID?
  • 我发现如果不进行身份验证,您将无法获取他们的用户名或 ID。你的答案写得更好,所以我会给你答案。
  • 我使用的是 url,但它重定向到带有“问号”的空白图像的页面。你能帮帮我吗?
【解决方案2】:

是的,你可以得到..

http://graph.facebook.com/naseer.panhwer/picture?type=normal
http://graph.facebook.com/naseer.panhwer/picture?type=small
http://graph.facebook.com/naseer.panhwer/picture?type=large

【讨论】:

  • 谢谢,纳西尔。我知道这个 URL,但如果没有他们的身份验证,我将如何获取他们的用户名或 ID?
【解决方案3】:

您可以使用应用程序 ID 和密码生成访问令牌,如下所示:

https://graph.facebook.com/oauth/access_token?client_id={appID}&client_secret={appSecret}&grant_type=client_credentials

注意:请勿在客户端执行此操作,因为您的应用程序可能会被劫持。

生成的令牌可以是用户使用图形 API 查询用户而无需登录提示。

【讨论】:

    【解决方案4】:

    如何在没有 oauth 或访问令牌的情况下获取 FB 图片:

    我试图只获取少数成员的图像,但我被卡住了,然后写了这个 sn-p 并为我工作,

    HTML 标记

    <img src="getFbImage.php?id=<fbid_of_the_person>&type=[small|large]" />
    

    PHP 代码

    <?php
    
        $remoteImage = !isset($_GET['id']) ? "../images/default.png" : getImg($_GET['id']);
        $imginfo = getimagesize($remoteImage);
        header("Content-type: ".$imginfo['mime']);
        readfile($remoteImage);
    
        function getImg($id){
            $dom = new DOMDocument;
            $dom->loadHTML(getData($id));
            $tags = $dom->getElementsByTagName('img');
            $img = '';
            foreach ($tags as $tag) {
                $img =$tag->getAttribute('src');
                if($img=='')
                    continue;
                else if(isset($_GET['type']) && $_GET['type']=='large')
                    break;
            } 
            //This iteration has a lot of images try your luck.
            return $img;
        }
    
        function getData($id){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL,'https://www.facebook.com/photo.php?fbid='.$id);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 Firefox/39.0');
            $data = curl_exec($ch);
            curl_close($ch);
            return $data;
        }
    ?>
    

    我只需要使用 30x30 的图像就可以得到我想要的。查看它还为您提供了一张大图。

    干杯! 欢乐

    【讨论】:

      猜你喜欢
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多