linccce

Ad publishing

Jul 15th, 2016
460
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 16.49 KB | None | 0 0
  1. <?php
  2.     /**
  3.      * @package   ImpressPages
  4.      */
  5.  
  6.  
  7.     namespace Plugin\Advertising;
  8.  
  9.     use Ip\Response;
  10.     use Ip\Request;
  11.     use Facebook;
  12.     use FacebookAds\Api;
  13.     use FacebookAds\Object;
  14.  
  15.     ini_set('display_errors', 1);
  16.     error_reporting(E_ALL);
  17.  
  18.     // The Api object is now available trough singleton
  19.  
  20.     class SiteController extends \Ip\Controller
  21.     {
  22.         private $access_token;
  23.         private $app_id = '1147231458632127';
  24.         private $app_secret = '124aa5f6f7de35c208d8339e0572ab49';
  25.         static $fb_params;
  26.         public $fb_instance;
  27.         public $requests;
  28.         private $my_facebook_id;
  29.  
  30.         public function __construct()
  31.         {
  32.             $this->setFacebookParams();
  33.             $this->fb_instance = new Facebook\Facebook(static::$fb_params);
  34.             $this->requests = new Request();
  35.             if (isset($_SESSION['facebook_access_token'])) {
  36.                 $this->access_token = $_SESSION['facebook_access_token'];
  37.             } else {
  38.                 $this->access_token = 'EAAQTZAqORIb8BAJCKL0bRv4wWZC7EWpu4V3Hqwuiviqv8qmyIc8kw5h56b6hLsxuJr03S6jFZAcK6tH9mxGP3kWkJwxQpglzzji6iM7Fu71Tn2AJLWhDT5LOV8Ov0xrb6GXNwrjwdZB8iDbVM0HLeDuqSgh9cos1R2S0Y4TmIwZDZD';
  39.             }
  40.         }
  41.  
  42.         private function setFacebookParams()
  43.         {
  44.             static::$fb_params = [
  45.                 'app_id' => $this->app_id,
  46.                 'app_secret' => $this->app_secret,
  47.                 'default_graph_version' => 'v2.5',
  48.             ];
  49.         }
  50.  
  51.         public function AdvertisingList()
  52.         {
  53.             ipResponse()->setTitle(__('Lead list', 'Advertising', false));
  54.  
  55.             if (is_null($this->access_token)) {
  56.                 $this->redirectToAdvertisingLogin();
  57.             } else {
  58.                 $this->AdvertisingPerformFacebookAdsApiAuthentication();
  59.             }
  60.  
  61.             /*return ipView('view/advertisingList.php', [
  62.                 'advertisingList' => array(),
  63.                 'searchOptions' => array(),
  64.                 'advertisingStatuses' => array(),
  65.                 'pageSize' => array(),
  66.                 'paginator' => array(),
  67.             ])->render();*/
  68.         }
  69.  
  70.         /***************************
  71.          * Redirect methods block
  72.          ***************************/
  73.  
  74.         private function header302()
  75.         {
  76.             header('HTTP/1.1 302 Found');
  77.         }
  78.  
  79.         private function redirectToAdvertisingList()
  80.         {
  81.             $this->header302();
  82.             header('Location: http://portal.automote.local/AdvertisingList');
  83.         }
  84.  
  85.         private function redirectToAdvertisingLogin()
  86.         {
  87.             $this->header302();
  88.             header('Location: http://portal.automote.local/AdvertisingLogin');
  89.         }
  90.  
  91.         /*******************************
  92.          * End of redirect methods block
  93.          *******************************/
  94.  
  95.         /*****************************
  96.          * Facebook Login Block
  97.          *****************************/
  98.  
  99.         public function AdvertisingLogin()
  100.         {
  101.             $helper = $this->fb_instance->getRedirectLoginHelper();
  102.  
  103.             $permissions = ['ads_management', 'read_insights']; // optional
  104.             $loginUrl = $helper->getLoginUrl('http://portal.automote.local/AdvertisingLoginCallback', $permissions);
  105.  
  106.             ob_start();
  107.             ?>
  108.             <div class="container">
  109.                 <div class="well-lg">
  110.                     <div class="panel-group">
  111.                         <div class="panel panel-default">
  112.                             <div class="panel-body">Facebook Authentication</div>
  113.                         </div>
  114.                         <div class="panel panel-default">
  115.                             <div class="panel-body">
  116.                                 <a href='<?php echo $loginUrl ?>' class='btn btn-default'><span class='glyphicon glyphicon-log-in'></span> Log in with Facebook!</a>
  117.                             </div>
  118.                         </div>
  119.                     </div>
  120.                 </div>
  121.             </div>
  122.             <?php
  123.             echo ob_get_clean();
  124.         }
  125.  
  126.         public function AdvertisingLoginCallback()
  127.         {
  128.  
  129.             $helper = $this->fb_instance->getRedirectLoginHelper();
  130.             try {
  131.                 $accessToken = $helper->getAccessToken();
  132.             } catch (Facebook\Exceptions\FacebookResponseException $e) {
  133.                 // When Graph returns an error
  134.                 if ($e->getMessage() == 'This authorization code has been used.') {
  135.                     $this->redirectToAdvertisingList();
  136.                 } else {
  137.                     echo 'Graph returned an error: ' . $e->getMessage();
  138.                     exit;
  139.                 }
  140.             } catch (Facebook\Exceptions\FacebookSDKException $e) {
  141.                 // When validation fails or other local issues
  142.                 echo 'Facebook SDK returned an error: ' . $e->getMessage();
  143.                 exit;
  144.             }
  145.  
  146.             if (isset($accessToken)) {
  147.                 // Logged in!
  148.                 $_SESSION['facebook_access_token'] = $this->AdvertisingExtendingFacebookToken((string)$accessToken);
  149.  
  150.                 $this->access_token = $_SESSION['facebook_access_token'];
  151.  
  152.                 if (!is_null($this->access_token)) {
  153.                     $this->redirectToAdvertisingList();
  154.                 }
  155.                 // Now you can redirect to another page and use the
  156.                 // access token from $_SESSION['facebook_access_token']
  157.             }
  158.         }
  159.  
  160.         private function AdvertisingExtendingFacebookToken($token)
  161.         {
  162.             // OAuth 2.0 client handler
  163.             $oAuth2Client = $this->fb_instance->getOAuth2Client();
  164.  
  165. // Exchanges a short-lived access token for a long-lived one
  166.             return $oAuth2Client->getLongLivedAccessToken($token);
  167.         }
  168.  
  169.         /*******************************
  170.          * End of Facebook Login Block
  171.          ******************************/
  172.  
  173.         /*****************************
  174.          * Facebook Ads Authentication Block
  175.          *****************************/
  176.  
  177.         public function AdvertisingPerformFacebookAdsApiAuthentication()
  178.         {
  179.  
  180.             $marketing_api_access_token =
  181.                 'EAAQTZAqORIb8BAIiHgpLIFqDERUGBZC2Tnn95MLNhapZC4vwEOg9zzZAIP99pAaGfxv23Me99h7lYsQMV5IfVxi5MzkAn4kTAP2sO7N7zKt3uKxyrykhz3eJby0MCINF6vuH5JQAMPWE3KSDBJcmeMGtTzQyuTKovgC0yzxNowZDZD';
  182.  
  183.             Api::init($this->app_id, $this->app_secret, $marketing_api_access_token);
  184.             $api = Api::instance();
  185.  
  186.             // Add to header of your file
  187.  
  188. // Add after Api::init()
  189.             $me = new Object\AdAccountUser('me');
  190.             $my_adaccount = $me->getAdAccounts()->current();
  191.             $account_user_data = $my_adaccount->getData(); //returns array $$my_account_data['id'] - returns ad account id
  192.  
  193.             //Getting List of Account data
  194.  
  195.             //$reflection_class = new \ReflectionClass("\FacebookAds\Object\Fields\AdAccountFields"); //Preparing reflection class for description of target class
  196.  
  197.             $account = new Object\AdAccount($account_user_data['id']); // Getting AdAccount instance
  198.             $fields = array(
  199.                 Object\Fields\AdAccountFields::ID,
  200.                 Object\Fields\AdAccountFields::NAME,
  201.                 Object\Fields\AdAccountFields::MIN_CAMPAIGN_GROUP_SPEND_CAP,
  202.             );
  203.             $ad_account_data = $account->read($fields)->getData(); //Getting all constants from target class ($reflection_class->getConstants())
  204.             /*echo "<pre>";
  205.             var_dump($data);  //Dumping all possible account data
  206.             echo "</pre>";*/
  207.  
  208.             // Creating test ad set
  209.             //$this->my_facebook_id = $this->fb_instance->get('/me?fields=id', $this->access_token)->getDecodedBody()['id'];
  210.  
  211.             $campaign = new Object\Campaign(null, $ad_account_data['id']);
  212.  
  213.             /*
  214.              * Getting list of created campaigns
  215.              * possible fields:
  216.              * id,account_id,adlabels,buying_type,can_use_spend_cap,configured_status,created_time,effective_status,name,objective,recommendations,spend_cap,start_time,status,stop_time,updated_time,adsets,ads,insights,stats
  217.              */
  218.  
  219.             $request = $this->fb_instance->get(
  220.                 "/$ad_account_data[id]/campaigns?fields=id,name,account_id,adlabels,buying_type,objective,created_time,start_time,effective_status,configured_status",
  221.                 $marketing_api_access_token,
  222.                 null,
  223.                 'v2.7'
  224.             )->getDecodedBody();
  225.  
  226.             $head = "";
  227.             $body = "";
  228.             $i = 0;
  229.             foreach ($request['data'] as $data) {
  230.                 if ($i == 0) {
  231.                     $head = "<tr><td>" . join("</td><td>", array_flip($data)) . "</td></tr>";
  232.                 }
  233.                 $body .= "<tr><td>" . join("</td><td>", $data) . "</td></tr>";
  234.                 $i++;
  235.             }
  236.  
  237.             echo <<<HTML
  238.             <div class="container">
  239.              <div class="well">
  240.                 <h3>List of created campaigns</h3>
  241.                 <table class="table table-bordered">
  242.                 <thead>
  243.            $head    
  244. </thead>
  245. <tbody>
  246.     $body
  247. </tbody>
  248. </table>
  249. </div>
  250. </div>
  251. HTML;
  252.  
  253.             /*
  254.              *  End of created campaigns list
  255.              */
  256.  
  257.             /*
  258.              * Query to create campaign
  259.              */
  260.  
  261.             $create_campaign = false;
  262.  
  263.             if ($create_campaign) {
  264.  
  265.                 $campaign->setData(array(
  266.                     Object\Fields\CampaignFields::NAME => 'My campaign',
  267.                     Object\Fields\CampaignFields::OBJECTIVE => Object\Values\CampaignObjectiveValues::LINK_CLICKS,
  268.                 ));
  269.  
  270.                 $campaign->create(array(
  271.                     Object\Campaign::STATUS_PARAM_NAME => Object\Campaign::STATUS_PAUSED
  272.                 ));
  273.  
  274.             }
  275.  
  276.             /*
  277.              * End of create campaign query
  278.              */
  279.  
  280.             // Search for targeting topic
  281.             $result = Object\TargetingSearch::search(
  282.                 Object\Search\TargetingSearchTypes::INTEREST,
  283.                 null,
  284.                 'cars sell')->getArrayCopy();
  285.             $result = current($result)->getData();
  286.  
  287.  
  288.             $thead = "<tr><th>" . implode("</th><th>", array_flip($result)) . "</th></tr>";
  289.             $tbody = "<tr><td>" . implode("</td><td>", $result) . "</td></tr>";
  290.  
  291.             echo <<<HTML
  292.             <div class="container">
  293.              <div class="well">
  294.                 <h3>List to intrests</h3>
  295.                 <table class="table table-bordered">
  296.                 <thead>
  297.                
  298.            $thead    
  299. </thead>
  300. <tbody>
  301.     $tbody
  302. </tbody>
  303. </table>
  304. </div>
  305. </div>
  306. HTML;
  307.  
  308.             $start_time = (new \DateTime("+1 week"))->format(\DateTime::ISO8601);
  309.             $end_time = (new \DateTime("+2 week"))->format(\DateTime::ISO8601);
  310.  
  311.             // Creating AdSet
  312.             $adset = new Object\AdSet(null, $ad_account_data['id']);
  313.             $adset->setData(array(
  314.                 Object\Fields\AdSetFields::NAME => 'My Ad Set',
  315.                 Object\Fields\AdSetFields::OPTIMIZATION_GOAL => Object\Values\AdSetOptimizationGoalValues::REACH,
  316.                 Object\Fields\AdSetFields::BILLING_EVENT => Object\Values\AdSetBillingEventValues::IMPRESSIONS,
  317.                 Object\Fields\AdSetFields::BID_AMOUNT => 2,
  318.                 Object\Fields\AdSetFields::DAILY_BUDGET => 1000,
  319.                 Object\Fields\AdSetFields::CAMPAIGN_ID => current($request['data'])['id'],
  320.                 //Only test settings gazilions of them left out... Seems like endless possibilities
  321.                 Object\Fields\AdSetFields::TARGETING => (new Object\Targeting())->setData(array(
  322.                     Object\Fields\TargetingFields::GEO_LOCATIONS => array(
  323.                         'countries' => array('US'),
  324.                     ),
  325.                     Object\Fields\TargetingFields::INTERESTS => array_flip(
  326.                         $result['name']
  327.                     )
  328.                 )),
  329.                 Object\Fields\AdSetFields::START_TIME => $start_time,
  330.                 Object\Fields\AdSetFields::END_TIME => $end_time,
  331.             ));
  332.             $adset->create(array(
  333.                 Object\AdSet::STATUS_PARAM_NAME => Object\AdSet::STATUS_PAUSED,
  334.             ));
  335.  
  336.             // Hashing image
  337.             $image = new Object\AdImage(null, $ad_account_data['id']);
  338.             $image->{Object\Fields\AdImageFields::FILENAME} = ipFile('file/repository/car.jpg');
  339.  
  340.             $image->create();
  341.             $image_hash = $image->{Object\Fields\AdImageFields::HASH} . PHP_EOL;
  342.             echo 'Image Hash: ' . $image_hash;
  343.  
  344.             // Creating ad
  345.             $link_data = new Object\AdCreativeLinkData();
  346.             $link_data->setData(array(
  347.                 Object\Fields\AdCreativeLinkDataFields::MESSAGE => 'try it out',
  348.                 Object\Fields\AdCreativeLinkDataFields::LINK => "http://".$_SERVER['HTTP_HOST'],
  349.                 Object\Fields\AdCreativeLinkDataFields::CAPTION => 'My caption',
  350.                 Object\Fields\AdCreativeLinkDataFields::IMAGE_HASH => $image_hash,
  351.             ));
  352.  
  353.             $object_story_spec = new Object\AdCreativeObjectStorySpec();
  354.             $object_story_spec->setData(array(
  355.                 Object\Fields\AdCreativeObjectStorySpecFields::PAGE_ID => '456163157907793',
  356.                 Object\Fields\AdCreativeObjectStorySpecFields::LINK_DATA => $link_data,
  357.             ));
  358.  
  359.             $creative = new Object\AdCreative(null, $ad_account_data['id']);
  360.  
  361.             $creative->setData(array(
  362.                 Object\Fields\AdCreativeFields::NAME => 'Sample Creative',
  363.                 Object\Fields\AdCreativeFields::OBJECT_STORY_SPEC => $object_story_spec,
  364.             ));
  365.  
  366.             $creative->create();
  367.  
  368.             /*$data = array(
  369.                     Object\AdFields::NAME => 'My Ad',
  370.                     Object\AdFields::ADSET_ID => <AD_SET_ID>,
  371.   AdFields::CREATIVE => array(
  372.             'creative_id' => <CREATIVE_ID>,
  373.   ),
  374. );
  375.  
  376. $ad = new Object\Ad(null, 'act_<AD_ACCOUNT_ID>');
  377. $ad->setData($data);
  378. $ad->create(array(
  379.     Object\Ad::STATUS_PARAM_NAME => Ad::STATUS_PAUSED,
  380. ));*/
  381.  
  382.  
  383.             echo "<pre>";
  384.             var_dump($creative->getData());
  385.             echo "</pre>";
  386.  
  387.  
  388.             /*if ($this->requests->isPost() && $should_authenticate = $this->requests->getRequest('do_ads_authentication')) {
  389.                 if ($should_authenticate == "yes") {*/
  390.             //    }
  391.             /*} else {
  392.  
  393.                 // Create a form object
  394.                 $form = new \Ip\Form();
  395.                 // Add a text field to form object
  396.                 $do_ads_authentidation_hidden_input = new \Ip\Form\Field\Hidden(
  397.                     array(
  398.                         'name' => 'do_ads_authentication', // HTML "name" attribute
  399.                         'value' => 'yes', // HTML "name" attribute
  400.                     ));
  401.                 $field = new \Ip\Form\Field\Submit(
  402.                     array(
  403.                         'name' => 'submit_auth_request', // HTML "name" attribute
  404.                         'value' => "Authenticate Ads Access!", // Field label that will be displayed next to input field
  405.                     ));
  406.                 $form->addField($do_ads_authentidation_hidden_input);
  407.                 $form->addField($field);
  408.                 $form->setAction(ipConfig()->baseUrl() . 'AdvertisingPerformFacebookAdsApiAuthentication');
  409.                 $form->setAjaxSubmit(false);
  410.                 $formHtml = $form->render();
  411.  
  412.                 ob_start();
  413.                 ?>
  414.                 <div class="container">
  415.                     <div class="well-lg">
  416.                         <div class="panel-group">
  417.                             <div class="panel panel-default">
  418.                                 <div class="panel-body">Facebook Ads Authentication</div>
  419.                             </div>
  420.                             <div class="panel panel-default">
  421.                                 <div class="panel-body">
  422.                                     <?php echo $formHtml ?>
  423.                                 </div>
  424.                             </div>
  425.                         </div>
  426.                     </div>
  427.                 </div>
  428.                 <?php
  429.                 echo ob_get_clean();
  430.             }*/
  431.         }
  432.  
  433.         /*****************************
  434.          * End Facebook Ads Authentication Block
  435.          *****************************/
  436.  
  437.     }
Advertisement
Add Comment
Please, Sign In to add comment