2017-06-26 106 views
1

我正在構建一個小程序,它可以與各種API協同工作來自動化我們爲某些客戶提供的報告服務。Facebook營銷API和Ads Insight Access

我們報告的其中一件事是Facebook廣告表現。

我已經建立了使用Facebook營銷API &廣告洞察APi的https://developers.facebook.com/docs/marketing-apis

我已經通過建立一個Facebook的「應用」並獲得相關的應用程序令牌的整個過程走了這個程序。

但是,由於開發訪問權限只允許5個廣告帳戶,所以我遇到了困難。

要申請基本訪問權限,營銷API需要開發平臺和一大堆與我的程序無關的其他內容。我不是在構建傳統意義上公開發布的「應用程序」;相反,我只想在基本級別上集成這些API以自動執行一些內部任務。

看來令人難以置信的是,我無法做到這樣的事情,但這正是Facebook文檔似乎暗示的。

如果其他人熟悉這類問題,我很想知道是否有解決方法。

回答

2

Derks,我目前正在構建超過40個客戶端的儀表板,我能夠以基本的開發級別顯示他們的每個人和他們的洞察數據等。我有代碼,如果你想看一看,我現在想要做的事情就是製作一個日期範圍選擇器,但是,你非常歡迎看看我只是想得到一個大概的想法。

下面是從Facebook

使用對象
<?php 

     require_once __DIR__ . '/vendor/autoload.php'; 
     use FacebookAds\Api; 
     use FacebookAds\Object\AdUser; 
     use Facebook\Facebook; 
     use Facebook\Exceptions\FacebookResponseException; 
     use Facebook\Exceptions\FacebookSDKException; 
     use FacebookAds\Object\Campaign; 
     use FacebookAds\Object\Fields\AdsInsightsFields; 
     use FacebookAds\Object\Ad; 
     use FacebookAds\Object\Fields\AdSetFields; 
     use FacebookAds\Object\AdCampaign; 
     use FacebookAds\Object\Fields\AdFields; 
     use FacebookAds\Object\Fields; 
     use FacebookAds\Object\Fields\AdImageFields; 
     use FacebookAds\Object\AdAccount; 
     use FacebookAds\Object\AdSet; 
     use FacebookAds\Object\AdCreative; 
     use FacebookAds\Object\Fields\AdCreativeFields; 
     use FacebookAds\Object\Fields\AdCreativePhotoDataFields; 
     use FacebookAds\Object\AdCreativeLinkData; 
     use FacebookAds\Object\Fields\AdCreativeLinkDataFields; 
     use FacebookAds\Object\Fields\CampaignFields; 
     use FacebookAds\Object\Page; 
     use FacebookAds\Object\Fields\AdPreviewFields; 
     use FacebookAds\Object\Values\AdPreviewAdFormatValues; 
     use FacebookAds\Object\AdVideo; 
     ?> 

Here is the general code I am trying 

<?php 
     // Init PHP Sessions 
     session_start(); 

     $fb = new Facebook([ 
      'app_id' => 'xxxxxxxxx', 
      'app_secret' => 'xxxxxxxxxxx', 
     ]); 

     $helper = $fb->getRedirectLoginHelper(); 

     if (!isset($_SESSION['enter api key here'])) { 
      $_SESSION['enter api key here'] = null; 
     } 

     if (!$_SESSION['enter api key here']) { 
      $helper = $fb->getRedirectLoginHelper(); 
      try { 
      $_SESSION['enter api key here'] = (string) $helper->getAccessToken(); 
      } catch(FacebookResponseException $e) { 
      // When Graph returns an error 
      echo 'Graph returned an error: ' . $e->getMessage(); 
      exit; 
      } catch(FacebookSDKException $e) { 
      // When validation fails or other local issues 
      echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
      exit; 
      } 
     } 

     if ($_SESSION['enter api key here']) { 
      //echo "You are logged in!"; 

     // Initialize a new Session and instantiate an API object 
     Api::init(
      'xxxxxxxxx', // App ID 
      'xxxxxxxxx', //app_secret 
      $_SESSION['enter api key here'] // Your user access token 
     ); 

    ?> 
<div id="fbdata"></div> <?php 

    $account = new AdAccount('act_xxxxxxxxxx'); 


     $params = array(

     'date_preset'=> 'last_28d', 


      'thumbnail_width' => 200, 
      'thumbnail_height' => 150, 
      'level' => 'campaign', 
      'limit' => '15' 

     ); 

$fields = array(
    AdsInsightsFields::CAMPAIGN_NAME, 
    AdsInsightsFields::CAMPAIGN_ID, 
    AdsInsightsFields::IMPRESSIONS, 
    AdsInsightsFields::CLICKS, 
    AdsInsightsFields::REACH, 
    AdsInsightsFields::SPEND, 
    AdsInsightsFields::CPM, 
    AdsInsightsFields::CPC, 
    AdsInsightsFields::ACTIONS, 
); 

$field = array(
    AdCreativeFields::TITLE, 
    AdCreativeFields::THUMBNAIL_URL, 
    AdCreativeFields::BODY, 
); 

      $params1 = array(
      'time_range' => array(
      'since' => (new \DateTime($beginDate))->format('Y-m-d'), 
      'until' => (new \DateTime($lastDate))->format('Y-m-d'), 
     ), 
      'thumbnail_width' => 200, 
      'thumbnail_height' => 150, 
      'level' => 'ad', 
      'limit' => '5' 
     );  

$adcreatives = $account->getAdCreatives($field, $params1); 
?>  
     <table class="fbtable"> 
      <tr> 
       <th>Title</th> 
       <th>Ad Image</th> 
       <th>Ad Body</th> 
      </tr> 
      <?php 
foreach($adcreatives as $t2){ 

     echo"<tr> 
     <td>$t2->title</td> 
     <td><img src='$t2->thumbnail_url'/></td> 
     <td>$t2->body</td> 
    </tr>"; 
} 

     $insights = $account->getInsights($fields, $params);?> 

     <table class="fbtable"> 
      <tr> 
       <th>Campaign ID</th> 
       <th>Campaign Name</th> 
       <th>Impressions</th> 
       <th>Clicks</th> 
       <th>Reach</th> 
       <th>Spend</th> 
       <th>Total Actions</th> 
       <th>CPM</th> 
       <th>CPC</th> 
      </tr> 

      <?php 

foreach($insights as $i) { 
    $impress = number_format((float)$i->impressions); 
    $reach = number_format((float)$i->reach); 
    $totalAction = number_format((float)$i->actions); 
    $cpc = number_format($i->cpc, 2, '.', ''); 
    $cpm = number_format($i->cpm, 2, '.', ''); 
    echo"<tr class='fbtable'> 
     <td>$i->campaign_id</td> 
     <td>$i->campaign_name</td> 
     <td>$impress</td> 
     <td>$i->clicks</td> 
     <td>$reach</td> 
     <td>$$i->spend</td> 
     <td>$totalAction</td> 
     <td>$$cpm</td> 
     <td>$$cpc</td> 
    </tr>"; 
} 
     }else { 
      $permissions = ['ads_management']; 
      $loginUrl = $helper->getLoginUrl('http://where you want login to be.com', $permissions); 
      echo '<a href="' . $loginUrl . '">Log in with Facebook</a>'; 
     } 


?> 

我會幫助我所能@Derks,我相信你可能需要做的唯一事情是程序或任何建築物知道找出路誰是誰。

+0

是的,請。我有興趣看到這些代碼! – derks

+0

如果任何人都可以幫助使用日期範圍選擇器,那也會很棒。只要問@Derks是否需要幫助,我會很樂意提供幫助。我希望這個代碼能夠給你一些正確答案。 –

2

提交你的應用程序進行審查,以獲得超過10個廣告帳戶。使用網站的「平臺」。選擇本機或桌面應用程序;應用祕密不嵌入客戶端。其餘部分可能會被忽略,但是您需要包含應用程序的一些屏幕截圖以及它的工作原理和功能。一個真正的人將審查它,你可以在這裏得到Facebook開發人員組的幫助: https://www.facebook.com/groups/fbdevelopers

你會得到一個通過/失敗只...沒有評論。如果他們第一次拒絕,不要感到驚訝。不要重新提交,並希望第二次更好的迴應 - 他們最終會鎖定你幾天。向該組發佈幫助問題。

+0

我只是包含代碼的截圖? 'App'甚至沒有專用的GUI;它只是一個我正在運行的Python腳本。 如果他們第一次拒絕我,我只是運氣不好? – derks

+0

描述應用程序及其功能,以及腳本的輸出是什麼 - CSV文件?顯示一個小樣本。你越多地告訴他們他們如何暴露FB數據,他們越可能批准它。特別是,告訴他們是否寫入任何端點,以及您正在做什麼來防止速率限制和錯誤處理。他們需要感到舒服,您將成爲一名優秀的API用戶。 –