Facebook Graph API:在一个请求中获取更大的图片

Posted

技术标签:

【中文标题】Facebook Graph API:在一个请求中获取更大的图片【英文标题】:Facebook Graph API : get larger pictures in one request 【发布时间】:2012-05-25 21:58:51 【问题描述】:

我目前正在使用the Graph API Explorer 进行一些测试。这是一个很好的工具。

我想获取用户的好友列表,包括好友的姓名、ID 和图片。所以我输入:

https://graph.facebook.com/me/friends?fields=id,picture,name

但图片只有 50x50,我想要一张更大的。

有可能吗?

【问题讨论】:

【参考方案1】:

如 Facebook 上的this bug 中所述,您现在还可以通过新的 API“field expansion”语法请求特定的图像尺寸。

像这样:

https://graph.facebook.com/____OBJECT_ID____?fields=picture.type(large)

【讨论】:

确实如此。 fields=picture.width(640) 更好。 Facebook Graph API 似乎改变了他们的 api。当我尝试使用您的建议时,Facebook 回复“图片不支持子字段”。 getting error: "error": "message": "Unsupported get request. Please read the Graph API documentation at developers.facebook.com/docs/graph-api", "type": "GraphMethodException", "code": 100 查看 ?field=full_picture,attachments for 2.x 查询 随着新的 Facebook 更改,无法获取更大的图像。有什么提示吗?【参考方案2】:

让所有朋友(当然也在使用该应用程序)获得正确图片尺寸的最佳方法是使用field expansion,或者使用尺寸标签之一(方形、小、正常、大):

/me/friends?fields=picture.type(large)

(编辑:这不再起作用了)

...或者您可以指定宽度/高度:

me/friends?fields=picture.width(100).height(100)

顺便说一句,你也可以这样写:

me?fields=friendspicture.type(large)

【讨论】:

感谢信息,我会更新答案。 full_picture 似乎对朋友不起作用:/me/friends?fields=full_picture - 你知道这怎么可能吗?【参考方案3】:

你不需要拉“图片”属性。还有更方便的方法,您唯一需要的是用户名,请参见下面的示例;

https://graph.facebook.com/user_id/picture?type=large

附言type 定义你想要的大小

请记住,使用具有基本权限的令牌,/me/friends 将仅返回具有 id+name 属性的朋友列表

【讨论】:

但我不同意你最后一句话:在基本权限下,您可以访问多个 id+name 属性,例如:graph.facebook.com/btaylor 呃,“in one request”呢? 你也可以使用full_picture instat of picture。 "message": "(#12) 此类型的图片边缘在 v2.3 及更高版本中已弃用",【参考方案4】:

你可以设置图片的像素大小,像这样:

https://graph.facebook.com/v2.8/me?fields=id,name,picture.width(500).height(500)

同理,可以使用type参数

user-id/?fields=name,picture.type(large)

来自documentation

类型 enumsmall, normal, album, large, square

【讨论】:

【参考方案5】:

将字段数组id,name,picture 更改为id,name,picture.type(large)

https://graph.facebook.com/v2.8/me?fields=id,name,picture.type(large)&access_token=<the_token>

结果:


   "id": "130716224073524",
   "name": "Julian Mann",
   "picture": 
      "data": 
         "is_silhouette": false,
         "url": "https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/15032818_133926070419206_3681208703790460208_n.jpg?oh=a288898d87420cdc7ed8db5602bbb520&oe=58CB5D16"
      
   

【讨论】:

200 x 200 有多大? 最新 (2.10) Graph API 不是“大”尺寸可用:Graph returned an error: (#100) For field 'picture': type must be one of the following values: thumbnail, small, album【参考方案6】:

如果需要,也可以尝试根据高度或宽度获取图像

https://graph.facebook.com/user_id/picture?height=

https://graph.facebook.com/user_id/picture?width=

这些值默认以像素为单位,您只需要提供 int 值

【讨论】:

【参考方案7】:

我广泛研究了 Graph API Explorer,终于找到了 full_picture

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture

附:我注意到 full_picture 并不总是提供我想要的全尺寸图像。 '附件'确实

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture,attachments

【讨论】:

这只是显示宽度:720px。你只有这样的大照片才能找到。对于最大的graph.facebook.com/photo_id,你可以看到 6 张不同尺寸的照片。 我刚刚用朋友端点测试了这个,它没有工作【参考方案8】:

嗯……我想我找到了解决办法。

其实in可以只是请求

https://graph.facebook.com/me/friends?fields=id,name

根据http://developers.facebook.com/docs/reference/api/(“图片”部分),可以使用用户ID构建个人资料照片的url

例如,假设用户 id 在 $id 中:

"http://graph.facebook.com/$id/picture?type=square"
"http://graph.facebook.com/$id/picture?type=small"
"http://graph.facebook.com/$id/picture?type=normal"
"http://graph.facebook.com/$id/picture?type=large"

但这不是最终的图片网址,所以如果有人有更好的解决方案,我很高兴知道:)

【讨论】:

图片尺寸类型:developers.facebook.com/docs/graph-api/reference/user/picture【参考方案9】:

您可以在对 Facebook 图形 API 的请求中指定 widthheighthttp://graph.facebook.com/user_id/picture?width=500&amp;height=500

【讨论】:

【参考方案10】:

来自v2.7/&lt;picture-id&gt;?fields=images 将为您提供不同大小的图像列表,第一个元素是完整大小的图像。

我不知道一次处理多张图片的任何解决方案。

【讨论】:

【参考方案11】:

当我向picture.type(full_picture) 发出请求时收到此错误:

"(#100) 对于字段“图片”:类型必须是以下之一 值:小、正常、相册、大、方形"

当我使用 picture.type(album)picture.type(square) 发出请求时,会以 50x50 像素大小的图像响应我。

当我使用 picture.type(large) 发出请求时,会以 200x200 像素大小的图像回复我。

当我使用 picture.width(800) 发出请求时,会以 477x477 像素大小的图像回复我。

picture.width(250),响应 320x320。

picture.width(50),回复 50x50。

picture.width(100),响应 100x100。

picture.width(150),响应 160x160。

我认为当用户第一次添加照片时,facebook 会给出不同大小的图像。

我在这里看到的用于请求用户图像的 API 不支持 调整请求的图像大小。我认为它给出了最接近的图像尺寸。

【讨论】:

True... "picture.type(large)" 也给了我一个 200x200 - 我必须说不是很大【参考方案12】:

您可以按如下方式调整大小。

用途:

https://graph.facebook.com/USER_ID?fields=picture.type(large)

详情:https://developers.facebook.com/docs/graph-api/reference/user/picture/

【讨论】:

【参考方案13】:

在图表响应(“http://photos-c.ak.fbcdn.net/”)中找到的图片 URL 中,只需将默认的“_s.jpg”替换为“_n.jpg”(?正常大小)或“_b.jpg”(?大大小)或“_t.jpg”(缩略图)。

Hacakable URLs/REST API 让网络变得更好。

【讨论】:

似乎总是给出“处理您的请求时发生错误。不幸的是,参考 #50.27f74317.14274.604fb0”【参考方案14】:

rest-fb 用户(方形图像,更大分辨率): Connection myFriends = fbClient.fetchConnection("me/friends", User.class, Parameter.with("fields", "public_profile,email,first_name,last_name,gender,picture.width(100).height(100)")) ;

【讨论】:

【参考方案15】:

我认为到目前为止,获取朋友大照片的唯一方法是使用 FQL。首先,您需要获取好友列表:

https://graph.facebook.com/me/friends

然后解析这个列表并提取所有朋友ids。完成后,只需执行以下 FQL 查询:

SELECT id, url FROM profile_pic WHERE id IN (id1, id2) AND width=200 AND height=200

200 这里只是一个示例大小,您可以输入任何内容。您应该得到以下响应:


  "data": [
    
      "id": ..., 
      "url": "https://fbcdn-profile-a.akamaihd.net/..."
    , 
    
      "id": ..., 
      "url": "https://fbcdn-profile-a.akamaihd.net/..."
    
  ]

每个网址都是指向 200x200 像素图像的链接。

【讨论】:

【参考方案16】:

我有同样的问题,但我尝试了这个来解决我的问题。它返回大图像。 这不是完美的解决方法,但您可以尝试一下。

https://graph.facebook.com/v2.0/OBJECT_ID/picture?access_token=XXXXX

【讨论】:

在请求中再添加一个参数:type=large。请在下面查看我的答案。【参考方案17】:

尝试通过更改每个json对象中url的像素大小来更改图像的大小,如下所示:

例如,我将 s480x480 更改为 s720x720

之前: https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-xfp1/t1.0-9/q71/s480x480/10454308_773207849398282_283493808478577207_n.jpg

之后: https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-xfp1/t1.0-9/q71/s720x720/10454308_773207849398282_283493808478577207_n.jpg

【讨论】:

【参考方案18】:

JS 风格的变体。 只需设置巨大的大图片宽度,您将获得最大的变体。

FB.api(
  '/' + userId,
  fields: 'picture.width(2048)',
  function (response) 
    if (response && !response.error) 
      console.log(response.picture.data.url);
    
  
);

【讨论】:

【参考方案19】:

您可以使用 full_picture 代替图片键来获取完整尺寸的图像。

【讨论】:

【参考方案20】:

注意:从 Graph API v8.0 开始,您 must provide the access token 处理您执行的每个 UserID 请求。

点击图形 API:

https://graph.facebook.com/<user_id>/picture?height=1000&access_token=<any_of_above_token>

使用火力基地:

FirebaseUser user = mAuth.getCurrentUser();
String photoUrl = user.getPhotoUrl() + "/picture?height=1000&access_token=" +
  loginResult.getAccessToken().getToken();

你可以像这样从registerCallback获得令牌

       LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() 
        @Override
        public void onSuccess(LoginResult loginResult) 
            FirebaseUser user = mAuth.getCurrentUser();
            String photoUrl = user.getPhotoUrl() + "/picture?height=1000&access_token=" + loginResult.getAccessToken().getToken();
        

        @Override
        public void onCancel() 
            Log.d("Fb on Login", "facebook:onCancel");
        

        @Override
        public void onError(FacebookException error) 
            Log.e("Fb on Login", "facebook:onError", error);
        
    );

文档是这样说的:

从 2020 年 10 月 24 日开始,所有用户都需要访问令牌 基于 UID 的查询。如果您查询 UID 并因此必须包含令牌:

对 Facebook 登录身份验证请求使用用户访问令牌 对页面范围的请求使用页面访问令牌 对服务器端请求使用应用访问令牌 对移动或网络客户端请求使用客户端访问令牌

我们建议您仅在无法使用客户端令牌时使用 其他令牌类型之一。

【讨论】:

以上是关于Facebook Graph API:在一个请求中获取更大的图片的主要内容,如果未能解决你的问题,请参考以下文章

如何在 facebook graph api 请求中使用 cURL

Facebook Graph API /me 请求

在 facebook http graph api 上创建应用程序请求的问题

Facebook 请求配置文件 Graph API 无法在 iOS 7 本机 facebook 上未登录

Facebook Graph API - 来自批处理请求的同步响应

使用 facebook graph api 允许更多页面