I use the official website laravel demo code, and the screenshot cannot be taken. The core code is as follows:
public function getAgeRangeReporting(GoogleAdsClient $googleAdsClient, $customer_id,?string $customer_name,$report_type=0)
{
if($report_type==1){
//get gender report
$sql = "SELECT gender_view.resource_name, segments.date, metrics.average_cost, metrics.average_cpc, metrics.active_view_cpm, metrics.conversions, metrics.conversions_value, metrics.clicks, metrics.ctr, metrics.impressions, ad_group_criterion.gender.type FROM gender_view WHERE segments.date = '{$this->date}'";
}else if($report_type==2){
//get geo report
$sql = "SELECT
ad_group.id,geographic_view.resource_name, segments.geo_target_province, segments.geo_target_region, segments.geo_target_city, segments.geo_target_county, segments.geo_target_postal_code,segments.date, metrics.average_cost, metrics.average_cpc, metrics.conversions, metrics.conversions_value, metrics.clicks, metrics.ctr, metrics.impressions FROM geographic_view WHERE segments.date = '{$this->date}'";
}else{
//get age report
$sql =
'SELECT age_range_view.resource_name,'
. "segments.date,"
. "metrics.average_cost,"
. "metrics.average_cpc,"
. "metrics.active_view_cpm,"
. "metrics.conversions,"
. "metrics.conversions_value,"
. "metrics.ctr,"
. "metrics.impressions,"
. "metrics.clicks,ad_group_criterion.age_range.type "
. 'FROM age_range_view '
. "WHERE segments.date = '{$this->date}'";
}
// echo $sql."\r\n";
try {
$this->adsSql($googleAdsClient, $customer_id, $sql, function ($result) use ($customer_id, $customer_name,$report_type) {
/** @var GoogleAdsServerStreamDecorator $result */
foreach ($result->iterateAllElements() as $googleAdsRow) {
/** @var GoogleAdsRow $googleAdsRow */
$age_range_view = $report_type==1?$googleAdsRow->getGenderView():$googleAdsRow->getAgeRangeView();
if($report_type==2){
$age_range_view =$googleAdsRow->getGeographicView();
}
$resource_name = $age_range_view->getResourceName();
$segments = $googleAdsRow->getSegments();
$metrics = $googleAdsRow->getMetrics();
$group_info =
explode('/', $resource_name);
$group_data =
explode('~', $group_info[3]);
if($report_type==2){
$group_id = $googleAdsRow->getAdGroup()->getId();
}else{
$group_id = $group_data[0];
}
$money = 0;
$average_cpc =
round($metrics->getAverageCpc() / 1000000, 2);
if ($metrics->getClicks() > 0 && $average_cpc > 0) {
$money =
round($average_cpc * $metrics->getClicks(), 2);
}
$conversions = $metrics->getConversions();
$clicks = $metrics->getClicks();
$conversions_ctr = 0;
if ($clicks > 0 && $conversions > 0) {
$conversions_ctr =
round(($conversions / $clicks) * 100, 2);
}
$group_info = DB::
connection('mysql_ads')->table('group')->where('group_id', $group_id)->first(['group_name', 'customer_name']);
$metrics_data = [
'group_id' => $group_id,
'group_name' => $group_info->group_name,
'customer_id' => $customer_id,
'customer_name' => $group_info->customer_name,
'criterion_id' => $group_data[1],
'average_cost' =>
round($metrics->getAverageCost() / 1000000, 2),
'average_cpc' =>
round($metrics->getAverageCpc() / 1000000, 2),
'active_view_cpm' => !empty($metrics->getActiveViewCpm())?
round($metrics->getActiveViewCpm() / 1000000, 2):0,
'conversions' => $conversions,
'conversions_value' => $metrics->getConversionsValue(),
'conversions_ctr' => $conversions_ctr,
'ctr' =>
round($metrics->getCtr() * 100, 2),
'clicks' => $metrics->getClicks(),
'impressions' => $metrics->getImpressions(),
'cost' => $money,
'historical_creative_quality_score' => $metrics->getHistoricalCreativeQualityScore(),
'historical_quality_score' => $metrics->getHistoricalQualityScore(),
'historical_landing_page_quality_score' => $metrics->getHistoricalLandingPageQualityScore(),
'historical_search_predicted_ctr' => $metrics->getHistoricalSearchPredictedCtr(),
'date' => $segments->getDate(),
'report_type' =>$report_type
];
if($report_type ==1){
$group_criterion = $googleAdsRow->getAdGroupCriterion();
//Google\Ads\GoogleAds\V8\Enums\GenderTypeEnum\GenderType
$gender = $group_criterion->getGender();
if($gender){
$gender_type = $gender->getType();
$metrics_data['gender_type'] = (int)$gender_type;
}
}else if($report_type == 2){
$city = $segments->getGeoTargetCity();
if($city){
$arr =
explode('/',$city);
$metrics_data['city'] = $arr[
count($arr)-1];
}
$province = $segments->getGeoTargetProvince();
if($province){
$arr =
explode('/',$province);
$metrics_data['province'] = $arr[
count($arr)-1];
}
}else{
$group_criterion = $googleAdsRow->getAdGroupCriterion();
//Google\Ads\GoogleAds\V8\Enums\AgeRangeTypeEnum\AgeRangeType
$age = $group_criterion->getAgeRange();
if($age){
$age_type = $age->getType();
$metrics_data['age_range_type'] = (int)$age_type;
}
}
DB::
connection('mysql_ads')->table('group_age_rang')->updateOrInsert(
['group_id' => $group_id, 'criterion_id' => $group_data[1],'date'=>$this->date],
$metrics_data
);
}
});
} catch (\Exception $e) {
$error_data =
json_decode($e->getMessage(), true);
echo $customer_id . 'get account age resource error' . $e->getMessage() . '--' . $e->getFile() . $e->getLine() .
PHP_EOL;
if ($error_data['status'] === 'PERMISSION_DENIED') {
DB::
connection('mysql_ads')->table('account')->where('customer_id', $customer_id)->update(['is_cancel' => 0]);
}
}
}