Facebook 图 Api 错误 "An unexpected error has occurred. Please retry your request later"

Facebook Graph Api error "An unexpected error has occurred. Please retry your request later"

我在尝试检索 Facebook 群组中的所有成员时遇到此错误:

 array(5) {
    ["message"]=>
    string(66) "An unexpected error has occurred. Please retry your request later."
    ["type"]=>
    string(14) "OAuthException"
    ["is_transient"]=>
    bool(true)
    ["code"]=>
    int(2)
    ["fbtrace_id"]=>
    string(11) "AnfsXcdgM"
  }

这是我的代码:

$this->_facebook = new Facebook\Facebook(array('app_id' => "$app_id",'app_secret' => "$secret",'default_graph_version' => 'v2.10'));

$this->_facebook->setDefaultAccessToken($_SESSION['facebook_access_token']);

$query = "/".$groupID."/members?fields=id,name,link,picture,first_name,last_name";

try{
    $response = $this->_facebook->get($query);
    while($pagesEdge)
    {
     $pageDecoded = json_decode($pagesEdge);
     foreach($pageDecoded as $key => $member)
     {
         $id = $member->id;
     } 
    }
}catch (Facebook\Exceptions\FacebookResponseException $e) {  echo 'Graph returned an error: ' . $e->getMessage(); }

它适用于只有少数人的群组(即使是一个有 10.000 名成员的群组),但我随机想到了这一点。

这可能是服务器端超时造成的。当我请求大量数据时,我时不时会收到此错误。也许你应该尝试使用 limit 参数来限制你的请求(默认应该是 25)。

我通过执行一个 cron 来解决这个问题,该 cron 一次获取 100 个数据,并将下一次调用的令牌值放入文件文本中。

我在查询中添加了这个字符串,当 $url 中的字段为空时,我退出了执行

<?php 

public function updateGroupMembers($groupID)
{
    $tempNext = file_get_contents($this->dirM); //check if the next string token is in the file
    if (!empty($tempNext)) 
    {
        $queryUntil = $tempNext;
    }
    // Sets the default fallback access token so we don't have to pass it to each request
    $this->_facebook->setDefaultAccessToken($_SESSION['facebook_access_token']);
    // Create table name
    $tableName = $groupID . "_Members";

    // Query the Graph API to get all current member's ID and name
    try 
    {
        $query = "/".$groupID."/members?fields=id,name,link,picture,first_name,last_name".$queryUntil; //add the next string to my query
        $response = $this->_facebook->get($query); 
        $pagesEdge = $response->getGraphEdge();    
        // Index for the elements fetched from the API below
        $i = 0;
        // Get current time
        $pageDecoded = json_decode($pagesEdge);
        foreach($pageDecoded as $key => $member)
        {
           /* ...get data and process them... */
        }   

        $temp = $pagesEdge->getMetaData();
        $next = parse_url($temp['paging']['next']);
        parse_str($next['query'], $url);

        $access_token   = '&access_token='.$url['access_token'];
        $fields         = '&fields='.$url['fields'];
        $limit          = '&limit=100';
        $after          = '&after='.$url['after'];

        $res['until'] = $access_token.$fields.$limit.$after;

        file_put_contents($this->dirM, $res['until'], LOCK_EX);

        if ( empty($url['access_token']) || empty($url['fields']) || empty($url['limit']) || empty($url['after']) ) 
        {
            file_put_contents($this->dirM, '', LOCK_EX); //clean my txt file that contains my next string
            die('FINE');
        }

    } catch (Facebook\Exceptions\FacebookResponseException $e) {
        echo 'm2Graph returned an error: ' . $e->getMessage();
        exit;
    } catch (Facebook\Exceptions\FacebookSDKException $e) {
        echo 'm2Facebook SDK returned an error: ' . $e->getMessage();
        exit;
    }
}