从图API获取"真正的"Facebook个人资料图片URL

eri*_*bae 75 profile facebook image

Facebook图形API告诉我,我可以获得用户使用的个人资料图片

http://graph.facebook.com/517267866/picture?type=large

哪个工作正常.但是,当您在浏览器中键入上述URL时,图像的实际地址为

http://profile.ak.fbcdn.net/profile-ak-snc1/v227/560/83/n517267866_1928.jpg

如何以编程方式使用第一个URL获取第二个URL?

jos*_*736 73

第一个URL为第二个URL提供HTTP 302(临时重定向).因此,要以编程方式查找第二个URL,您可以为第一个URL发出HTTP请求并获取Location响应的标头.

也就是说,不要依赖第二个URL是永久性的.稍微阅读HTTP响应代码(302而不是永久301),Facebook可能会定期更改这些URL,以防止人们 - 例如 - 使用他们的服务器来托管图像.


编辑:请注意,OP发布的CDN URL现在是404,因此我们知道我们不能依赖URL是长期存在的.此外,如果您从<img>受SSL保护的页面链接到Graph API ,必须添加一个参数确保使用.https://graph.facebook.com


更新: API 添加了一个参数 - redirect=false- 导致返回JSON而不是重定向.重新构建的JSON包含CDN URL:

{
   "data": {
      "url": "http://profile.ak.fbcdn.net/...",
      "is_silhouette": false
   }
}
Run Code Online (Sandbox Code Playgroud)

同样,我不会依赖这个CDN URL是长寿的.JSON响应通过允许的CORS头发送,因此您可以使用XHR请求自由地执行此客户端.

  • 说得通.这是我的预期.谢谢你的回复! (2认同)
  • 如果您正在制作游戏排行榜并且只想公开用户个人资料图片而不是用户 ID,那么从服务器发送 cdn url 是否有意义?我并不是说依靠 CDN,而是只是调用服务器端来向客户端隐藏 fbID 详细信息。 (2认同)

小智 36

http://graph.facebook.com/517267866/?fields=picture&type=large

将以JSON格式返回URL

  • 如果你真的想以这种方式获取它,请使用https://graph.facebook.com/517267866/?fields=picture.type(large) (23认同)
  • 同上 - 这将返回小图像 (7认同)
  • 返回小图片网址. (2认同)

joa*_*nna 16

我意识到这已经很晚了,但还有另一种方法来获取配置文件图像的URL.

对于原始网址,您可以添加参数redirect=false以获取通常重定向到的图像的实际网址.

因此,新请求看起来像http://graph.facebook.com/517267866/picture?type=large&redirect=false.这将返回一个JSON对象,其中包含图片的URL和一个布尔值is_silhouette(如果图片是默认的Facebook图片,则为true).

图片的大小也是您指定的大小.您可以通过添加尺寸来额外测试:http://graph.facebook.com/517267866/picture?type = alar&redirect = false&width = 400&high = 400


Fat*_*lsa 7

对于其他想要在iOS中获取个人资料照片的人:

我这样做是为了得到用户的Facebook照片:

NSString *profilePicURL = [NSString stringWithFormat:@"http://graph.facebook.com/%@/picture?type=large", fbUserID];
Run Code Online (Sandbox Code Playgroud)

其中'fbUserID'是Facebook用户的个人资料ID.

这样我就可以随时调用profilePicURL中的url来获取图像,我总是得到它,没问题.如果您已经拥有用户ID,则不需要任何API请求,只需在facebook.com/之后将ID粘贴到URL中即可.

对于在iOS中需要fbUserID的人来说,仅供参考:

if (FBSession.activeSession.isOpen) {
    [[FBRequest requestForMe] startWithCompletionHandler:
     ^(FBRequestConnection *connection,
       NSDictionary<FBGraphUser> *user,
       NSError *error) {
         if (!error) {
             self.userName = user.name;
             self.fbUserID = user.id;
         }
     }];
}
Run Code Online (Sandbox Code Playgroud)

你需要一个活跃的FBSession才能工作(参见Facebook的文档,以及"美味"的例子).


Kas*_*sas 6

如果你想要一个高质量的个人资料图片的JSON与URL,你可以使用:

http://graph.facebook.com/517267866/picture?height=1024&redirect=false

如果你只是需要图片使用它没有参数重定向:

http://graph.facebook.com/517267866/picture?height=1024

517267866是上述示例之一的配置文件ID.把你需要的Facebook ID

我希望有所帮助