在应用程序验证之前获取Facebook用户的个人资料图片

7

概述:

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

编辑: 我知道可以通过访问http://graph.facebook.com/USERNAME_OR_USERID/picture?type=large来获取用户的个人资料图片,但如果他们已经登录Facebook,却没有授权我的应用,我能否获取用户的用户名或ID呢?


详细信息:

根据Facebook API用户文档,您可以在没有access_token的情况下获取他们的Facebook ID,并且我知道如果直接访问用户的/me URL,您可以查看他们的基本信息。使用Facebook ID,我可以获取他们的个人资料图片。

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

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

我猜他们必须对应用程序进行身份验证,但我想知道是否有其他获取他们的个人资料图片的方法。谢谢你的帮助!

没关系,我找到答案了。你无法获取他们的用户名或ID:http://facebook.stackoverflow.com/questions/7520300/facebook-app-without-prompted-authentication - Paul Sham
4个回答

7

您可以在不需要身份验证的情况下获取所有人的Facebook个人资料图片。

您只需调用http://graph.facebook.com/USERID/picture?type=large。 这个URL会将您重定向到图像URL。

编辑:现在不再允许通过用户名查询,因此我将USERNAME_OR_USERID更新为USERID


谢谢,cebrici。我知道这个URL,但是如果没有他们的身份验证,我怎么能得到他们的用户名或ID呢? - Paul Sham
2
我发现如果没有进行身份验证,你无法获取他们的用户名或ID。你的回答写得更好,所以我会给你答案。 - Paul Sham
我正在使用这个URL,但它重定向到一个带有“问号”的空白图像页面。你能帮我吗? - It's a trap

2

yes you can get..

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

1
谢谢,Naseer。我知道这个URL,但是如果没有他们的身份验证,我怎么能获取他们的用户名或ID呢? - Paul Sham

0
您可以使用应用程序ID和密钥生成访问令牌,步骤如下:

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

注意:不要在客户端上执行此操作,否则您的应用程序可能会被劫持。

生成的令牌可用于使用Graph API查询用户而无需登录提示。


0

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

我试图只获取几个成员的图像,但我卡住了,然后写了这个片段,对我有用,

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的图像,就得到了我想要的结果。另外,它还提供了一个大图像供您查看。

祝好! Joy


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接