You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Facebook Graph API无法获取2019年后活动及upcoming活动问题

Facebook Graph API无法获取2019年后活动的问题解决

问题详情

自2018年起通过Facebook Graph API加载活动,脚本逻辑简洁,但查询仅能返回2019年及之前的活动;使用time_filter=upcoming参数时无任何结果返回。已确认访问令牌有效,且在Graph Explorer中测试结果一致,当前使用的脚本代码如下:

/*
Facebook SDK
Facebook SDK
Facebook SDK
Facebook SDK
*/
$nowdate = strtotime(date('Y-m-d'));    

$fb = new \Facebook\Facebook([
  'app_id'                  => '****',
  'app_secret'              => '****',
  'default_graph_version'   => 'v17.0',
  'default_access_token'    => '****',
]);

try {
  $response = $fb->get(
    '/milesamersfoort/events?fields=id,start_time,name,description,cover,date&limit=200&since='.$nowdate,
    _FB_TOKEN
  );
        
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();      
  exit;
  
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

$results = $response->getGraphEdge();

可能原因

  • 权限收紧:Facebook在2020年后调整了页面活动的API访问权限,普通令牌无法获取2019年后的公开活动,需申请pages_read_engagement或pages_events权限(需通过应用审核)。
  • 时间参数格式错误:since参数使用Unix时间戳不符合Graph API v17.0的要求,需使用ISO 8601格式的日期字符串。
  • 参数逻辑冲突:since参数与time_filter=upcoming的结合使用可能存在逻辑冲突,导致过滤结果异常。
  • 活动隐私设置:目标页面的近期活动可能设置为非公开状态,无法通过API获取。

解决方案

  1. 确认并申请权限
    • 在Graph Explorer中查看访问令牌的权限列表,确保已包含pages_read_engagement或pages_events权限;若未包含,需通过Facebook应用审核流程申请对应权限。
  2. 修正时间参数格式
    • 将since参数的Unix时间戳替换为ISO 8601格式字符串,例如用date('c')生成符合要求的格式。
  3. 调整查询参数
    • 直接使用time_filter=upcoming参数替代since,或确保参数组合逻辑正确;同时移除无效的date字段(Graph API活动字段中无date,应使用start_time)。
  4. 验证活动状态
    • 登录Facebook页面后台,确认近期活动设置为公开可见,无隐私限制。

修改后的代码示例

/*
Facebook SDK
*/
// 生成ISO 8601格式的当前时间
$nowDate = date('c');    

$fb = new \Facebook\Facebook([
  'app_id'                  => '****',
  'app_secret'              => '****',
  'default_graph_version'   => 'v17.0',
  'default_access_token'    => '****',
]);

try {
  // 使用time_filter=upcoming参数,移除无效的date字段
  $response = $fb->get(
    '/milesamersfoort/events?fields=id,start_time,name,description,cover&limit=200&time_filter=upcoming',
    _FB_TOKEN
  );
        
} catch(\Facebook\Exceptions\FacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();      
  exit;
  
} catch(\Facebook\Exceptions\FacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

$results = $response->getGraphEdge();

内容的提问来源于stack exchange,提问作者Aleks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:16:01