Facebook图形API总是返回小图片

10

我将使用Facebook Graph API,并发出以下命令:

/V2.0/me/home

它会返回类似于以下内容的结果:

  "id": "xxxxxxxxxxxxxxxxxxxxxx", 
  "from": {
    "id": "xxxxxxxxxxxxxxxxx", 
    "name": "Roger"
  }, 
  "story": "Roger shared a link.", 
  "picture": "https://fbexternal-a.akamaihd.net/safe_image.php?d=AQB2VeutsxS6ht3i&w=154&h=154&url=https%3A%2F%2Fwww.facebook.com%2Fads%2Fimage%2F%3Fd%3DAQIuWnred6mG7Ti280buWL8uhE00-W2H0Eom1PzNa3Av0x3y7JieMPqLmxAFYsCRKh0Zr8u_PyWO1lFbTknlj_DaksBoFiaD8d2yIWLOGNYKie1w9Kff6vyyElxnfrlHH7uSRhwycKNakg7szgWtBBwC", 
  "link": "http://xxxxxx.com", 

问题出在上面的“picture”标签,其中图片的网址是在之后给出的。

如果将该网址粘贴到浏览器中,您会得到一个小缩略图大小的图片,但在真正的 Facebook 页面上,它显示了同一张图片的更大、高分辨率版本。

这对所有发送回来的图片网址都是适用的。有些网址以 _s.jpg 结尾,我可以将其改为 _n.jpg 以获得更大的图片,但对于不以 _s.jpg 结尾的网址(比如上面的网址),这种方法不起作用。

有人知道使用 Facebook Graph API 命令的方法吗?这样 Facebook 就会发送指向更大、高分辨率图片的网址,而不是发送指向所有缩略图的网址。还是说有什么方法可以更改网址,使其指向更大、高分辨率的图片呢?

谢谢。


@ N S:你有高分辨率的图片吗? - Vineesh TP
5个回答

11

使用用户id替代<id>,您可以在以下网址获取更高分辨率的图像:

http://graph.facebook.com/<id>/picture?type=large


这个方法很好用,但是类型已经改变了。支持的类型有 缩略图普通相册 - David Blurton
在请求来自Facebook的图片时,您是否仍需要发送令牌? - Alex Pelletier
现在的类型有:小、正常、相册、大、方形。但即使是大型的也只有203x200像素。我认为这个图表终端只能获取您的个人资料图片,而不能获取您的动态中的图片。 - Simon East
如果你想要接收JSON格式的数据,你需要包含参数format=json。FB.api( '/me/picture', 'GET', {"type":"large","format":"json","redirect":false}, function(response) { // 在这里插入你的代码 } ); - undefined

4
在你的新闻动态中获取“id”后,使用以下JavaScript代码:
pic_url = 'http://graph.facebook.com/'+ post_id +'?fields=full_picture&access_token="+ response.authResponse.accessToken;

在您的请求中。

示例响应:

{
   "full_picture": "https://fbexternal-a.akamaihd.net/safe_image.php?d=AQBbJqpkt2Jhf0VF&url=http\u00253A\u00252F\u00252Fwww.mixofpix.eu\u00252Fwp-content\u00252Fuploads\u00252F2014\u00252F08\u00252Flampa-oblak.jpg",
   "id": "1407721719477425_1467737580142505",
   "created_time": "2014-08-07T20:00:51+0000"
}

我遇到了一个错误:“不支持的获取请求。请阅读 https://developers.facebook.com/docs/graph-api 上的 Graph API 文档。” - Vineesh TP
你是否已经拥有了 pic_url 中的 access_token 访问令牌? - Martin Danis
抱歉,我不太明白您的意思。只有一个 access_token 是正确的吗? - Vineesh TP
当您登录Facebook时,您会获得访问令牌。您也可以在此处获取:链接 您使用访问令牌来验证您的帐户。 - Martin Danis
字段=全图 FTW :D - dutzi
只有帖子中包含单个图片才能起效。如果帖子中有多张图片,需要查看附件 - Simon East

3
从您的新闻动态中获取“object_id”字段的ObjectId。
使用此object_id值进行单独的Graph API调用,如下所示 -

https://graph.facebook.com/10152199489086727?fields=images&access_token=

这将返回此帖子的各种尺寸的图像列表。
示例输出:
{
    "images": [
    {
        "height": 462, 
        "source": "https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/10302057_10152199489086727_707407897349696496_n.jpg", 
        "width": 616
    }, 
    {
        "height": 320, 
        "source": "https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/p320x320/10302057_10152199489086727_707407897349696496_n.jpg", 
        "width": 426
    },.... ..
    ], 
    "created_time": "2014-07-23T18:15:16+0000", 
    "id": "10152199489086727"
}

我遇到了错误:'不支持的获取请求。请阅读developers.facebook.com/docs/graph-api上的Graph API文档。 - Vineesh TP
这个 object_id 在“link”类型的帖子中不存在吗? - Joe Huang
1
每种类型似乎需要不同的方法。我曾经提出了一个问题,旨在创建这些方法的合作列表,但是在10分钟内我得到了2个反对票,真是遗憾:S - nach

2
尝试在请求中指定attachments字段。
/v2.0/me/home?fields=attachments

这将给您一个“附件”字段,并带有一些媒体内容。您会在那里找到高分辨率图像。

URL现在是/v15.0/me/feed,但不幸的是,在某些情况下,这并不能完全给您提供分辨率。有关如何解决此问题,请参见此线程 - Simon East

0

您可以通过获取帖子的“picture”属性中url查询字符串变量的值并对其进行解码来获取原始图像URL:

var origImgSrc = decodeURIComponent(picture.match(/(url=)([^&]+)/)[2]);

另一个(更彻底/更重)的选择是向Facebook Graph API发送批量请求,第一个请求从me/home/获取feed,然后第二个请求使用?ids=查找返回的任何object_id属性(用于Facebook上的照片/视频)。
您可以通过向https://graph.facebook.com发送POST请求并在请求正文中包含以下内容来执行此操作:
access_token=VALID_ACCESS_TOKEN&batch=[{%20%22method%22:%22GET%22,%22name%22:%22me_home%22,%20%22relative_url%22:%22me/home?fields=object_id,full_picture%22,%20%22omit_response_on_success%22:false},%20{%20%22method%22:%22GET%22,%20%22depends_on%22:%22me_home%22,%20%22relative_url%22:%22?ids={result=me_home:$.posts.data.*.object_id}%22}]

然后,您可以进行一些高级的JS解析,以获取对象的图像数组中的full_picture属性或其中一个source属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接