php - Googleads PHP API 如何设置访问权限?
问题描述
我感觉完全迷失在一个文档链接的圈子中,没有任何东西给我我需要的答案。
我想要实现的目标很简单,点击 API 端点并获取活动的关键数据(每次点击费用、点击次数、展示次数、成本等)。这可能会在 cron 上设置为每周运行。
在此处查看 Github 页面https://github.com/googleads/googleads-php-lib它会将您发送到此链接,以代表您的客户设置 API 访问(网络流)https://github.com/googleads /googleads-php-lib/wiki/API-access-on-behalf-of-your-clients-(网络流)
我已经按照上面的说明创建了一个 adwords 客户端 ID 和客户端密码,但是接下来的步骤是要求将用户重定向到登录页面以确认访问?
无论如何,这是否存在,因为它根本无法在 cron 上工作以每周一次提取一些数据,用户将不得不手动执行此操作。
解决方案
您必须为 api 访问设置 OAuth2,您应该按照这些说明进行操作。
所以现在你已经adsapi_php.ini
配置了你的凭据,它允许你查询 api。
然后您可以使用php sdk
来执行查询:
$dir = '/adsapi_php.ini' // the path of your .ini file;
require '/vendor/autoload.php' // load the sdk;
use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSession;
use Google\AdsApi\AdWords\AdWordsSessionBuilder;
... // load what you need
$oAuth2Credential = (new OAuth2TokenBuilder())
->fromFile($dir)
->build();
$session = (new AdWordsSessionBuilder())
->fromFile()
->withOAuth2Credential($oAuth2Credential)
->build();
$adWordsServices = new AdWordsServices();
以上只是一个示例,我建议在github上查看更详细和有效的示例。
编辑
要获得有关一个广告系列的统计信息,您必须执行Criteria performance report。
这是我通常使用的代码示例:(请注意,这是大型应用程序的一部分,可能无法直接使用)。它为活动生成上周的报告。
$dir = 'path/to/adsapi_php.ini';
require 'path/to/vendor/autoload.php';
use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSession;
use Google\AdsApi\AdWords\AdWordsSessionBuilder;
use Google\AdsApi\AdWords\v201802\cm\AdGroupService;
use Google\AdsApi\AdWords\v201802\cm\AdGroupAdService;
use Google\AdsApi\AdWords\v201802\cm\OrderBy;
use Google\AdsApi\AdWords\v201802\cm\PolicyApprovalStatus;
use Google\AdsApi\AdWords\v201802\cm\SortOrder;
use Google\AdsApi\AdWords\v201802\cm\Paging;
use Google\AdsApi\AdWords\v201802\cm\ExpandedTextAd;
use Google\AdsApi\AdWords\v201802\cm\AdGroupAdOperation;
use Google\AdsApi\AdWords\v201802\cm\AdType;
use Google\AdsApi\AdWords\v201802\cm\AdGroupAdStatus;
use Google\AdsApi\AdWords\Reporting\v201802\DownloadFormat;
use Google\AdsApi\AdWords\Reporting\v201802\ReportDefinition;
use Google\AdsApi\AdWords\Reporting\v201802\ReportDefinitionDateRangeType;
use Google\AdsApi\AdWords\Reporting\v201802\ReportDownloader;
use Google\AdsApi\AdWords\ReportSettingsBuilder;
use Google\AdsApi\AdWords\v201802\cm\Predicate;
use Google\AdsApi\AdWords\v201802\cm\PredicateOperator;
use Google\AdsApi\AdWords\v201802\cm\ReportDefinitionReportType;
use Google\AdsApi\AdWords\v201802\cm\Selector;
use Google\AdsApi\AdWords\v201802\cm\DateRange;
use Google\AdsApi\Common\OAuth2TokenBuilder;
$oAuth2Credential = (new OAuth2TokenBuilder())
->fromFile($dir)
->build();
$adWordsServices = new AdWordsServices();
$session = (new AdWordsSessionBuilder())
->fromFile()
->withOAuth2Credential($oAuth2Credential)
->withClientCustomerId($accountId)
->build();
getaveragestats($oAuth2Credential, $session,$accountId,$campaignid,$campaingname);
function getaveragestats($oAuth2Credential, $session,$accountId,$campaignid,$campaingname){
$oneweekago = strtotime("-1 week");
$oneweekAgo = date("Ymd",$oneweekago);
$datefrom = $oneweekAgo;
$dateto = date("Ymd");
$selector = new Selector();
$selector->setDateRange(new DateRange($datefrom, $dateto));
$selector->setFields(['Date','Impressions','AveragePosition','AverageCpc']);
$selector->setPredicates([
new Predicate('CampaignId', PredicateOperator::IN, [$campaignid])]);
$reportDefinition = new ReportDefinition();
$reportDefinition->setSelector($selector);
$reportDefinition->setReportName('Report per la campagna #' . $campaignid);
$reportDefinition->setDateRangeType(ReportDefinitionDateRangeType::CUSTOM_DATE);
$reportDefinition->setReportType(ReportDefinitionReportType::CAMPAIGN_PERFORMANCE_REPORT);
$reportDefinition->setDownloadFormat(DownloadFormat::CSV);
// Download report.
$reportDownloader = new ReportDownloader($session);
$reportSettingsOverride = (new ReportSettingsBuilder())
->includeZeroImpressions(false)
->build();
$reportDownloadResult = $reportDownloader->downloadReport($reportDefinition, $reportSettingsOverride);
$reportAsString = $reportDownloadResult->getAsString();
$your_array = array_filter(explode("\n",$reportAsString));
$titolo = $your_array[0];
$rowNames = $your_array[1];
$rowNames = explode(",", $rowNames);
$total = end($your_array);
$tot = explode(",", $total);
$result = [];
for ($x = 2; $x < (count($your_array)-1); $x++) {
$row = explode(",", $your_array[$x]);
$tmp = array(
'data'=>$row[0],
'impressions'=>$row[1],
'position'=>$row[2],
'cpc'=> intval($row[3])/100000
);
$result[]=$tmp;
}
function sortFunction( $a, $b ) {
return strtotime($a["data"]) - strtotime($b["data"]);
}
$avrg = getAverage($result);
return $avrg
}
推荐阅读
- kubernetes - helm cockroachdb GKE - 音量已满且不可调整大小
- arrays - Node js REST Service mongodb distinct 数组为空
- c# - 如果你在顶级类中有 :base() 会发生什么?
- php - 为什么全局变量不需要初始化?
- r - louvain社区检测中检查节点属于哪个社区
- jquery - 使用航点向下滚动到 div 时突出显示导航链接
- c# - 为什么 Task[from metadata] 没有列出公共属性 CompletedTask?
- python - 如何从现有列表创建字典?键值必须是该键的重复次数
- javascript - Vue全局过滤器抛出未定义值的错误
- dart - 删除时如何使FAB动画出来?