【问题标题】:Facebook graph API always returns small picturesFacebook 图形 API 总是返回小图片
【发布时间】:2014-06-12 04:31:36
【问题描述】:

我正在使用 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", 

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

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

这对于它发回的所有图片网址都是一样的。有些 url 以 _s.jpg 结尾,我可以将其更改为 _n.jpg 以使其成为更大的图像,但这不适用于末尾没有 _s.jpg 的 url,例如上面的 url。

任何人都知道要使用的 facebook-graph-api 命令,因此 facebook 将发送指向较大高分辨率图像的 url,而不是发送回指向所有缩略图的 url?或者如何更改 url 使其指向大的高分辨率图像?

谢谢

【问题讨论】:

  • @NS:你得到高分辨率图像了吗? ?

标签: facebook facebook-graph-api-v2.0


【解决方案1】:

使用用户的 id 代替 ,您可以在以下位置获得更大分辨率的图像:

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

【讨论】:

  • 此方法效果很好,但类型已更改。支持的类型为thumbnailnormalalbum
  • 在从 facebook 请求图片时,您还需要发送令牌吗?
【解决方案2】:

在您的新闻提要中获得帖子的“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"
}

【讨论】:

  • iam getin 错误:'不支持的获取请求。请阅读developers.facebook.com/docs/graph-api ' 的 Graph API 文档
  • 1.你有你的访问令牌而不是上面pic_url 中的access_token
  • 对不起,我没能找到你。只有一个 access_token 有权限?
  • 您在登录 Facebook 时获得访问令牌。您也可以在这里获取:link您使用访问令牌来验证您的帐户。
  • fields=full_picture FTW :D
【解决方案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"
}

【讨论】:

  • 我收到错误:'不支持的获取请求。请阅读 developer.facebook.com/docs/graph-api 上的 Graph API 文档
  • 对于“链接”类型的帖子,此 object_id 不存在?
  • 每种类型似乎都需要不同的方法我问了一个问题以便创建这些方法的合作列表,但我在 10 分钟内得到了 2 票反对,真可惜:S stackoverflow.com/questions/29233382/…
【解决方案4】:

尝试在您的请求中指定attachments 字段。

/v2.0/me/home?fields=attachments

这将为您提供一个“附件”字段,其中包含一些媒体。您会在那里找到高分辨率图像。

【讨论】:

    【解决方案5】:

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

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

    另一个(更彻底/更重)的替代方法是向 Facebook Graph API 发送批处理请求,第一个请求从 me/home/ 获取提要,然后第二个请求使用 ?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 属性或源属性之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多