- Модуль: seo
- Путь к файлу: ~/bitrix/modules/seo/lib/retargeting/services/requestfacebook.php
- Класс: BitrixSeoRetargetingServicesRequestFacebook
- Вызов: RequestFacebook::directQuery
protected function directQuery(array $params = array())
{
$url = 'https://graph.facebook.com/v8.0/';
$url .= $params['endpoint'];
$clientParameters = is_array($params['fields']) ? $params['fields'] : array();
$clientParameters = $clientParameters + array('access_token' => $this->adapter->getToken());
$result = '';
if ($params['method'] == 'GET')
{
$url .= '?' . http_build_query($clientParameters, "", "&");
$result = $this->client->get($url);
}
elseif ($params['method'] == 'DELETE')
{
$result = $this->client->delete($url, $clientParameters, true);
}
else
{
$result = $this->client->post($url, $clientParameters, true);
}
if (!$params['has_pagination'])
return $result;
try
{
$partialResult = $result;
$result = [];
$page = 1;
do
{
$decodedResult = Json::decode($partialResult);
$nextPage = ($decodedResult['paging'] && $decodedResult['paging']['next']) ? $decodedResult['paging']['next'] : false;
unset($decodedResult['paging']);
$result = array_merge_recursive($result, $decodedResult);
if ($nextPage)
{
$this->client->query($params['method'], $nextPage);
$partialResult = $this->client->getResult();
$page++;
}
else
{
if ($page == 1) // if haven't ['paging']['next'] in original response
{
return $partialResult;
}
break;
}
}
while($nextPage && $page < 20); // max 500 items
return Json::encode($result);
}
catch (Exception $e)
{
return $result;
}
}