Facebook graph 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?
Facebook graph 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?
Answers:
第一个URL将HTTP 302(临时重定向)提供给第二个URL。因此,要以编程方式找到第二个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
}
}
同样,我不会依赖这个CDN URL长期存在。JSON响应与允许的CORS标头一起发送,因此您可以随意在XHR请求中进行此客户端。
content-disposition: attachment
和content-type: image/jpeg
。
我意识到这已经晚了,但是还有另一种获取个人资料图片网址的方法。
在原始网址中,您可以添加参数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=large&redirect=false&width=400&height=400
对于希望在iOS中获取个人资料照片的其他任何人:
我刚刚这样做是为了获得用户的Facebook图片:
NSString *profilePicURL = [NSString stringWithFormat:@"http://graph.facebook.com/%@/picture?type=large", fbUserID];
其中“ fbUserID”是Facebook用户的个人资料ID。
这样,我总是可以只调用profilePicURL中的url来获取图像,而我总是可以得到它,没问题。如果您已经有了用户ID,则不需要任何API请求,只需将ID粘贴在facebook.com/之后的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;
}
}];
}
您需要一个活动的FBSession才能正常工作(请参阅Facebook的文档和“ Scrumptious”示例)。
如果您想要带有URL的高质量个人资料图片的JSON,可以使用:
http://graph.facebook.com/517267866/picture?height=1024&redirect=false
如果只需要图片,则不带参数重定向即可使用它:
http://graph.facebook.com/517267866/picture?height=1024
517267866是以上示例之一的配置文件ID。放入您需要的Facebook ID
希望对您有所帮助
https://graph.facebook.com/XXXXX/picture?height=1024
,浏览器将下载图像而不显示图像。知道为什么吗?
这是唯一真正有效的方法:
me?fields=picture.type(*YOURTYPE*)
其中YOURTYPE可以是以下内容之一:小,普通,专辑,大,正方形
对于Android:
根据最新的Facebook SDK,
首先,您需要致电GraphRequest API
获取其中API
还提供的所有用户详细信息URL of current Profile Picture
。
Bundle params = new Bundle();
params.putString("fields", "id,email,gender,cover,picture.type(large)");
new GraphRequest(token, "me", params, HttpMethod.GET,
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
if (response != null) {
try {
JSONObject data = response.getJSONObject();
if (data.has("picture")) {
String profilePicUrl = data.getJSONObject("picture").getJSONObject("data").getString("url");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).executeAsync();
function getFacebookImageFromURL($url)
{
$headers = get_headers($url, 1);
if (isset($headers['Location']))
{
return $headers['Location'];
}
}
$url = 'https://graph.facebook.com/zuck/picture?type=large';
$imageURL = getFacebookImageFromURL($url);
现在,Facebook需要SSL
->重要添加的S,https-> https://graph.facebook.com/userId/?fields=picture&type=large
2014年6月作品
ImageView user_picture;
userpicture=(ImageView)findViewById(R.id.userpicture);
URL img_value = null;
img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=large");
Bitmap mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
userpicture.setImageBitmap(mIcon1);
其中ID是您的个人资料ID之一。