Google-Ads-AdWords-Client
view release on metacpan or search on metacpan
examples/v201809/optimization/estimate_keyword_traffic.pl view on Meta::CPAN
$platform_estimate->get_minEstimate(),
$platform_estimate->get_maxEstimate());
}
}
if ($campaign_estimate->get_adGroupEstimates()) {
my $keyword_estimates =
$campaign_estimate->get_adGroupEstimates()->[0]
->get_keywordEstimates();
for (my $i = 0 ; $i < scalar(@{$keyword_estimates}) ; $i++) {
# Negative keywords don't generate estimates but instead affect
# estimates of your other keywords, the following condition just
# skips printing out estimates for a negative keyword.
if ($keyword_estimate_requests[$i]->get_isNegative()) {
next;
}
my $keyword = $keyword_estimate_requests[$i]->get_keyword();
my $keyword_estimate = $keyword_estimates->[$i];
my $keyword_message =
sprintf
"Results for the keyword with text '%s' and match type '%s':\n",
$keyword->get_text(), $keyword->get_matchType();
display_mean_estimates(
$keyword_message,
$keyword_estimate->get_min(),
$keyword_estimate->get_max());
}
}
}
}
} else {
print "No traffic estimates were returned.\n";
}
return 1;
}
# Display the mean estimates.
sub display_mean_estimates {
my ($message, $min_estimate, $max_estimate) = @_;
# Find the mean of the min and max values.
my $mean_average_cpc = calculate_money_mean($min_estimate->get_averageCpc(),
$max_estimate->get_averageCpc());
my $mean_average_position = calculate_mean(
$min_estimate->get_averagePosition(),
$max_estimate->get_averagePosition());
my $mean_clicks = calculate_mean($min_estimate->get_clicksPerDay(),
$max_estimate->get_clicksPerDay());
my $mean_total_cost = calculate_money_mean($min_estimate->get_totalCost(),
$max_estimate->get_totalCost());
printf "%s:\n", $message;
printf " Estimated average CPC: %.2f\n", $mean_average_cpc;
printf " Estimated ad position: %.2f\n", $mean_average_position;
printf " Estimated daily clicks: %.2f\n", $mean_clicks;
printf " Estimated daily cost: %.2f\n\n", $mean_total_cost;
}
# Calculates the mean microAmount of two Money objects if neither is
# null, else returns NaN.
sub calculate_money_mean {
my ($min_money, $max_money) = @_;
if ($min_money && $max_money) {
return calculate_mean($min_money->get_microAmount(),
$max_money->get_microAmount());
}
return 'NaN';
}
# Calculates the mean of two numbers if neither is null, else returns NaN.
sub calculate_mean {
my ($min, $max) = @_;
if (defined($min) && defined($max)) {
return ($min + $max) / 2;
}
return 'NaN';
}
# Don't run the example if the file is being included.
if (abs_path($0) ne abs_path(__FILE__)) {
return 1;
}
# Log SOAP XML request, response and API errors.
Google::Ads::AdWords::Logging::enable_all_logging();
# Get AdWords Client, credentials will be read from ~/adwords.properties.
my $client = Google::Ads::AdWords::Client->new({version => "v201809"});
# By default examples are set to die on any server returned fault.
$client->set_die_on_faults(1);
# Call the example
estimate_keyword_traffic($client);
( run in 2.699 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )