Facebook 的图表 API 不提供完整尺寸的图像,尽管访问器被命名为 "full_picture" — 如何获得真正的完整图片?

Facebook's Graph API doesn't deliver full sized images although accessor is named "full_picture" — How to get the real full picture?

我知道关于 FB's Graph API and how to retrieve full sized images 的许多现有问题。

但其中很多都是关于获取用户个人资料图片的,这些图片的答案是“//picture”或类似的内容。我需要知道如何从页面提要中获取 posted 图像,所以这不是我要找的。然后就是用"use full_image in your search query".

回答的问题

好吧,我的问题从这里开始。 full_image 实际上不是完整图像。限制为 720x720 像素。

我们来看一个例子: explore this picture from SPIEGEL ONLINE 在 Facebook 的图表 API 浏览器中。

Graph API 请求的给定路径是:

/38246844868_10154299256109869?fields=full_picture,picture,permalink_url,type,object_id

响应如下:

{
  "full_picture": "https://scontent.xx.fbcdn.net/v/t1.0-9/s720x720/13450864_1068539139897737_5236884236245491903_n.jpg?oh=20cc415e7931b8eb8a6228ab253bfa53&oe=57E23B8B",
  "picture": "https://scontent.xx.fbcdn.net/v/t1.0-0/s130x130/13450864_1068539139897737_5236884236245491903_n.jpg?oh=37c4263e047f841da7243c040a4f279d&oe=57C6469E",
  "permalink_url": "https://www.facebook.com/spiegelonline/posts/10154299256109869",
  "type": "photo",
  "object_id": "1068539139897737",
  "id": "38246844868_10154299256109869"
}

如您所见,我请求了 picture(这只是一个缩略图)和由 full_picture 索引的全尺寸图像。不幸的是,这张照片不是完整的,而是经过调整大小的。甚至在图像 URL 中提到它最大只有 720x720。

这里是:https://scontent.xx.fbcdn.net/v/t1.0-9/s720x720/13450864_1068539139897737_5236884236245491903_n.jpg?oh=20cc415e7931b8eb8a6228ab253bfa53&oe=57E23B8B

访问 permalink_url 后面的 Facebook 页面时,您会看到图像 post。

我们开始:https://www.facebook.com/spiegelonline/posts/10154299256109869

当以全屏模式打开 posted 图像然后右键单击它以显示图像文件时,您会看到图像比 720x720 大得多。

它是:https://scontent-frt3-1.xx.fbcdn.net/t31.0-8/13422344_1068539139897737_5236884236245491903_o.jpg

请将 URL 与 API 端点响应的结果进行比较,如上所示。甚至服务器也不一样。因此,正如在 SO 上的其他几个问题中提到的那样,将“_n”替换为“_o”并不是一个简单的解决方案。

我的问题是:如何使用 Graph API 获得全尺寸图像 URL?

TL;DR: Facebook 的图表 API 似乎通过使用 full_image 访问它们来将调整大小的图像 post 发送到页面的供稿中.那么,如何检索实际的完整(即未调整大小的)图像。

再次使用 Graph API Explorer 后,我终于找到了解决方案。而且比我想象的简单多了。

您只需执行以下几个步骤:

  1. 只需请求此路径(这次没有 full_picture 访问器,这里只有 object_id 很重要):

/38246844868_10154299256109869?fields=object_id

  1. 从 API 的回复中获取 object_id
{
  "object_id": "1068539139897737",
  "id": "38246844868_10154299256109869"
}

在这个例子中是 "1068539139897737"

  1. 现在,请求所有 images 以上 object_id:

/1068539139897737?fields=images

  1. 响应是这样的 JSON:
{
  "images": [
    {
      "height": 2048,
      "source": "https://scontent.xx.fbcdn.net/v/t31.0-8/13422344_1068539139897737_5236884236245491903_o.jpg?oh=e923e167d258e77c12caf422d98b44aa&oe=59968118",
      "width": 1536
    },
    {
      "height": 1280,
      "source": "https://scontent.xx.fbcdn.net/v/t31.0-8/p960x960/13422344_1068539139897737_5236884236245491903_o.jpg?oh=7a5086e29957b222c2fd1136f3640c98&oe=598633CD",
      "width": 960
    },
    // … many others in between here …
    {
      "height": 225,
      "source": "https://scontent.xx.fbcdn.net/v/t1.0-0/p75x225/13450864_1068539139897737_5236884236245491903_n.jpg?oh=26d94247c4e34a69fb0db3fb1ae213b5&oe=599353F9",
      "width": 168
    }
  ],
  "id": "1068539139897737"
}
  1. 从按大小向下排序的 images 列表中,只需抓住第一个条目。得到它 source – 等等 – 这就是全貌。