Facebook graph api 如何在一个API调用中获取大型照片URL?

Facebook graph api 如何在一个API调用中获取大型照片URL?,facebook-graph-api,facebook-fql,photos,Facebook Graph Api,Facebook Fql,Photos,我想立即在我的Facebook应用程序的提要视图中显示大型照片。是否可以使用一个API调用从流/提要获取大型照片src URL?照片id在流/提要中返回,当然可以在附加的FQL或图形API调用中提供该照片id,以检索有关该照片的所有信息。但是,有没有一种方法可以使用多个查询或批处理调用,通过一个API往返来获取更大的照片src url?我还没有用流/源照片尝试过这种方法,但普遍接受的方法是: http://graph.facebook.com/{ID of object}/picture 如果

我想立即在我的Facebook应用程序的提要视图中显示大型照片。是否可以使用一个API调用从流/提要获取大型照片src URL?照片id在流/提要中返回,当然可以在附加的FQL或图形API调用中提供该照片id,以检索有关该照片的所有信息。但是,有没有一种方法可以使用多个查询或批处理调用,通过一个API往返来获取更大的照片src url?

我还没有用流/源照片尝试过这种方法,但普遍接受的方法是:

http://graph.facebook.com/{ID of object}/picture
如果您想要“大型”版本,您可以执行以下操作:

http://graph.facebook.com/{ID of object}/picture?type=large

我不能100%确定这是否适用于实际照片(而不是用户配置文件图片或页面配置文件图片),但我有一种预感——唯一需要注意的是,您显然必须有一个有权查看照片的登录用户(除非是公共用户).

使用新api的一个好技巧是从事件表中获取pic_cover字段,并根据您想要使用的大小对其进行处理

如果有人注意到这一点,并且键入大的还不够,我会找到其他解决方案


类型
large
无论如何都有点小(接近200px)。您可以通过添加来获得更大的图像,即
?宽度=1000
?高度=1000
。Facebook将返回最接近给定维度的图片,并保留纵横比。当传递两个维度时,比如
?width=1000和height=1000
,facebook会将图像剪切到给定的维度(在本例中为正方形)。

当我遇到这个问题时,我发现原来是我下载的图片,而不是我设置的大小

例如,如果我下载了所有照片,并请求

[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或更大的屏幕,所以我不知道这对更大的屏幕有什么影响。

由@streetlogics给出的答案很好,但只适用于带有
{object\u id}
的图片

http://graph.facebook.com/{object_id}/picture
但是我也希望feed的共享链接有大图片,有时候没有
{object\u id}
。我终于意识到
{picture}
缩略图URL包含原始站点的大图像的编码URL:

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
-->包含-->

因此,我做了一个循环,检查
{object\u id}
,如果不存在,则从
{picture}
提取URL:

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";
}
使用Facebook用户ID(项目ID)获取图片

返回带有图片URL的JSON数据

{
   "data": {
      "is_silhouette": false,
      "url": "https://fbcdn-profile-a.akamaihd.net/xxx/xyz/1cc066a2cae3f301d"
   }
}

这实际上需要一些曲折。您需要使用https,类型应该是普通的,而不是大的,并且您需要一个访问令牌。甜蜜的,直接访问更大的照片:例如@JohnWright:你不需要访问令牌,因为个人资料照片支持的类型是小的、普通的、大的或方形的,而不仅仅是约翰·赖特所说的普通。嗯,也许这取决于993589032862是什么?这是可行的:但这不是。993589032862是什么?我刚试过,不支持
?type=large
,最大的是
?type=normal
。也不需要访问令牌。我现在不需要
宽度
高度
就能得到一张“合理的”(~720px)图片,但谁知道……你这个英雄!真不敢相信我竟然没想到!!如何从对象\u id获取图片未从对象\u id获取种子帖子
{
   "data": {
      "is_silhouette": false,
      "url": "https://fbcdn-profile-a.akamaihd.net/xxx/xyz/1cc066a2cae3f301d"
   }
}