Good Day All,
I'm working on retrieving facebook ad stats through the Facebook Ads php sdk. I'm able to retrieve the stats the way I want, but I keep running into a rate limit problem. I don't think I'm making an absurd amount of calls to the api and I don't intend to other than to retrieve daily stats for a list of clients. I'm wondering anyone here sees a way I can make the calls, without receiving {message '(#17) User request limit reached} to get the stats and insights every day for all of our ad sets. Ultimately, we have about 10-20 campaigns running at any time and I need to report on these stats daily for clients. The example below returns only 4 ads within this adset. Anything higher than this, I typically receive the error message.
<?php
include 'vendor/vendor/autoload.php';
$ACCESS_TOKEN = '****';
$APP_ID = '****';
$APP_SECRET = '****';
$appsecret_proof= hash_hmac('sha256', $ACCESS_TOKEN, $APP_SECRET);
use FacebookAds\Api;
Api::init($APP_ID, $APP_SECRET, $ACCESS_TOKEN, $appsecret_proof);
use FacebookAds\Object\AdUser;
//$user = (new AdUser('me'))->read(array('id'));
//echo $user->id ."\n";
use FacebookAds\Object\AdAccount;
use FacebookAds\Object\AdAccountFields;
use FacebookAds\Object\AdCampaign;
use FacebookAds\Object\AdCreative;
use FacebookAds\Object\Fields\AdCreativeFields;
use FacebookAds\Object\AdGroup;
use FacebookAds\Object\AdSet;
use FacebookAds\Object\Values\InsightsPresets;
use FacebookAds\Object\Values\AdObjectives;
$insightsFields = array(
'actions',
'cpm',
'ctr',
'frequency',
'impressions',
'reach',
'social_clicks',
'social_impressions',
'social_reach',
'spend',
'website_clicks',
'video_p25_watched_actions',
'video_p50_watched_actions',
'video_p75_watched_actions',
'video_p95_watched_actions',
'video_p100_watched_actions',
'video_avg_sec_watched_actions'
);
$statsFields = array(
'actions',
);
$impressionCheck = array(
'impressions',
);
$imageFields = array(
'creative',
);
$adSetFields = array(
'id',
'name',
'campaign_status'
);
$adGroupFields = array(
'creative',
'id',
'name',
'adgroup_status'
);
$campaignFields = array(
'id',
'name',
'campaign_group_status'
);
$campaignParams = array(
'date_preset' => InsightsPresets::LAST_MONTH,
);
$params = array(
'date_preset' => InsightsPresets::LAST_MONTH,
);
$statsParams = array(
'date_preset' => 'last_month',
);
/* Global Insights Variables */
$responseArray = '';
$facebook_cpm = '';
$facebook_ctr = '';
$facebook_frequency = '';
$facebook_impressions = '';
$facebook_reach = '';
$facebook_spend = '';
$facebook_website_clicks = '';
$video25Watched = '';
$video50Watched = '';
$video75Watched = '';
$video100Watched = '';
$videoAverageWatched = '';
/* Global Stats Variables */
$facebookComment = '';
$facebookLike = '';
$facebookLinkClick = '';
$facebookMention = '';
$facebookOffsiteConversion = '';
$facebookPhotoView = '';
$facebookPost = '';
$facebookPostLike = '';
$facebookUnlike = '';
$facebookVideoPlay = '';
$facebookVideoView = '';
$facebookPageEngagement = '';
$facebookPostEngagement = '';
$facebookCheckin = '';
$account = new AdAccount('****');
$campaigns = $account->getAdCampaigns($campaignFields, $campaignParams);
$campaign = new AdCampaign('****');
$adSets = $campaign->getAdSets($adSetFields, $params);
foreach($adSets as $adSetKey => $adSetValue){
$adSetID = $adSetValue->id;
$adSetName = $adSetValue->name;
$adSet = new AdSet($adSetID);
$adSetImpressionCheck = $adSet->getInsights($impressionCheck, $params);
$impressionsTrue = '';
foreach($adSetImpressionCheck as $i => $c){
$impressionsTrue = $c->impressions;
}
if ($impressionsTrue > 0){
$adGroups = $adSet->getAdGroups($adGroupFields, $params);
foreach($adGroups as $k => $v){
$adGroupID = $v->id;
$adGroupName = $v->name;
$adGroupCreative = $v->creative;
$adGroup = new AdGroup($adGroupID);
$insights = $adGroup->getInsights($insightsFields, $params);
$stats = $adGroup->getStats($statsFields, $params);
foreach($insights as $key => $response){
$facebook_cpm = $response->cpm;
$facebook_ctr = $response->ctr;
$facebook_frequency = $response->frequency;
$facebook_impressions = $response->impressions;
$facebook_reach = $response->reach;
$facebook_spend = $response->spend;
$facebook_website_clicks = $response->website_clicks;
$facebook_date = $response->date_start;
$responseArray = $response->actions;
$adSetNameLowerCase = strtolower($adSetName);
if (strpos($adSetNameLowerCase, 'video') !== false){
$video25Watched = $response->video_p25_watched_actions[0]['value'];
$video50Watched = $response->video_p50_watched_actions[0]['value'];
$video75Watched = $response->video_p75_watched_actions[0]['value'];
$video95Watched = $response->video_p95_watched_actions[0]['value'];
$video100Watched = $response->video_p100_watched_actions[0]['value'];
$videoAverageWatched = $response->video_avg_sec_watched_actions[0]['value'];
$videoActions = '
<li>25% Watched: '. $video25Watched .'</li>
<li>50% Watched: '. $video50Watched .'</li>
<li>75% Watched: '. $video75Watched .'</li>
<li>95% Watched: '. $video95Watched .'</li>
<li>100% Watched: '. $video100Watched .'</li>
<li>Average Video Watched: '. $videoAverageWatched .'</li>
';
}
$returnInsights .= '
<strong style="display:block">'. $adSetName .'</strong>
<ul style="margin-left:40px">
<li><strong>'. $adGroupName .'</strong></li>
<li><a href="'. $adGroupCreative .'">Ad Preview</a></li>
<li>CPM: '. $facebook_cpm .'</li>
<li>CTR: '. $facebook_ctr .'</li>
<li>Frequency: '. $facebook_frequency .'</li>
<li>Impressions: '. $facebook_impressions .'</li>
<li>Reach: '. $facebook_reach .'</li>
<li>Total Spend: '. $facebook_spend .'</li>
<li>Website Clicks: '. $facebook_website_clicks .'</li>
'. $videoActions .'
</ul>
';
}
foreach($stats as $keyStats => $responseStats){
$responseStatsArray = $responseStats->actions;
$facebookComment = $responseStatsArray['comment'];
$facebookLike = $responseStatsArray['like'];
$facebookLinkClick = $responseStatsArray['link_click'];
$facebookMention = $responseStatsArray['mention'];
$facebookOffsiteConversion = $responseStatsArray['offsite_conversion'];
$facebookPhotoView = $responseStatsArray['photo_view'];
$facebookPost = $responseStatsArray['post'];
$facebookPostLike = $responseStatsArray['post_like'];
$facebookUnlike = $responseStatsArray['unlike'];
$facebookVideoPlay = $responseStatsArray['video_play'];
$facebookVideoView = $responseStatsArray['video_view'];
$facebookPageEngagement = $responseStatsArray['page_engagement'];
$facebookPostEngagement = $responseStatsArray['post_engagement'];
$facebookCheckin = $responseStatsArray['checkin'];
$returnStats .= '
<strong style="display:block">'. $adSetName .'</strong>
<ul style="margin-left:40px">
<li>Comments: '. $facebookComment .'</li>
<li>Likes: '. $facebookLike .'</li>
<li>Link Click: '. $facebookLinkClick .'</li>
<li>Facebook Mention: '. $facebookMention .'</li>
<li>Facebook Offsite Conversion: '. $facebookOffsiteConversion .'</li>
<li>Facebook Photo View: '. $facebookPhotoView .'</li>
<li>Facebook Posts: '. $facebookPost .'</li>
<li>Facebook Post Like: '. $facebookPostLike .'</li>
<li>Facebook Post Unlike: '. $facebookUnlike .'</li>
<li>Facebook Video Play: '. $facebookVideoPlay .'</li>
<li>Facebook Video View: '. $facebookVideoView .'</li>
<li>Facebook Page Engagement: '. $facebookPageEngagement .'</li>
<li>Facebook Post Engagement: '. $facebookPostEngagement .'</li>
<li>Facebook Checkin: '. $facebookCheckin .'</li>
</ul>
';
}
}
}
}
echo $returnInsights;
echo $returnStats;
?>
P.S. I'm only using LAST_MONTH date preset temporarily as all accounts are currently paused...
Any and all recommendations are helpful. Thank you Stack community.
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire