如何在一次API调用中获取大型照片URL?

时间:2011-09-29 15:24:21

标签: facebook-graph-api facebook-fql photos

我想立即在我的Facebook应用程序的Feed视图中显示大型照片。是否可以使用一个API调用从流/源中获取大型照片src URL?照片ID会在流/ Feed中返回,当然可以在另外的FQL或图形API调用中提供此照片ID,以检索有关该照片的所有信息。但是,有没有办法使用多个查询或批量调用来使用一个API往返来获取更大的照片src网址?

6 个答案:

答案 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";
}