Как получить данные из массива курсоров в facebook Из API-вызова рекламы

При вызове метода getInsights() он дает объект, поэтому я хочу получить доступ к некоторым данным из него. Вот вызов апи

$account->getInsights($fields, $params);
echo '<pre>';print_r($resultArr);die;

это даст результат как

FacebookAds\Cursor Object ( [response:protected] => FacebookAds\Http\Response Object ( [request:protected] => FacebookAds\Http\Request Object ( [client:protected] => FacebookAds\Http\Client Object ( [requestPrototype: защищенный] => FacebookAds\Http\Request Object (

Заранее спасибо.


person rattheratek    schedule 20.03.2017    source источник
comment
Курсоры предназначены для разбиения на страницы; сам объект курсора не должен содержать никаких фактических данных AFAIK.   -  person CBroe    schedule 20.03.2017


Ответы (4)


Следующее должно работать:

$resultArr = $account->getInsights($fields, $params)[0]->getData();
echo '<pre>';
print_r($resultArr);
die;

Если у вас есть более одного объекта в курсоре, вы можете просто перебрать его:

foreach ($account->getInsights($fields, $params) as $obj) {
    $resultArr = $obj->getData();
    echo '<pre>';
    print_r($resultArr);
}
die;

В этом случае, если вы установите для параметра implicitFetch значение true по умолчанию с помощью:

Cursor::setDefaultUseImplicitFetch(true);

вы будете уверены, что перебираете все результаты.

person oriol    schedule 12.04.2017

Я использую этот фрагмент кода, и он работает для меня, надеюсь, сработает для вас...

    $adset_insights = $ad_account->getInsights($fields,$params_c); 
    do {
            $adset_insights->fetchAfter();
    } while ($adset_insights->getNext());
    $adsets = $adset_insights->getArrayCopy(true); 
person Angie    schedule 08.05.2017

Возможно, попробуйте:

$insights = $account->getInsights($fields, $params);
$res = $insights->getResponse()->getContent(); 

а затем перейти к обычным вещам:

print_r($res['data']);
person ravb79    schedule 20.03.2019

Не уверен, что мой метод отличается от метода Анджелины, потому что это другая область SDK или это связано с тем, что он был изменен с момента ее ответа, но ниже приведен код, который работает для меня и, надеюсь, будет полезен для кого-то еще:

        $location_objects = $cursor->getArrayCopy();
        $locations = array();

        foreach($location_objects as $loc)
        {
            $locations[] = $loc->getData();
        }
        return $locations;

Вызов getArrayCopy возвращает массив AbstractObjects, а затем вызов getData возвращает массив свойств объектов.

person Mark Hill    schedule 09.12.2018