我正在建立一个允许用户使用他们的Facebook帐户登录的网站。
我想缓存好用户个人资料图片的大版本。我知道我不允许将图像缓存超过24小时,因此我将每24小时重新获取一次图像。
我以为我可以像这样得到原始图像的网址:
$fb=new Facebook($key,$secret);
$query = "SELECT src_big FROM photo WHERE pid IN (SELECT cover_pid FROM album WHERE owner = ".$id." AND name = 'Profile Pictures')";
$imgurl = $fb->api_client->fql_query($query);
http://wiki.developers.facebook.com/index.php/Photo_(FQL)
但我得到一个例外,说“需要用户会话”。为什么我需要用户会话?这有解决方法吗?其他网站如何解决这个问题?
如果我有一个用户会话,它适用于某些用户,但不适用于所有用户。为什么不呢?
答案 0 :(得分:1)
当它偶尔起作用时:某些用户可能设置了隐私设置以禁止应用程序访问其个人资料图片。
可能有些用户可能没有上传个人资料照片。
修改:从(新)fb菜单转到:Account
> Privacy Settings
> Applications and Websites
> What you Share
(此页面介绍了用户的隐私设置选项如何影响fb增强型网站)
简而言之,外部网站只能访问fb用户为“所有人”提供的内容。
答案 1 :(得分:1)
有关照片辅助功能的规则详见Photos.get
API method。
隐私权注意:照片可见 Facebook平台只有在 照片所有者已授权通话 应用程序,或照片所有者 没有关闭对平台的访问权。
Photos.get方法实际上是查询Photo FQL table的包装器,所以它遵循相同的规则。
考虑向用户询问offline_access
extended permission,以便即使他们不在线也可以查询自己的照片。您需要将会话密钥存储在数据库中并使用该密钥进行查询,但这意味着您可以随时下载已授权您的应用程序的用户的照片。