如何使用facebook graph api显示用户个人资料图片?


70

我想在我的应用程序画布页面中显示用户个人资料图片,有没有办法使用图形API来做到这一点?

我知道我可以使用FBML做到这一点,但我也想将个人资料图片传递给我正在制作的Flash游戏,因此我必须从api获取个人资料图片并将其作为变量发送,这是我的代码到目前为止,

$facebook = new Facebook(array(
    'appId'  => FACEBOOK_APP_ID,
    'secret' => FACEBOOK_SECRET_KEY,
    'cookie' => true,
    'domain' => 'myurl/facebook-test'
));

$session = $facebook->getSession();

        $uid = $facebook->getUser();
        $me = $facebook->api('/me');

        $updated = date("l, F j, Y", strtotime($me['updated_time']));

        echo "Hello " . $me['name'] . $me['picture'] . "<br />";
  echo "<div style=\"background:url(images/bg.jpg); width:760px; height:630px;\">" . "You last updated your profile on " . $updated . "</div>" . "<br /> your uid is" . $uid;

$me['picture'] 似乎没有用,但是我对图api还是很陌生,我可能犯了一些非常业余的错误!

Answers:


125

知道用户ID的个人资料图片的网址是:-

http://graph.facebook.com/[UID]/picture

在[UID]的位置放置$ uid变量,然后可以将该URL传递给Flash


2
现在,它似乎返回了重定向(302)响应,但是如果您遵循该响应,您将获得正确的图像。您也可以对URL进行?redirect = false来获取JSON响应,其中包含图片的最终URL。
Gnomet 2014年

你好,有人有主意吗?为什么从android设备调用时响应变为空?我仅在我的应用程序中使用了此方法,但现在没有使用该方法生成图像。
BSKANIA 2014年

仍然有效!如果使用,请确保使用https而不是。httpPicasso
xyz

已过时。目前需要OAuth。
松仓由纪(Yuki Matsukura)2015年

有什么办法可以找到大尺寸的头像吗?

81

要获得不同的大小,可以使用type参数:

您可以使用type参数指定所需的图片大小,该参数应为正方形(50x50),小(宽50像素,可变高度)和大(宽约200像素,可变高度)之一:http:// graph .facebook.com / squall3d / picture?type = large


谢谢!我似乎在任何地方都找不到,但是我知道这是可能的!
Doug Molineux

2
更好的是宽度/高度参数也可以工作,例如:width = 140&height = 140
Deepak Thomas

22

您还可以通过提供如下所示的参数来调整个人资料图片的大小。

https://graph.facebook.com/[UID]/picture?width=140&height=140

也会工作。


FB文档 developers.facebook.com/docs/graph-api/reference/v2.1/user/…When height and width are both used, the image will be scaled as close to the dimensions as possible and then cropped down.,这是否意味着当我要求150x150时,它们将返回一些预定义的尺寸123x123?
Dimitry K 2014年

1
实际找到的答案是我自己:当询问/picture?width=450x450我时,我被重定向到图片:https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xap1/v/t1.0-1/c120.0.480.480/p480x480/10525666_10154418313275648_598202092662269872_n.jpg?somequerystring这是一张480x480图片。当我要求时,/picture?width=300&height=300我被重定向到https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xap1/v/t1.0-1/c80.0.320.320/p320x320/10525666_10154418313275648_598202092662269872_n.jpg哪个是320x320图像。因此,您对预定义的大小是正确的。
Dimitry K 2014年


4

编辑:所以facebook又改变了它!不再按用户名搜索-已修改以下答案...

https://graph.facebook.com/{{UID}}/picture?redirect=false&height=200&width=200
  • UID =个人资料或页面ID
  • 重定向返回json(false)或重定向到图像(true)
  • 高和宽是农作物
  • 不需要身份验证

例如https://graph.facebook.com/4/picture?redirect=false&height=200&width=200

Facebook Graph图片文档


1
这不再有效(#803)无法通过用户名查询用户(zuck)
Roni

1
@Roni但是您仍然可以通过UID查询。它适用于我的UID。
RredCat 2015年

1
@RredCat我没有说关于UID的任何事情,只是用户名-UID查询可能会工作很长时间
Roni 2015年

http://graph.facebook.com/[UID]/picture作品!我可以发出此API调用的次数是否有上限?
Darshan Chaudhary

3

这是对我有用的代码!

假设您正在进行有效的会话,

//Get the current users id
$uid = $facebook->getUser();

//create the url
$profile_pic =  "http://graph.facebook.com/".$uid."/picture";

//echo the image out
echo "<img src=\"" . $profile_pic . "\" />";

Thanx去了Raine,你这个家伙!


1

我在使用CURL时提取个人资料照片时遇到问题。我以为有一段时间我的Facebook API实现有问题,但是我需要在CURL中添加一些名称:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

1

一个非常重要的事情是,像其他Graph API请求一样,您不会获得响应的JSON数据,而是该调用将HTTP REDIRECT返回到个人资料图片的URL。因此,如果要获取URL,则需要读取响应HTTP标头,也可以使用FQL。


-1

返回的数据是图像类型的二进制数据。如果使用JavaScript检索用户照片,请在XMLHttpRequest中以blob类型获取照片数据,然后从响应中检索blob URL。供你参考:

 var request = new XMLHttpRequest;
 var photoUri=config.endpoints.graphApiUri + "/v1.0/me/photo/$value";
 request.open("GET",photoUri);
 request.setRequestHeader("Authorization","Bearer "+token);
 request.responseType = "blob";
 request.onload = function (){
        if(request.readyState == 4 && request.status == 200){
               var image = document.createElement("img");
               var url = window.URL || window.webkitURL;
               var blobUrl = url.createObjectURL(request.response);
               image.src = blobUrl;
               document.getElementById("UserShow").appendChild(image);
        }
 };
 request.send(null); 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.