#!/usr/bin/perl -w
use
lib
"$Bin/../../lib"
;
qw(MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY)
;
use
Google::Ads::GoogleAds::V11::Services::CampaignExtensionSettingService::CampaignExtensionSettingOperation;
use
Google::Ads::GoogleAds::V11::Services::ExtensionFeedItemService::ExtensionFeedItemOperation;
use
POSIX
qw(strftime mktime)
;
my
$customer_id
=
"INSERT_CUSTOMER_ID_HERE"
;
my
$campaign_id
=
"INSERT_CAMPAIGN_ID_HERE"
;
sub
add_sitelinks {
my
(
$api_client
,
$customer_id
,
$campaign_id
) =
@_
;
my
$campaign_resource_name
=
Google::Ads::GoogleAds::V11::Utils::ResourceNames::campaign(
$customer_id
,
$campaign_id
);
my
$extension_feed_items
=
create_extension_feed_items(
$api_client
,
$customer_id
,
$campaign_resource_name
);
my
$campaign_extension_setting
=
Google::Ads::GoogleAds::V11::Resources::CampaignExtensionSetting->new({
campaign
=>
$campaign_resource_name
,
extensionType
=> SITELINK,
extensionFeedItems
=>
$extension_feed_items
});
my
$campaign_extension_setting_operation
=
Google::Ads::GoogleAds::V11::Services::CampaignExtensionSettingService::CampaignExtensionSettingOperation
->new({
create
=>
$campaign_extension_setting
});
my
$campaign_extension_settings_response
=
$api_client
->CampaignExtensionSettingService()->mutate({
customerId
=>
$customer_id
,
operations
=> [
$campaign_extension_setting_operation
]});
printf
"Created campaign extension setting with resource name '%s'.\n"
,
$campaign_extension_settings_response
->{results}[0]{resourceName};
return
1;
}
sub
create_extension_feed_items {
my
(
$api_client
,
$customer_id
,
$campaign_resource_name
) =
@_
;
my
$operations
= [];
my
$sitelink_feed_item_1
= create_sitelink_feed_item(
"Store Hours"
,
my
$extension_feed_item_1
=
Google::Ads::GoogleAds::V11::Resources::ExtensionFeedItem->new({
extensionType
=> SITELINK,
sitelinkFeedItem
=>
$sitelink_feed_item_1
,
targetedCampaign
=>
$campaign_resource_name
});
push
@$operations
,
Google::Ads::GoogleAds::V11::Services::ExtensionFeedItemService::ExtensionFeedItemOperation
->new({
create
=>
$extension_feed_item_1
});
my
$sitelink_feed_item_2
= create_sitelink_feed_item(
"Thanksgiving Specials"
,
my
(
$sec
,
$min
,
$hour
,
$mday
,
$mon
,
$year
) =
localtime
(
time
);
my
$start_time
= mktime(0, 0, 0, 20, 10,
$year
);
if
(
$start_time
<
time
) {
$year
+= 1;
$start_time
= mktime(0, 0, 0, 20, 10,
$year
);
}
my
$start_time_string
= strftime(
"%Y-%m-%d %H:%M:%S"
,
localtime
(
$start_time
));
my
$end_time
= mktime(59, 59, 23, 27, 10,
$year
);
my
$end_time_string
= strftime(
"%Y-%m-%d %H:%M:%S"
,
localtime
(
$end_time
));
my
$united_states
=
Google::Ads::GoogleAds::V11::Utils::ResourceNames::geo_target_constant(
2840);
my
$extension_feed_item_2
=
Google::Ads::GoogleAds::V11::Resources::ExtensionFeedItem->new({
extensionType
=> SITELINK,
sitelinkFeedItem
=>
$sitelink_feed_item_2
,
targetedCampaign
=>
$campaign_resource_name
,
startDateTime
=>
$start_time_string
,
endDateTime
=>
$end_time_string
,
targetedGeoTargetConstant
=>
$united_states
});
push
@$operations
,
Google::Ads::GoogleAds::V11::Services::ExtensionFeedItemService::ExtensionFeedItemOperation
->new({
create
=>
$extension_feed_item_2
});
my
$sitelink_feed_item_3
= create_sitelink_feed_item(
"Wifi available"
,
my
$extension_feed_item_3
=
Google::Ads::GoogleAds::V11::Resources::ExtensionFeedItem->new({
extensionType
=> SITELINK,
sitelinkFeedItem
=>
$sitelink_feed_item_3
,
targetedCampaign
=>
$campaign_resource_name
,
device
=> MOBILE,
targetedKeyword
=> Google::Ads::GoogleAds::V11::Common::KeywordInfo->new(
{
text
=>
"free wifi"
,
matchType
=> BROAD
})});
push
@$operations
,
Google::Ads::GoogleAds::V11::Services::ExtensionFeedItemService::ExtensionFeedItemOperation
->new({
create
=>
$extension_feed_item_3
});
my
$sitelink_feed_item_4
= create_sitelink_feed_item(
"Happy hours"
,
my
$extension_feed_item_4
=
Google::Ads::GoogleAds::V11::Resources::ExtensionFeedItem->new({
extensionType
=> SITELINK,
sitelinkFeedItem
=>
$sitelink_feed_item_4
,
targetedCampaign
=>
$campaign_resource_name
,
adSchedules
=> [
create_ad_schedule_info(MONDAY, 18, ZERO, 21, ZERO),
create_ad_schedule_info(TUESDAY, 18, ZERO, 21, ZERO),
create_ad_schedule_info(WEDNESDAY, 18, ZERO, 21, ZERO),
create_ad_schedule_info(THURSDAY, 18, ZERO, 21, ZERO),
create_ad_schedule_info(FRIDAY, 18, ZERO, 21, ZERO)]});
push
@$operations
,
Google::Ads::GoogleAds::V11::Services::ExtensionFeedItemService::ExtensionFeedItemOperation
->new({
create
=>
$extension_feed_item_4
});
my
$extension_feed_items_response
=
$api_client
->ExtensionFeedItemService()->mutate({
customerId
=>
$customer_id
,
operations
=>
$operations
});
my
$extension_feed_item_results
=
$extension_feed_items_response
->{results};
printf
"Added %d extension feed items:\n"
,
scalar
@$extension_feed_item_results
;
my
$resource_names
= [];
foreach
my
$extension_feed_item_result
(
@$extension_feed_item_results
) {
printf
"\tCreated extension feed item with resource name '%s'.\n"
,
$extension_feed_item_result
->{resourceName};
push
@$resource_names
,
$extension_feed_item_result
->{resourceName};
}
return
$resource_names
;
}
sub
create_sitelink_feed_item {
my
(
$sitelink_text
,
$sitelink_url
) =
@_
;
return
Google::Ads::GoogleAds::V11::Common::SitelinkFeedItem->new({
linkText
=>
$sitelink_text
,
finalUrls
=>
$sitelink_url
});
}
sub
create_ad_schedule_info {
my
(
$day
,
$start_hour
,
$start_minute
,
$end_hour
,
$end_minute
) =
@_
;
return
Google::Ads::GoogleAds::V11::Common::AdScheduleInfo->new({
dayOfWeek
=>
$day
,
startHour
=>
$start_hour
,
startMinute
=>
$start_minute
,
endHour
=>
$end_hour
,
endMinute
=>
$end_minute
});
}
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
,
"campaign_id=i"
=> \
$campaign_id
);
pod2usage(2)
if
not check_params(
$customer_id
,
$campaign_id
);
add_sitelinks(
$api_client
,
$customer_id
=~ s/-//gr,
$campaign_id
);