Google Adwords API集成(V201708 / V201710)与Code Igniter 2.x

问题描述 投票:0回答:1

对于Google adwords API,我使用过this library,它的工作正常。但我无法将此库与CI 2.x集成。

一些代码片段是:

    if (!defined('BASEPATH')) exit('No direct script access allowed');

    define('SRC_PATH', APPPATH.'/third_party/Adwords/src/');
    define('COMMON_PATH', 'Google/AdsApi/Common/');
    define('ADWORDS_PATH', 'Google/AdsApi/AdWords/');
    define('ADWORDS_VERSION', 'v201710');

    // Configure include path
    ini_set('include_path', implode(array(
        ini_get('include_path'), PATH_SEPARATOR, SRC_PATH))
      );

    // Include the AdWordsUser file


    require_once SRC_PATH.ADWORDS_PATH. '/AdWordsSessionBuilder.php';
    require_once SRC_PATH.ADWORDS_PATH. '/Reporting/v201710/DownloadFormat.php';
    require_once SRC_PATH.ADWORDS_PATH. '/Reporting/v201710/ReportDefinition.php';
    require_once SRC_PATH.ADWORDS_PATH. '/Reporting/v201710/ReportDefinitionDateRangeType.php';
    require_once SRC_PATH.ADWORDS_PATH. '/Reporting/v201710/ReportDownloader.php';
   require_once SRC_PATH.ADWORDS_PATH. '/ReportSettingsBuilder.php';
   require_once SRC_PATH.ADWORDS_PATH. '/v201710/cm/Predicate.php';
   require_once SRC_PATH.ADWORDS_PATH. '/v201710/cm/PredicateOperator.php';
   require_once SRC_PATH.ADWORDS_PATH. '/v201710/cm/ReportDefinitionReportType.php';
   require_once SRC_PATH.ADWORDS_PATH. '/v201710/cm/Selector.php';
   require_once SRC_PATH.COMMON_PATH. '/OAuth2TokenBuilder.php';


    class My_adwords {
    }

获得以下致命错误:

Fatal error: Interface 'Google\AdsApi\Common\AdsBuilder' not found in /var/www/html/crm2017/application/third_party/Adwords/src/Google/AdsApi/AdWords/AdWordsSessionBuilder.php on line 38

请提出一些最佳解决方案。

php codeigniter-2 google-adwords
1个回答
0
投票
<?php  
//namespace Google\AdsApi\Examples\AdWords\v201710\Reporting;
if (!defined('BASEPATH')) exit('No direct script access allowed');

    require __DIR__ . '/../third_party/Googleadwords/googleads-php-lib/vendor/autoload.php';
    use Google\AdsApi\AdWords\AdWordsSession;
    use Google\AdsApi\AdWords\AdWordsSessionBuilder;
    use Google\AdsApi\AdWords\Reporting\v201710\ReportDownloader;
    use Google\AdsApi\AdWords\Reporting\v201710\DownloadFormat;
    use Google\AdsApi\AdWords\ReportSettingsBuilder;
    use Google\AdsApi\Common\OAuth2TokenBuilder;    
    use Google\AdsApi\AdWords\v201710\cm\ReportDefinitionReportType;
    use Google\AdsApi\AdWords\v201710\cm\ReportDefinitionService;
    use Google\AdsApi\AdWords\v201710\cm\CampaignCriterionService;
    use Google\AdsApi\AdWords\v201710\cm\Predicate;
    use Google\AdsApi\AdWords\v201710\cm\PredicateOperator;
    use Google\AdsApi\AdWords\v201710\cm\Paging;
    use Google\AdsApi\AdWords\v201710\cm\Selector;     
    use Google\AdsApi\AdWords\v201710\cm\BiddingStrategyConfiguration;
    use Google\AdsApi\AdWords\v201710\cm\BiddingStrategyType;

class My_adwords {
    public function __construct() { 
     //$oAuth2Credential = new OAuth2TokenBuilder();
    }

 function GetCampaignsCost() {
   // Get the service, which loads the required classes.
   $oAuth2Credential = (new OAuth2TokenBuilder())
        ->fromFile()
        ->build();

    // See: AdWordsSessionBuilder for setting a client customer ID that is
    // different from that specified in your adsapi_php.ini file.
    // Construct an API session configured from a properties file and the OAuth2
    // credentials above.
    $session = (new AdWordsSessionBuilder())
        ->fromFile()
        ->withOAuth2Credential($oAuth2Credential)
        ->build();

    $reportFormat = DownloadFormat::CSV;
    $reportQuery = 'SELECT Cost,CampaignId,BiddingStrategyType,CampaignName FROM CAMPAIGN_PERFORMANCE_REPORT DURING YESTERDAY';

    // Download report as a string.
    $reportDownloader = new ReportDownloader($session);
    $reportSettingsOverride = (new ReportSettingsBuilder())
        ->includeZeroImpressions(false)
        ->build();
    $reportDownloadResult = $reportDownloader->downloadReportWithAwql(
        $reportQuery, $reportFormat, $reportSettingsOverride);
    $data = $reportDownloadResult->getAsString();
}
}

我使用use而不是require_once。只需包含一次库并使用需要的类。我已经完成了以下步骤:

  1. Composer在CodeIgniter之外运行,所有依赖项都通过composer进行调整,并将相同的文件夹放在application / third_party中。
  2. 在应用程序/库中创建一个与third_party交互的类。上面的代码段属于库类。
  3. 在库中加载库和调用库的函数。

因此解决了。

© www.soinside.com 2019 - 2024. All rights reserved.