#!/usr/bin/perl -w
use
lib
"$Bin/../../lib"
;
qw(NEXT_QUARTER)
;
qw(GOOGLE_SEARCH)
;
qw(BROAD PHRASE EXACT)
;
use
Google::Ads::GoogleAds::V13::Services::KeywordPlanService::KeywordPlanOperation;
use
Google::Ads::GoogleAds::V13::Services::KeywordPlanCampaignService::KeywordPlanCampaignOperation;
use
Google::Ads::GoogleAds::V13::Services::KeywordPlanAdGroupService::KeywordPlanAdGroupOperation;
use
Google::Ads::GoogleAds::V13::Services::KeywordPlanAdGroupKeywordService::KeywordPlanAdGroupKeywordOperation;
use
Google::Ads::GoogleAds::V13::Services::KeywordPlanCampaignKeywordService::KeywordPlanCampaignKeywordOperation;
my
$customer_id
=
"INSERT_CUSTOMER_ID_HERE"
;
sub
add_keyword_plan {
my
(
$api_client
,
$customer_id
) =
@_
;
my
$keyword_plan_resource
= create_keyword_plan(
$api_client
,
$customer_id
);
my
$keyword_plan_campaign_resource
=
create_keyword_plan_campaign(
$api_client
,
$customer_id
,
$keyword_plan_resource
);
my
$keyword_plan_ad_group_resource
=
create_keyword_plan_ad_group(
$api_client
,
$customer_id
,
$keyword_plan_campaign_resource
);
create_keyword_plan_ad_group_keywords(
$api_client
,
$customer_id
,
$keyword_plan_ad_group_resource
);
create_keyword_plan_negative_campaign_keywords(
$api_client
,
$customer_id
,
$keyword_plan_campaign_resource
);
return
1;
}
sub
create_keyword_plan {
my
(
$api_client
,
$customer_id
) =
@_
;
my
$keyword_plan
= Google::Ads::GoogleAds::V13::Resources::KeywordPlan->new({
name
=>
"Keyword plan for traffic estimate #"
. uniqid(),
forecastPeriod
=>
Google::Ads::GoogleAds::V13::Resources::KeywordPlanForecastPeriod->new({
dateInterval
=> NEXT_QUARTER
})});
my
$keyword_plan_operation
=
Google::Ads::GoogleAds::V13::Services::KeywordPlanService::KeywordPlanOperation
->new({
create
=>
$keyword_plan
});
my
$keyword_plan_resource
=
$api_client
->KeywordPlanService()->mutate({
customerId
=>
$customer_id
,
operations
=> [
$keyword_plan_operation
]})->{results}[0]{resourceName};
printf
"Created keyword plan: '%s'.\n"
,
$keyword_plan_resource
;
return
$keyword_plan_resource
;
}
sub
create_keyword_plan_campaign {
my
(
$api_client
,
$customer_id
,
$keyword_plan_resource
) =
@_
;
my
$keyword_plan_campaign
=
Google::Ads::GoogleAds::V13::Resources::KeywordPlanCampaign->new({
name
=>
"Keyword plan campaign #"
. uniqid(),
cpcBidMicros
=> 1000000,
keywordPlanNetwork
=> GOOGLE_SEARCH,
keywordPlan
=>
$keyword_plan_resource
});
$keyword_plan_campaign
->{geoTargets} = [
Google::Ads::GoogleAds::V13::Resources::KeywordPlanGeoTarget->new({
geoTargetConstant
=>
Google::Ads::GoogleAds::V13::Utils::ResourceNames::geo_target_constant(
2840)})];
$keyword_plan_campaign
->{languageConstants} = [
Google::Ads::GoogleAds::V13::Utils::ResourceNames::language_constant(1000)];
my
$keyword_plan_campaign_operation
=
Google::Ads::GoogleAds::V13::Services::KeywordPlanCampaignService::KeywordPlanCampaignOperation
->new({
create
=>
$keyword_plan_campaign
});
my
$keyword_plan_campaign_resource
=
$api_client
->KeywordPlanCampaignService()->mutate({
customerId
=>
$customer_id
,
operations
=> [
$keyword_plan_campaign_operation
]}
)->{results}[0]{resourceName};
printf
"Created campaign for keyword plan: '%s'.\n"
,
$keyword_plan_campaign_resource
;
return
$keyword_plan_campaign_resource
;
}
sub
create_keyword_plan_ad_group {
my
(
$api_client
,
$customer_id
,
$keyword_plan_campaign_resource
) =
@_
;
my
$keyword_plan_ad_group
=
Google::Ads::GoogleAds::V13::Resources::KeywordPlanAdGroup->new({
name
=>
"Keyword plan ad group #"
. uniqid(),
cpcBidMicros
=> 2500000,
keywordPlanCampaign
=>
$keyword_plan_campaign_resource
});
my
$keyword_plan_ad_group_operation
=
Google::Ads::GoogleAds::V13::Services::KeywordPlanAdGroupService::KeywordPlanAdGroupOperation
->new({
create
=>
$keyword_plan_ad_group
});
my
$keyword_plan_ad_group_resource
=
$api_client
->KeywordPlanAdGroupService()->mutate({
customerId
=>
$customer_id
,
operations
=> [
$keyword_plan_ad_group_operation
]}
)->{results}[0]{resourceName};
printf
"Created ad group for keyword plan: '%s'.\n"
,
$keyword_plan_ad_group_resource
;
return
$keyword_plan_ad_group_resource
;
}
sub
create_keyword_plan_ad_group_keywords {
my
(
$api_client
,
$customer_id
,
$keyword_plan_ad_group_resource
) =
@_
;
my
$keyword_plan_ad_group_keyword1
=
Google::Ads::GoogleAds::V13::Resources::KeywordPlanAdGroupKeyword->new({
text
=>
"mars cruise"
,
cpcBidMicros
=> 2000000,
matchType
=> BROAD,
keywordPlanAdGroup
=>
$keyword_plan_ad_group_resource
});
my
$keyword_plan_ad_group_keyword2
=
Google::Ads::GoogleAds::V13::Resources::KeywordPlanAdGroupKeyword->new({
text
=>
"cheap cruise"
,
cpcBidMicros
=> 1500000,
matchType
=> PHRASE,
keywordPlanAdGroup
=>
$keyword_plan_ad_group_resource
});
my
$keyword_plan_ad_group_keyword3
=
Google::Ads::GoogleAds::V13::Resources::KeywordPlanAdGroupKeyword->new({
text
=>
"jupiter cruise"
,
cpcBidMicros
=> 1990000,
matchType
=> EXACT,
keywordPlanAdGroup
=>
$keyword_plan_ad_group_resource
});
my
$operations
= [
map
(
Google::Ads::GoogleAds::V13::Services::KeywordPlanAdGroupKeywordService::KeywordPlanAdGroupKeywordOperation
->new(
{
create
=>
$_
}
),
(
$keyword_plan_ad_group_keyword1
,
$keyword_plan_ad_group_keyword2
,
$keyword_plan_ad_group_keyword3
))];
my
$response
=
$api_client
->KeywordPlanAdGroupKeywordService()->mutate({
customerId
=>
$customer_id
,
operations
=>
$operations
});
foreach
my
$result
(@{
$response
->{results}}) {
printf
"Created ad group keyword for keyword plan: '%s'.\n"
,
$result
->{resourceName};
}
}
sub
create_keyword_plan_negative_campaign_keywords {
my
(
$api_client
,
$customer_id
,
$keyword_plan_campaign_resource
) =
@_
;
my
$keyword_plan_campaign_keyword
=
Google::Ads::GoogleAds::V13::Resources::KeywordPlanCampaignKeyword->new({
text
=>
"moon walk"
,
matchType
=> BROAD,
negative
=>
"true"
,
keywordPlanCampaign
=>
$keyword_plan_campaign_resource
});
my
$operation
=
Google::Ads::GoogleAds::V13::Services::KeywordPlanCampaignKeywordService::KeywordPlanCampaignKeywordOperation
->new({
create
=>
$keyword_plan_campaign_keyword
});
my
$response
=
$api_client
->KeywordPlanCampaignKeywordService()->mutate({
customerId
=>
$customer_id
,
operations
=> [
$operation
]});
printf
"Created negative campaign keyword for keyword plan: '%s'.\n"
,
$response
->{results}[0]{resourceName};
}
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
);
pod2usage(2)
if
not check_params(
$customer_id
);
add_keyword_plan(
$api_client
,
$customer_id
=~ s/-//gr);