我可以使用Facebook图形API获取用户好友的个人资料图片吗?

10
我刚开始接触Facebook开发,在测试了Adobe API后,我决定使用Graph API与我的Flash游戏进行通信。在完成连接和获取用户数据等基本操作后,我想知道是否有可能获取我的用户好友的个人资料图片,以便将它们传递给Flash游戏内的UILoader并展示它们。
如果有人可以指向使用Facebook Graph API的基本操作示例,比如邀请朋友或发布到墙上等,那就太好了。
谢谢。
更新:
在使用Nathan的建议尝试获取我的好友信息后,已经成功了:
$friends= $facebook->api('/me/friends?token='.$session['access_token']);
var_dump($friends);

然后我尝试使用以下方法获取我朋友的图片:

foreach ($friends['data'] as $friend)
    {
        $picture= $facebook->api('/'.$friend['id'].'/photo');
    }

但它没有生效。有什么想法吗?

谢谢。


这在更新后的图形 API 中是否仍然可行? - aheigins
6个回答

64

最简单的方法还没有在这里发布:

https://graph.facebook.com/me/friends?access_token=[oauth_token]&fields=name,id,picture

1
这正是我一直在寻找的。不知道为什么要花这么长时间才找到它。谢谢。 - Russell Stewart
+1 但是我得到的图片尺寸很小。为此,我需要再次访问另一个服务“https://graph.facebook.com/zuck/picture?width=100&height=100”,你能否将两个查询合并成一个? - Mangesh
这个方法非常好用。只有一个问题。它给了我一个像这样的图片对象: "picture": { "data": { "url": "https://fbcdn-profile-a.akamaihd.net/....", "is_silhouette": false } }有没有办法直接获取url元素? - Language Lassi
3
通过进行嵌套调用和定义宽度(或高度),可以获得更大的图片:`https://graph.facebook.com/me/friends?access_token=[oauth_token]&fields=name,id,picture.width(400)`或者通过类型:`https://graph.facebook.com/me/friends?access_token=[oauth_token]&fields=name,id,picture.type(large)` - Elsint

13

我成功地得到了我的朋友,但是没有得到我的朋友的照片。我更新了问题,看看你能否找到问题所在。 - José Joel.
2
问题在于获取照片不是一个API调用。图形URL实际上只会将您重定向到URL。我对Flash不太了解,但是如果我想要使用用户的照片,例如,我会这样做:<img src="http://graph.facebook.com/user_id/photo" />因此,与其进行$facebook->$api调用,不如将您的照片绑定到URL。 - Nate Totten
你解决了吗?如果是,请考虑将我的答案标记为正确答案。 - Nate Totten
3
也许这是PHP和JavaScript之间的差别(我在Facebook API方面还是个初学者),但对我而言,它不是“photo”,而是“picture”:http://graph.facebook.com/USER_ID/picture/,它会重定向到另一个URL(例如http://static.ak.fbcdn.net/rsrc.php/v1/yo/r/UlIqmHJn-SK.gif)。 - Aleadam
这完全就是我所写的内容,只是他过滤了字段,减少了返回的数据量。然而,这个过滤器是不必要的,也不是问题的一部分。此外,他遗漏了最重要的部分,即检索实际图像。 - Nate Totten
实际上,这个方法只返回所有FB好友的姓名和ID。@darki699的方法允许您请求更多信息,前提是您的access_token允许这样做。 - silasjmatson

1

无法通过以下方式获取照片:/'.$friend['id'].'/photo

相反,您必须先循环浏览相册,使用:/'.$friend['id'].'/albums

然后对于每个相册ID,您应该使用:/'.$album['id'].'/photos

这样,您将获得该相册中图片的ID。然后使用图片ID,您可以获取照片:/'.$picture['id'].'/picture

希望这有所帮助。


1
我正在寻找相同的功能,但发现现在不再可能实现了(截至撰写本文的时间:2019年11月17日,api v5.0)。
如果您尝试调用/me/friends?fields=friends{name,id,profile_pic},您将收到一个空的朋友数组:
{
  "data": [
  ],
  "summary": {
    "total_count": 823
  }
}

图形浏览器显示此调试消息:仅在API v2.0及更高版本中返回安装了此应用程序的好友。摘要中的total_count表示总好友数,包括尚未安装该应用程序的好友。


0
foreach ($friends['data'] as $friend)
    {
        $picture= $facebook->api('/'.$friend['id'].'/photo?token='.$session['access_token']);
    }

0

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