使用Facebook Graph API获取帖子点赞列表遇400错误求解决方案(C#)
解决Facebook Graph API获取点赞返回400错误的问题
问题分析
你遇到的(#12) singular statuses API is deprecated for versions v2.4 and higher错误,核心原因有两点:
- 你请求的
3475961399339788属于旧版动态(Status)对象,Facebook在v2.4+已废弃直接通过单个Status ID调用该接口的方式,且v2.3版本早已停止服务,回退版本完全无效。 - 请求的权限、端点格式不符合当前Graph API的规则。
解决方案
1. 确认对象类型与权限
- 先验证目标ID的对象类型:发送
GET /3475961399339788?access_token={token}请求,查看返回结果中的type字段,确认是post、status还是其他类型。 - 确保Access Token拥有对应权限:
- 若为用户动态/帖子:需持有
user_posts和user_likes权限 - 若为公共主页帖子:需持有
pages_read_engagement权限,且Token需关联目标主页
- 若为用户动态/帖子:需持有
2. 调整API请求格式
使用Facebook当前支持的API版本(如v18.0),采用正确的端点格式:
- 直接请求点赞列表(带总数统计):
https://graph.facebook.com/v18.0/3475961399339788/likes?summary=true&access_token={access-token} - 或通过fields嵌套方式请求:
https://graph.facebook.com/v18.0/3475961399339788?fields=likes.summary(true)&access_token={access-token}注意:必须使用官方当前支持的API版本,旧版本已被完全停用,无法正常请求。
3. 优化C#请求代码
替换过时的HttpWebRequest为HttpClient,同时增加错误处理以获取更详细的报错信息:
using System.Net.Http; using System.Threading.Tasks; internal class FacebookApiClient { private readonly HttpClient _httpClient; public FacebookApiClient() { _httpClient = new HttpClient(); _httpClient.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate"); } public async Task<(string Response, int StatusCode)> GetAsync(string uri) { try { var response = await _httpClient.GetAsync(uri); var content = await response.Content.ReadAsStringAsync(); return (content, (int)response.StatusCode); } catch (HttpRequestException ex) { return (ex.Message, 0); } } } // 调用示例 var client = new FacebookApiClient(); var result = await client.GetAsync($"https://graph.facebook.com/v18.0/3475961399339788/likes?summary=true&access_token={access_token}");
4. 额外排查点
- 验证Token有效性:发送
GET /debug_token?input_token={token}&access_token={app-token}请求,检查Token的权限范围、过期时间及关联对象。 - 确认对象隐私设置:若为用户动态,需确保动态为公开状态,或Token持有者是动态发布者/被授权查看的用户。
内容的提问来源于stack exchange,提问作者memo
相关产品推荐
相关产品推荐

