MJey
MJey

Reputation: 545

GoogleAds API - Java / How to get all existing Keyword Plans?

I figured out how to create & delete keyword plans, but I couldn't figure out how I can get a list of all my existing keyword plans (resource names / plan ids)?

final long customerId = Long.valueOf("XXXXXXXXXX");    
GoogleAdsClient googleAdsClient = new ...
KeywordPlanServiceClient client = googleAdsClient.getVersion8().createKeywordPlanServiceClient();

String[] allExistingKeywordPlans = client. ???

<dependency>
    <groupId>com.google.api-ads</groupId>
    <artifactId>google-ads</artifactId>
    <version>16.0.0</version>
</dependency>

Further resources: https://developers.google.com/google-ads/api/docs/samples/add-keyword-plan

Any hints on how this can be solved is highly appreciated! Many thanks in advance!

Upvotes: 2

Views: 566

Answers (3)

Ali Uyanık
Ali Uyanık

Reputation: 85

For python:

import argparse
import sys

from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.errors import GoogleAdsException


def main(client, customer_id):
    ga_service = client.get_service("GoogleAdsService")
    query = """
        SELECT keyword_plan.name, keyword_plan.id, keyword_plan.forecast_period, keyword_plan.resource_name
         FROM keyword_plan
    """

    # Issues a search request using streaming.
    search_request = client.get_type("SearchGoogleAdsStreamRequest")
    search_request.customer_id = customer_id
    search_request.query = query
    stream = ga_service.search_stream(search_request)
    for batch in stream:
        for row in batch.results:
            resource_name = row.keyword_plan.resource_name
            forecast_period = row.keyword_plan.forecast_period
            id = row.keyword_plan.id
            name = row.keyword_plan.name

            print(
                f'plan resource name "{resource_name}" with '
                f'forecast period "{forecast_period.date_interval}" '
                f"and ID {id} "
                f' name "{name}" '
            )



if __name__ == "__main__":
    # GoogleAdsClient will read the google-ads.yaml configuration file in the
    # home directory if none is specified.
    googleads_client = GoogleAdsClient.load_from_storage(path='your-google-ads.yml-file-path',version="v10")

    parser = argparse.ArgumentParser(
        description=("Retrieves a campaign's negative keywords.")
    )
    # The following argument(s) should be provided to run the example.
    parser.add_argument(
        "-c",
        "--customer_id",
        type=str,
        required=True,
        help="The Google Ads customer ID.",
    )
    args = parser.parse_args()

    try:
        main(googleads_client, args.customer_id)
    except GoogleAdsException as ex:
        print(
            f'Request with ID "{ex.request_id}" failed with status '
            f'"{ex.error.code().name}" and includes the following 
              errors:'
        )
        for error in ex.failure.errors:
            print(f'\tError with message "{error.message}".')
            if error.location:
                for field_path_element in error.location.field_path_elements:
                    print(f"\t\tOn field: {field_path_element.field_name}")
        sys.exit(1)

Upvotes: 0

Andr&#233;
Andr&#233;

Reputation: 2142

This is for PHP if you like to remove all of the existing keyword plans:

$googleAdsServiceClient = $this->googleAdsClient->getGoogleAdsServiceClient();

/** @var GoogleAdsServerStreamDecorator $stream */
$stream = $googleAdsServiceClient->searchStream(
    $linkedCustomerId,
    'SELECT keyword_plan.resource_name FROM keyword_plan'
);

$keywordPlanServiceClient = $this->googleAdsClient->getKeywordPlanServiceClient();

/** @var GoogleAdsRow $googleAdsRow */
foreach ($stream->iterateAllElements() as $googleAdsRow) {

    $keywordPlanOperation = new KeywordPlanOperation();
    $keywordPlanOperation->setRemove($googleAdsRow->getKeywordPlan()->getResourceName());
    $keywordPlanServiceClient->mutateKeywordPlans($this->linkedCustomerId, [$keywordPlanOperation]);
}

Upvotes: 1

mrki102
mrki102

Reputation: 98

Maybe you can try to fetch the keyword_plan resource from your account. This is how I've done it to create remove operations for all the existing keywordPlans.

GoogleAdsServiceClient.SearchPagedResponse response = client.search(SearchGoogleAdsRequest.newBuilder()
                    .setQuery("SELECT keyword_plan.resource_name FROM keyword_plan")
                    .setCustomerId(Objects.requireNonNull(googleAdsClient.getLoginCustomerId()).toString())
                    .build());
List<KeywordPlanOperation> keywordPlanOperations = response.getPage().getResponse().getResultsList().stream()
                    .map(x -> KeywordPlanOperation.newBuilder()
                            .setRemove(x.getKeywordPlan().getResourceName())
                            .build())
                    .collect(Collectors.toList());

Of course this can also be applied to your use-case.

Upvotes: 2

Related Questions