From 50cfd190aae249a522fd27eb4fc54f552ba3f5a1 Mon Sep 17 00:00:00 2001 From: Eduardo Bizarro Date: Wed, 10 Oct 2018 16:28:22 -0300 Subject: [PATCH] handle pagination --- src/FormatResponse.php | 24 +++++++----------- src/Insights.php | 10 ++------ tests/LaravelFacebookAds/BaseTest.php | 35 +++------------------------ 3 files changed, 15 insertions(+), 54 deletions(-) diff --git a/src/FormatResponse.php b/src/FormatResponse.php index d76c48e..1bccd53 100644 --- a/src/FormatResponse.php +++ b/src/FormatResponse.php @@ -8,29 +8,23 @@ trait FormatResponse { - protected function format($response) + protected function format(Cursor $response) { $data = new Collection; switch (true) { - case is_array($response): - foreach ($response as $responseObject) { - foreach ($responseObject->getLastResponse()->getContent() as $items) { - foreach ($items as $item) { - $data->push($item); - } - } - } - break; case $response instanceof Cursor: - foreach ($response->getLastResponse()->getContent() as $items) { - foreach ($items as $item) { - $data->push($item); - } + while ($response->getNext()) { + $response->fetchAfter(); + } + + while ($response->valid()) { + $data->push($response->current()->exportAllData()); + $response->next(); } break; case $response instanceof AbstractObject: - $data->push($response->getLastResponse()->getContent()); + $data->push($response->getLastResponse()->getContent()['data']); break; } diff --git a/src/Insights.php b/src/Insights.php index f8f66ab..7be6c10 100644 --- a/src/Insights.php +++ b/src/Insights.php @@ -23,22 +23,16 @@ public function get( $fields = $params['fields']; $params['time_increment'] = '1'; + $params['limit'] = $params['limit'] ?? 100; $params['level'] = $level; $params['time_range'] = [ 'since' => $period->startDate->format('Y-m-d'), 'until' => $period->endDate->format('Y-m-d'), ]; - $response = []; $apiResponse = $levelClass->getInsights($fields, $params); - $response[] = $apiResponse; - - while ($apiResponse->getNext()) { - $response[] = $apiResponse->fetchAfter(); - } - - return $this->format($response); + return $this->format($apiResponse); } /** diff --git a/tests/LaravelFacebookAds/BaseTest.php b/tests/LaravelFacebookAds/BaseTest.php index 528d4d6..9c1b7ea 100644 --- a/tests/LaravelFacebookAds/BaseTest.php +++ b/tests/LaravelFacebookAds/BaseTest.php @@ -2,9 +2,13 @@ namespace LaravelFacebookAds\Tests; +use Edbizarro\LaravelFacebookAds\Facades\FacebookAds; use Edbizarro\LaravelFacebookAds\Providers\LaravelFacebookServiceProvider; +use FacebookAds\Logger\CurlLogger; use Orchestra\Testbench\TestCase; use Mockery as m; +use Edbizarro\LaravelFacebookAds\Period; +use FacebookAds\Object\Values\AdsInsightsLevelValues; /** * Class BaseTest. @@ -24,37 +28,6 @@ public function tearDown() public function setUp() { parent::setUp(); - - dd(FacebookAds::insights( - Period::days(30), - $this->etlJob['params']['account_id'], - AdsInsightsLevelValues::AD, - [ - 'fields' => [ - 'account_id', - 'account_name', - 'campaign_id', - 'campaign_name', - 'ad_id', - 'ad_name', - 'adset_id', - 'adset_name', - 'actions', - 'impressions', - 'clicks', - 'unique_clicks', - 'spend', - 'social_spend', - 'reach', - 'video_10_sec_watched_actions', - 'video_30_sec_watched_actions', - 'video_p25_watched_actions', - 'video_p50_watched_actions', - 'video_p75_watched_actions', - 'video_p100_watched_actions' - ] - ] - )); } protected function getPackageProviders($app)