mardi 4 août 2015

Facebook Ads API message '(#17) User request limit reached'

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