我想立即在我的Facebook应用程序的Feed视图中显示大型照片。是否可以使用一个API调用从流/源中获取大型照片src URL?照片ID会在流/ Feed中返回,当然可以在另外的FQL或图形API调用中提供此照片ID,以检索有关该照片的所有信息。但是,有没有办法使用多个查询或批量调用来使用一个API往返来获取更大的照片src网址?
答案 0 :(得分:85)
我没有尝试使用流/ Feed照片,但普遍接受的方法是:
http://graph.facebook.com/{ID of object}/picture
如果你想要“大”版本,你可以这样做:
http://graph.facebook.com/{ID of object}/picture?type=large
我不是百分百确定这是否适用于实际照片(而不是用户个人资料图片或页面个人资料照片),但我会预感它 - 唯一的警告是你显然必须记录在有权查看照片的用户中(除非是公开的)。
答案 1 :(得分:31)
如果有人正在考虑这种情况并且输入大型数据还不够,我找到了其他解决方案。
类型large
无论如何都很小(接近200px)。您可以通过添加?width=1000
或?height=1000
来获得更大的图片。 Facebook将返回最接近给定尺寸的图片并保留纵横比。当传递像?width=1000&height=1000
这样的两个尺寸时,脸书将把图像剪切到给定的尺寸(在这种情况下为正方形)。
答案 2 :(得分:2)
使用Facebook UserId(对象ID)来获取图片。
https://graph.facebook.com/173xxxx8635/picture?type=large&redirect=false
返回带有图片网址的JSON数据。
{
"data": {
"is_silhouette": false,
"url": "https://fbcdn-profile-a.akamaihd.net/xxx/xyz/1cc066a2cae3f301d"
}
}
答案 3 :(得分:1)
使用新api的一个好方法是从事件表中获取pic_cover字段并根据您要使用的大小处理它
答案 4 :(得分:1)
当我遇到这个问题时,我发现它原来是我正在下载的图片而不是我设置的尺寸。
例如,如果我按照
的要求下载了所有照片[FBRequestConnection startWithGraphPath:@"/me/photos?fields=created_time,name,picture&type=tagged" parameters:nil HTTPMethod:@"GET" completionHandler:^(FBRequestConnection * connection, id result, NSError *error) {
NSDictionary * userData = (NSDictionary *)result;
NSMutableArray * array = [[NSMutableArray alloc] initWithArray:userData[@"data"]];
for (NSDictionary * dict in eventsToAdd) {
UIImage * image = dict[@"picture"]
}
}];
我正在使用字典键搜索"图片"因为我想要的照片。
这会让我的图片质量低于搜索"来源"在这次搜索中:
[FBRequestConnection startWithGraphPath:@"/me/photos?fields=created_time,name,source&type=tagged" parameters:nil HTTPMethod:@"GET" completionHandler:^(FBRequestConnection * connection, id result, NSError *error) {
NSDictionary * userData = (NSDictionary *)result;
NSMutableArray * array = [[NSMutableArray alloc] initWithArray:userData[@"data"]];
for (NSDictionary * dict in eventsToAdd) {
UIImage * image = dict[@"source"]
}
}];
如果您使用Facebook API资源管理器并搜索照片,然后点击图片和源jpg链接,您就可以看到尺寸和质量的差异。
由于改变了这种方法,我设法摆脱了使用类型参数,因为它似乎没有做出不同的改变。
注意:我使用的是iPhone,而不是iPad或更大的屏幕,所以我不知道这会对更大的屏幕产生什么影响。
答案 5 :(得分:0)
@streetlogics的答案很好但仅适用于{object_id}
的图片。
http://graph.facebook.com/{object_id}/picture
但我也想要提供Feed的共享链接的大图片,有时候不会有{object_id}
。我终于意识到{picture}
缩略图网址包含原始网站的大图片的编码网址:
https://external.xx.fbcdn.net/safe_image.php?d=AQBe9UvGd0vPbAHP&w=130&h=130&url=http%3A%2F%2Fskift.com%2Fwp-content%2Fuploads%2F2015%2F12%2Fpollution.jpg&cfs=1
- >包含 - >
http://skift.com/wp-content/uploads/2015/12/pollution.jpg
所以我创建了一个检查{object_id}
的循环,如果不存在,则从{picture}
中提取网址:
if(isset($post['object_id'])) {
echo "http://graph.facebook.com/".$post['object_id']."/picture";
}
elseif(isset($post['picture'])) {
echo urldecode(preg_replace('/&cfs.*/', '', preg_replace('/.*url=/', '', $post['picture'])));
}
else {
echo "no_large_image";
}