2017-06-26 72 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用户。 –