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 的请求中指定 width
和 height
:http://graph.facebook.com/user_id/picture?width=500&height=500
【讨论】:
【参考方案10】:来自v2.7
,/<picture-id>?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 http graph api 上创建应用程序请求的问题
Facebook 请求配置文件 Graph API 无法在 iOS 7 本机 facebook 上未登录