虽然访问者名为“full_picture”,但Facebook的Graph API无法提供完整尺寸的图像 - 如何获得真实的全貌?

时间:2016-06-17 22:20:52

标签: image facebook facebook-graph-api facebook-graph-api-v2.6

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

但其中许多是关于获取用户个人资料图片,用“/< userid> / picture”或类似的东西来回答。我需要知道如何从页面提要中获取已发布的图像,因此这不是我正在寻找的内容。然后,在搜索查询中使用“full_image”回答​​了问题。

嗯,此时我的问题就开始了。 full_image实际上不是完整的图像。它仅限于720x720像素。

我们来看一个例子: Facebook的Graph API资源管理器中的explore this picture from SPIEGEL ONLINE

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页面时,您会看到图片信息。

我们走了:https://www.facebook.com/spiegelonline/posts/10154299256109869

以全屏模式打开已发布的图像,然后右键单击它以显示图像文件时,您将看到图像将大得多于720x720。

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

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

我的问题是:如何使用Graph API获取完整尺寸的图片网址?

TL; DR: Facebook的图谱API似乎通过使用full_image访问页面的Feed来提供已调整大小的图片。那么,如何检索实际的完整(意思是未调整大小)图像。

1 个答案:

答案 0 :(得分:1)

在使用Graph API Explorer再次玩游戏后,我终于找到了解决方案。它比我想象的要简单得多。

您需要做的就是以下几个步骤:

  1. 只需请求此路径(这次没有full_picture访问者,此处只有object_id很重要):
  2. /38246844868_10154299256109869?fields=object_id

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

      在此示例中,它是"1068539139897737"

      1. 现在,请求所有images申请上述object_id
      2. /1068539139897737?fields=images

        1. 响应是这样的JSON:
        2. {
            "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 - etvoilà - 这就是全貌。