#!/usr/bin/perl -w
use
lib
"$Bin/../../lib"
;
use
Google::Ads::GoogleAds::V12::Services::GoogleAdsService::SearchGoogleAdsRequest;
my
$customer_id
=
"INSERT_CUSTOMER_ID_HERE"
;
my
$ad_group_id
=
undef
;
sub
get_ad_group_bid_modifiers {
my
(
$api_client
,
$customer_id
,
$ad_group_id
) =
@_
;
my
$search_query
=
"SELECT ad_group.id, ad_group_bid_modifier.criterion_id, campaign.id, "
.
"ad_group_bid_modifier.bid_modifier, "
.
"ad_group_bid_modifier.device.type, "
.
"ad_group_bid_modifier.hotel_date_selection_type.type, "
.
"ad_group_bid_modifier.hotel_advance_booking_window.min_days, "
.
"ad_group_bid_modifier.hotel_advance_booking_window.max_days, "
.
"ad_group_bid_modifier.hotel_length_of_stay.min_nights, "
.
"ad_group_bid_modifier.hotel_length_of_stay.max_nights, "
.
"ad_group_bid_modifier.hotel_check_in_day.day_of_week, "
.
"ad_group_bid_modifier.hotel_check_in_date_range.start_date, "
.
"ad_group_bid_modifier.hotel_check_in_date_range.end_date, "
.
"ad_group_bid_modifier.preferred_content.type "
.
"FROM ad_group_bid_modifier"
;
if
(
$ad_group_id
) {
$search_query
.=
" WHERE ad_group.id = $ad_group_id"
;
}
$search_query
.=
" LIMIT 10000"
;
my
$search_request
=
Google::Ads::GoogleAds::V12::Services::GoogleAdsService::SearchGoogleAdsRequest
->new({
customerId
=>
$customer_id
,
query
=>
$search_query
,
pageSize
=> PAGE_SIZE
});
my
$google_ads_service
=
$api_client
->GoogleAdsService();
my
$iterator
= Google::Ads::GoogleAds::Utils::SearchGoogleAdsIterator->new({
service
=>
$google_ads_service
,
request
=>
$search_request
});
while
(
$iterator
->has_next) {
my
$google_ads_row
=
$iterator
->
next
;
my
$ad_group_bid_modifier
=
$google_ads_row
->{adGroupBidModifier};
my
$ad_group
=
$google_ads_row
->{adGroup};
my
$campaign
=
$google_ads_row
->{campaign};
printf
"Ad group bid modifier with criterion ID %d, bid modifier value %s, "
.
"was found in an ad group with ID %d of campaign ID %d.\n"
,
$ad_group_bid_modifier
->{criterionId},
$ad_group_bid_modifier
->{bidModifier}
?
sprintf
"%.2f"
,
$ad_group_bid_modifier
->{bidModifier}
:
"none"
,
$ad_group
->{id},
$campaign
->{id};
my
$criterion_details
=
" - Criterion type: '%s', "
;
if
(
$ad_group_bid_modifier
->{device}) {
$criterion_details
=
sprintf
$criterion_details
,
"Device"
;
$criterion_details
.=
sprintf
"Type: '%s'"
,
$ad_group_bid_modifier
->{device}{type};
}
elsif
(
$ad_group_bid_modifier
->{hotelAdvanceBookingWindow}) {
$criterion_details
=
sprintf
$criterion_details
,
"HotelAdvanceBookingWindow"
;
$criterion_details
.=
sprintf
"Min Days: %d, Max Days: %d"
,
$ad_group_bid_modifier
->{hotelAdvanceBookingWindow}{minDays},
$ad_group_bid_modifier
->{hotelAdvanceBookingWindow}{maxDays};
}
elsif
(
$ad_group_bid_modifier
->{hotelCheckInDateRange}) {
$criterion_details
=
sprintf
$criterion_details
,
"HotelCheckInDateRange"
;
$criterion_details
.=
sprintf
"Start Date: %s, End Date: %s"
,
$ad_group_bid_modifier
->{hotelCheckInDateRange}{startDate},
$ad_group_bid_modifier
->{hotelCheckInDateRange}{endDate};
}
elsif
(
$ad_group_bid_modifier
->{hotelCheckInDay}) {
$criterion_details
=
sprintf
$criterion_details
,
"HotelCheckInDay"
;
$criterion_details
.=
sprintf
"Day of the week: %s"
,
$ad_group_bid_modifier
->{hotelCheckInDay}{dayOfWeek};
}
elsif
(
$ad_group_bid_modifier
->{HotelDateSelectionType}) {
$criterion_details
=
sprintf
$criterion_details
,
"HotelDateSelectionType"
;
$criterion_details
.=
sprintf
"Date selection type: '%s'"
,
$ad_group_bid_modifier
->{hotelDateSelectionType}{type};
}
elsif
(
$ad_group_bid_modifier
->{hotelLengthOfStay}) {
$criterion_details
=
sprintf
$criterion_details
,
"HotelLengthOfStay"
;
$criterion_details
.=
sprintf
"Min Nights: %d, Max Nights: %d"
,
$ad_group_bid_modifier
->{hotelLengthOfStay}{minNights},
$ad_group_bid_modifier
->{hotelLengthOfStay}{maxNights};
}
elsif
(
$ad_group_bid_modifier
->{preferredContent}) {
$criterion_details
=
sprintf
$criterion_details
,
"PreferredContent"
;
$criterion_details
.=
sprintf
"Type: '%s'"
,
$ad_group_bid_modifier
->{preferredContent}{type};
}
print
$criterion_details
,
"\n"
;
}
return
1;
}
if
(abs_path($0) ne abs_path(__FILE__)) {
return
1;
}
my
$api_client
= Google::Ads::GoogleAds::Client->new();
$api_client
->set_die_on_faults(1);
GetOptions(
"customer_id=s"
=> \
$customer_id
,
"ad_group_id=i"
=> \
$ad_group_id
);
pod2usage(2)
if
not check_params(
$customer_id
);
get_ad_group_bid_modifiers(
$api_client
,
$customer_id
=~ s/-//gr,
$ad_group_id
);