Geri bildirim gönderin
  
   
 
  
    
      Ürün Kategorisi Sabitlerini Alın
    
    
       
    
    
      
      Koleksiyonlar ile düzeninizi koruyun
     
    
      
      İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
     
   
     
  
      
     
  
  
  
   
  
    
     
    
  
  
    
    
    
  
  
  
  
    
  
  
  
  
  
  
  
  
    
    
    
      
      
        
      
        
      
    
      
        
      
      
        
      
        
      
        
      
        
      
    
    
      
      
      
        
          
        
        
      
        
          
        
        
      
      
    
  
  
  
  
  
    
    
  
  
  
  
  
  
  Java 
  
  
    
      
        
// Copyright 2019 Google LLC 
// 
// Licensed under the Apache License, Version 2.0 (the "License"); 
// you may not use this file except in compliance with the License. 
// You may obtain a copy of the License at 
// 
//     https://www.apache.org/licenses/LICENSE-2.0 
// 
// Unless required by applicable law or agreed to in writing, software 
// distributed under the License is distributed on an "AS IS" BASIS, 
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
// See the License for the specific language governing permissions and 
// limitations under the License. 
package   com.google.ads.googleads.examples.shoppingads ; 
import   com.beust.jcommander.Parameter ; 
import   com.google.ads.googleads.examples.utils.ArgumentNames ; 
import   com.google.ads.googleads.examples.utils.CodeSampleParams ; 
import   com.google.ads.googleads.lib.GoogleAdsClient ; 
import   com.google.ads.googleads.v22.errors.GoogleAdsError ; 
import   com.google.ads.googleads.v22.errors.GoogleAdsException ; 
import   com.google.ads.googleads.v22.resources.ProductCategoryConstant ; 
import   com.google.ads.googleads.v22.resources.ProductCategoryConstant.ProductCategoryLocalization ; 
import   com.google.ads.googleads.v22.services.GoogleAdsRow ; 
import   com.google.ads.googleads.v22.services.GoogleAdsServiceClient ; 
import   com.google.ads.googleads.v22.services.GoogleAdsServiceClient.SearchPagedResponse ; 
import   com.google.ads.googleads.v22.services.SearchGoogleAdsRequest ; 
import   com.google.api.client.util.Preconditions ; 
import   java.io.FileNotFoundException ; 
import   java.io.IOException ; 
import   java.util.ArrayList ; 
import   java.util.HashMap ; 
import   java.util.List ; 
import   java.util.Map ; 
/** Fetches the set of all ProductCategoryConstants. */ 
public   class  GetProductCategoryConstants   { 
   private   static   class  GetProductCategoryConstantParams   extends   CodeSampleParams   { 
     @Parameter ( names   =   ArgumentNames . CUSTOMER_ID ,   required   =   true ) 
     Long   customerId ; 
   } 
   public   static   void   main ( String   args [] )   { 
     GetProductCategoryConstantParams   params   =   new   GetProductCategoryConstantParams (); 
     if   ( ! params . parseArguments ( args ))   { 
       // Either pass the required parameters for this example on the command line, or insert them 
       // into the code here. See the parameter class definition above for descriptions. 
       params . customerId   =   Long . parseLong ( "ENTER_CUSTOMER_ID_HERE" ); 
     } 
     GoogleAdsClient   googleAdsClient   =   null ; 
     try   { 
       googleAdsClient   =   GoogleAdsClient . newBuilder (). fromPropertiesFile (). build (); 
     }   catch   ( FileNotFoundException   fnfe )   { 
       System . err . printf ( 
           "Failed to load GoogleAdsClient configuration from file. Exception: %s%n" ,   fnfe ); 
       System . exit ( 1 ); 
     }   catch   ( IOException   ioe )   { 
       System . err . printf ( "Failed to create GoogleAdsClient. Exception: %s%n" ,   ioe ); 
       System . exit ( 1 ); 
     } 
     try   { 
       new   GetProductCategoryConstants (). runExample ( googleAdsClient ,   params . customerId ); 
     }   catch   ( GoogleAdsException   gae )   { 
       // GoogleAdsException is the base class for most exceptions thrown by an API request. 
       // Instances of this exception have a message and a GoogleAdsFailure that contains a 
       // collection of GoogleAdsErrors that indicate the underlying causes of the 
       // GoogleAdsException. 
       System . err . printf ( 
           "Request ID %s failed due to GoogleAdsException. Underlying errors:%n" , 
           gae . getRequestId ()); 
       int   i   =   0 ; 
       for   ( GoogleAdsError   googleAdsError   :   gae . getGoogleAdsFailure (). getErrorsList ())   { 
         System . err . printf ( "  Error %d: %s%n" ,   i ++ ,   googleAdsError ); 
       } 
       System . exit ( 1 ); 
     } 
   } 
   /** 
   * Runs the example. 
   * 
   * @param googleAdsClient the Google Ads API client. 
   * @param customerId the client customer ID. 
   */ 
   private   void   runExample ( GoogleAdsClient   googleAdsClient ,   long   customerId )   { 
     // Creates the query. 
     String   query   = 
         "SELECT " 
             +   "product_category_constant.localizations, " 
             +   "product_category_constant.product_category_constant_parent " 
             +   "FROM " 
             +   "product_category_constant" ; 
     // Creates the request. 
     SearchGoogleAdsRequest   request   = 
         SearchGoogleAdsRequest . newBuilder () 
             . setCustomerId ( Long . toString ( customerId )) 
             . setQuery ( query ) 
             . build (); 
     // Creates the Google Ads Service Client. 
     try   ( GoogleAdsServiceClient   googleAdsServiceClient   = 
         googleAdsClient . getLatestVersion (). createGoogleAdsServiceClient ())   { 
       // Creates a list of top level category nodes. 
       List<CategoryNode>   rootCategories   =   new   ArrayList <>(); 
       // Creates a map of category resource name to category node for all categories found in the 
       // results. This Map is a convenience lookup to enable fast retrieval of existing nodes. 
       Map<String ,   CategoryNode >  biddingCategories   =   new   HashMap <>(); 
       // Performs the search request. 
       SearchPagedResponse   response   =   googleAdsServiceClient . search ( request ); 
       for   ( GoogleAdsRow   googleAdsRow   :   response . iterateAll ())   { 
         // Gets the product category constant from the row. 
         ProductCategoryConstant   productCategory   =   googleAdsRow . getProductCategoryConstant (); 
         // Finds the US-en localized name in the localizations list. 
         String   localizedName   = 
             productCategory . getLocalizationsList (). stream () 
                 . filter ( 
                     localization   - >
                         "US" . equals ( localization . getRegionCode ()) 
                            &&  "en" . equals ( localization . getLanguageCode ())) 
                 // Gets the name from the product category localization. 
                 . map ( ProductCategoryLocalization :: getValue ) 
                 . findAny () 
                 . orElse ( null ); 
         String   resourceName   =   productCategory . getResourceName (); 
         CategoryNode   node   =   biddingCategories . get ( resourceName ); 
         if   ( node   ==   null )   { 
           // Adds a node for the resource name to the map. 
           node   =   new   CategoryNode ( resourceName ,   localizedName ); 
           biddingCategories . put ( resourceName ,   node ); 
         }   else   if   ( node . getLocalizedName ()   ==   null )   { 
           // Ensures that the name attribute for the node is set. Name will be null for nodes added 
           // to biddingCategories as a result of being a parentNode below. 
           node . setLocalizedName ( localizedName ); 
         } 
         if   ( productCategory . hasProductCategoryConstantParent ())   { 
           // Looks for the parent category's node in the map and adds it if it is not present. 
           String   parentResourceName   =   productCategory . getProductCategoryConstantParent (); 
           CategoryNode   parentNode   =   biddingCategories . get ( parentResourceName ); 
           if   ( parentNode   ==   null )   { 
             parentNode   =   new   CategoryNode ( parentResourceName ); 
             biddingCategories . put ( parentResourceName ,   parentNode ); 
           } 
           parentNode . children . add ( node ); 
         }   else   { 
           // The category has no parent, so adds the category's node to the list of root categories 
           // encountered. 
           rootCategories . add ( node ); 
         } 
       } 
       displayCategories ( rootCategories ,   "" ); 
     } 
   } 
   /** 
   * Recursively prints out each category node and its children. 
   * 
   * @param categories the categories to print. 
   * @param prefix the string to print at the beginning of each line of output. 
   */ 
   private   static   void   displayCategories ( List<CategoryNode>   categories ,   String   prefix )   { 
     for   ( CategoryNode   category   :   categories )   { 
       System . out . printf ( "%s%s [%s]%n" ,   prefix ,   category . localizedName ,   category . resourceName ); 
       displayCategories ( 
           category . children ,   String . format ( "%s%s > " ,   prefix ,   category . localizedName )); 
     } 
   } 
   /** Node that tracks a product bidding category's id, name, and child nodes. */ 
   private   static   class  CategoryNode   { 
     private   final   String   resourceName ; 
     private   String   localizedName ; 
     private   final   List<CategoryNode>   children ; 
     /** 
     * Gets the localized name of the category. 
     * 
     * @return the name of the category. 
     */ 
     public   String   getLocalizedName ()   { 
       return   this . localizedName ; 
     } 
     /** 
     * Sets the localized name of the category. 
     * 
     * @param localizedName the new name of the category. 
     */ 
     public   void   setLocalizedName ( String   localizedName )   { 
       this . localizedName   =   localizedName ; 
     } 
     /** 
     * Constructor for categories first encountered as non-parent elements in the results. 
     * 
     * @param resourceName the resource name = of the category 
     * @param localizedName the name of the category 
     */ 
     CategoryNode ( String   resourceName ,   String   localizedName )   { 
       this . children   =   new   ArrayList <>(); 
       this . resourceName   =   Preconditions . checkNotNull ( resourceName ); 
       this . localizedName   =   localizedName ; 
     } 
     /** 
     * Constructor for categories first encountered as a parent category, in which case only the 
     * resource name is available. 
     * 
     * @param resourceName the resource name of the category 
     */ 
     CategoryNode ( String   resourceName )   { 
       this ( resourceName ,   null ); 
     } 
   } 
} 
        
    
  
  
 
  
  
  
  
    
  
  
  
  
  
  
  
  
    
    
    
      
      
        
      
        
      
    
      
        
      
      
        
      
        
      
        
      
        
      
    
    
      
    
  
  
  
  
  
    
    
  
  
  
  
  
  
  C# 
  
  
    
      
        
// Copyright 2020 Google LLC 
// 
// Licensed under the Apache License, Version 2.0 (the "License"); 
// you may not use this file except in compliance with the License. 
// You may obtain a copy of the License at 
// 
//     http://www.apache.org/licenses/LICENSE-2.0 
// 
// Unless required by applicable law or agreed to in writing, software 
// distributed under the License is distributed on an "AS IS" BASIS, 
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
// See the License for the specific language governing permissions and 
// limitations under the License. 
using   CommandLine ; 
using   Google.Ads.Gax.Examples ; 
using   Google.Ads.GoogleAds.Extensions.Config ; 
using   Google.Ads.GoogleAds.Lib ; 
using   Google.Ads.GoogleAds.V22.Errors ; 
using   Google.Ads.GoogleAds.V22.Resources ; 
using   Google.Ads.GoogleAds.V22.Services ; 
using   System ; 
using   System.Collections.Generic ; 
using   System.Linq ; 
namespace   Google.Ads.GoogleAds.Examples.V22 
{ 
     /// <summary> 
     /// This code example fetches the set of valid ProductCategories. 
     /// </summary> 
     public   class   GetProductCategoryConstants   :   ExampleBase 
     { 
         /// <summary> 
         /// Command line options for running the <see cref="GetProductCategoryConstants"/> 
         /// example. 
         /// </summary> 
         public   class   Options   :   OptionsBase 
         { 
             /// <summary> 
             /// The Google Ads customer ID for which the call is made. 
             /// </summary> 
             [Option("customerId", Required = true, HelpText = 
                "The Google Ads customer ID for which the call is made.")] 
             public   long   CustomerId   {   get ;   set ;   } 
         } 
         /// <summary> 
         /// Main method, to run this code example as a standalone application. 
         /// </summary> 
         /// <param name="args">The command line arguments.</param> 
         public   static   void   Main ( string []   args ) 
         { 
             Options   options   =   ExampleUtilities . ParseCommandLine<Options> ( args ); 
             GetProductCategoryConstants   codeExample   =   new   GetProductCategoryConstants (); 
             Console . WriteLine ( codeExample . Description ); 
             codeExample . Run ( new   GoogleAdsClient (),   options . CustomerId ); 
         } 
         /// <summary> 
         /// Node that tracks a product category's id, name, and child nodes. 
         /// </summary> 
         public   class   CategoryNode 
         { 
             /// <summary> 
             /// The resource name of the category. 
             /// </summary> 
             public   string   ResourceName 
             { 
                 get ; 
                 private   set ; 
             } 
             /// <summary> 
             /// Gets or sets the localized name of the category. 
             /// </summary> 
             public   string   LocalizedName 
             { 
                 get ; 
                 set ; 
             } 
             /// <summary> 
             /// Gets the list of child. 
             /// </summary> 
             public   List<CategoryNode>   Children 
             { 
                 get ; 
             }   =   new   List<CategoryNode> (); 
             /// <summary> 
             /// Constructor for categories first encountered as non-parent elements in the results. 
             /// </summary> 
             /// <param name="resourceName">The resource name of the category.</param> 
             /// <param name="localizedName">The name of the category.</param> 
             public   CategoryNode ( string   resourceName ,   string   localizedName ) 
             { 
                 if   ( string . IsNullOrEmpty ( resourceName )) 
                 { 
                     throw   new   ArgumentNullException (); 
                 } 
                 this . ResourceName   =   resourceName ; 
                 this . LocalizedName   =   localizedName ; 
             } 
             /// <summary> 
             /// Constructor for categories first encountered as a parent category, in which case 
             /// only the ID is available. 
             /// </summary> 
             /// <param name="resourceName">The resource name of the category.</param> 
             public   CategoryNode ( string   resourceName )   :   this ( resourceName ,   null )   {   } 
         } 
         /// <summary> 
         /// Returns a description about the code example. 
         /// </summary> 
         public   override   string   Description   = >
             "This code example fetches the set of valid ProductCategories." ; 
         /// <summary> 
         /// Runs the code example. 
         /// </summary> 
         /// <param name="client">The Google Ads client.</param> 
         /// <param name="customerId">The Google Ads customer ID for which the call is made.</param> 
         public   void   Run ( GoogleAdsClient   client ,   long   customerId ) 
         { 
             // Get the GoogleAdsServiceClient . 
             GoogleAdsServiceClient   googleAdsService   = 
                 client . GetService ( Services . V22 . GoogleAdsService ); 
             // Creates the query. 
             string   query   =   "SELECT product_category_constant.localizations, "   + 
                 "product_category_constant.product_category_constant_parent "   + 
                 "FROM product_category_constant" ; 
             // Creates the request. 
             SearchGoogleAdsRequest   request   =   new   SearchGoogleAdsRequest () 
             { 
                 CustomerId   =   customerId . ToString (), 
                 Query   =   query 
             }; 
             // Creates a list of top level category nodes. 
             List<CategoryNode>   rootCategories   =   new   List<CategoryNode> (); 
             // Creates a map of category ID to category node for all categories found in the 
             // results. 
             // This Map is a convenience lookup to enable fast retrieval of existing nodes. 
             Dictionary<string ,   CategoryNode >  productCategories   = 
                 new   Dictionary<string ,   CategoryNode >(); 
             try 
             { 
                 // Performs the search request. 
                 foreach   ( GoogleAdsRow   googleAdsRow   in   googleAdsService . Search ( request )) 
                 { 
                     ProductCategoryConstant   productCategory   = 
                         googleAdsRow . ProductCategoryConstant ; 
                     string   localizedName   =   productCategory . Localizations 
                         . Where ( item   = >  item . RegionCode   ==   "US"  &&  item . LanguageCode   ==   "en" ) 
                         . Select ( item   = >  item . Value . ToString ()) 
                         . First (); 
                     string   resourceName   =   productCategory . ResourceName ; 
                     CategoryNode   node   =   null ; 
                     if   ( productCategories . ContainsKey ( resourceName )) 
                     { 
                         node   =   productCategories [ resourceName ]; 
                     } 
                     else 
                     { 
                         node   =   new   CategoryNode ( resourceName ,   localizedName ); 
                         productCategories [ resourceName ]   =   node ; 
                     } 
                     if   ( string . IsNullOrEmpty ( node . LocalizedName )) 
                     { 
                         // Ensures that the name attribute for the node is set. Name will be null for 
                         //nodes added to productCategories as a result of being a parentNode below. 
                         node . LocalizedName   =   localizedName ; 
                     } 
                     if   ( ! string . IsNullOrEmpty ( 
                         productCategory . ProductCategoryConstantParent )) 
                     { 
                         string   parentResourceName   = 
                             productCategory . ProductCategoryConstantParent ; 
                         CategoryNode   parentNode   =   null ; 
                         if   ( productCategories . ContainsKey ( parentResourceName )) 
                         { 
                             parentNode   =   productCategories [ parentResourceName ]; 
                         } 
                         else 
                         { 
                             parentNode   =   new   CategoryNode ( parentResourceName ); 
                             productCategories [ parentResourceName ]   =   parentNode ; 
                         } 
                         parentNode . Children . Add ( node ); 
                     } 
                     else 
                     { 
                         rootCategories . Add ( node ); 
                     } 
                 } 
                 DisplayCategories ( rootCategories ,   "" ); 
             } 
             catch   ( GoogleAdsException   e ) 
             { 
                 Console . WriteLine ( "Failure:" ); 
                 Console . WriteLine ( $"Message: {e.Message}" ); 
                 Console . WriteLine ( $"Failure: {e.Failure}" ); 
                 Console . WriteLine ( $"Request ID: {e.RequestId}" ); 
                 throw ; 
             } 
         } 
         /// <summary> 
         /// Recursively prints out each category node and its children. 
         /// </summary> 
         /// <param name="categories">The categories to print.</param> 
         /// <param name="prefix">The string to print at the beginning of each line of output. 
         /// </param> 
         private   static   void   DisplayCategories ( IEnumerable<CategoryNode>   categories , 
             string   prefix ) 
         { 
             foreach   ( CategoryNode   category   in   categories ) 
             { 
                 Console . WriteLine ( $"{prefix}{category.LocalizedName}"   + 
                     $" [{category.ResourceName}]" ); 
                 DisplayCategories ( category . Children ,   $"{prefix}{category.LocalizedName} > " ); 
             } 
         } 
     } 
} 
        
    
  
  
 
  
  
  
  
    
  
  
  
  
  
  
  
  
    
    
    
      
      
        
      
        
      
    
      
        
      
      
        
      
        
      
        
      
        
      
    
    
      
    
  
  
  
  
  
    
    
  
  
  
  
  
  
  PHP 
  
  
    
      
        
<?php 
/** 
 * Copyright 2019 Google LLC 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *     https://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 */ 
namespace Google\Ads\GoogleAds\Examples\ShoppingAds; 
require __DIR__ . '/../../vendor/autoload.php'; 
use GetOpt\GetOpt; 
use Google\Ads\GoogleAds\Examples\Utils\ArgumentNames; 
use Google\Ads\GoogleAds\Examples\Utils\ArgumentParser; 
use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder; 
use Google\Ads\GoogleAds\Lib\V22\GoogleAdsClient; 
use Google\Ads\GoogleAds\Lib\V22\GoogleAdsClientBuilder; 
use Google\Ads\GoogleAds\Lib\V22\GoogleAdsException; 
use Google\Ads\GoogleAds\V22\Errors\GoogleAdsError; 
use Google\Ads\GoogleAds\V22\Resources\ProductCategoryConstant; 
use Google\Ads\GoogleAds\V22\Resources\ProductCategoryConstant\ProductCategoryLocalization; 
use Google\Ads\GoogleAds\V22\Services\GoogleAdsRow; 
use Google\Ads\GoogleAds\V22\Services\SearchGoogleAdsRequest; 
use Google\ApiCore\ApiException; 
/** Fetches the set of all ProductCategoryConstants. */ 
class GetProductCategoryConstants 
{ 
    private const CUSTOMER_ID = 'INSERT_CUSTOMER_ID_HERE'; 
    public static function main() 
    { 
        // Either pass the required parameters for this example on the command line, or insert them 
        // into the constants above. 
        $options = (new ArgumentParser())->parseCommandArguments([ 
            ArgumentNames::CUSTOMER_ID => GetOpt::REQUIRED_ARGUMENT 
        ]); 
        // Generate a refreshable OAuth2 credential for authentication. 
        $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build(); 
        // Construct a Google Ads client configured from a properties file and the 
        // OAuth2 credentials above. 
        $googleAdsClient = (new GoogleAdsClientBuilder()) 
            ->fromFile() 
            ->withOAuth2Credential($oAuth2Credential) 
            ->build(); 
        try { 
            self::runExample( 
                $googleAdsClient, 
                $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID 
            ); 
        } catch (GoogleAdsException $googleAdsException) { 
            printf( 
                "Request with ID '%s' has failed.%sGoogle Ads failure details:%s", 
                $googleAdsException->getRequestId(), 
                PHP_EOL, 
                PHP_EOL 
            ); 
            foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) { 
                /** @var GoogleAdsError $error */ 
                printf( 
                    "\t%s: %s%s", 
                    $error->getErrorCode()->getErrorCode(), 
                    $error->getMessage(), 
                    PHP_EOL 
                ); 
            } 
            exit(1); 
        } catch (ApiException $apiException) { 
            printf( 
                "ApiException was thrown with message '%s'.%s", 
                $apiException->getMessage(), 
                PHP_EOL 
            ); 
            exit(1); 
        } 
    } 
    /** 
     * Runs the example. 
     * 
     * @param GoogleAdsClient $googleAdsClient the Google Ads API client 
     * @param int $customerId the customer ID 
     */ 
    public static function runExample(GoogleAdsClient $googleAdsClient, int $customerId) 
    { 
        $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); 
        // Creates the query. 
        $query = "SELECT product_category_constant.localizations, " 
            . "product_category_constant.product_category_constant_parent " 
            . "FROM product_category_constant "; 
        // Performs the search request. 
        $response = 
            $googleAdsServiceClient->search(SearchGoogleAdsRequest::build($customerId, $query)); 
        // Creates a map of top level categories. 
        $rootCategories = []; 
        // Creates a map of all categories found in the results. 
        // This is a convenience lookup to enable fast retrieval of existing categories. 
        $biddingCategories = []; 
        // Iterates over all rows in all pages to extract the result. 
        foreach ($response->iterateAllElements() as $googleAdsRow) { 
            /** 
             * @var GoogleAdsRow $googleAdsRow 
             * @var ProductCategoryConstant $productBiddingCategory 
             */ 
            // Gets the product category constant from the row. 
            $productBiddingCategory = $googleAdsRow->getProductCategoryConstant(); 
            // Finds the US-en localized name in the localizations list. 
            /** @var ProductCategoryLocalization[] $filteredLocalizations */ 
            $filteredLocalizations = array_filter( 
                iterator_to_array($productBiddingCategory->getLocalizations()->getIterator()), 
                function (ProductCategoryLocalization $productCategoryLocalization) { 
                    return $productCategoryLocalization->getRegionCode() === 'US' 
                        && $productCategoryLocalization->getLanguageCode() === 'en'; 
                } 
            ); 
            // Fetches the first value in the filtered array, which is supposed to contain only 
            // one member or none at all. 
            $localizedName = empty($filteredLocalizations) 
                ? null : array_shift($filteredLocalizations)->getValue(); 
            $resourceName = $productBiddingCategory->getResourceName(); 
            // Adds the category in the map if new. 
            if (!array_key_exists($resourceName, $biddingCategories)) { 
                $biddingCategories[$resourceName] = []; 
            } 
            // Sets the localized name attribute if not already set. 
            if (!array_key_exists('localizedName', $biddingCategories[$resourceName])) { 
                $biddingCategories[$resourceName]['localizedName'] = $localizedName; 
            } 
            if ($productBiddingCategory->getProductCategoryConstantParent() === '') { 
                // Adds the category as a root category if having no parent. 
                $rootCategories[$resourceName] = &$biddingCategories[$resourceName]; 
            } else { 
                // Links the category to the parent category if any. 
                $parentResourceName = 
                    $productBiddingCategory->getProductCategoryConstantParent(); 
                // Adds the parent category in the map if new. 
                if (!array_key_exists($parentResourceName, $biddingCategories)) { 
                    $biddingCategories[$parentResourceName] = []; 
                } 
                // Adds the category as a child category of the parent category. 
                $biddingCategories[$parentResourceName]['children'][$resourceName] = 
                    &$biddingCategories[$resourceName]; 
            } 
        } 
        // Prints the result. 
        self::displayCategories($rootCategories, ''); 
    } 
    /** 
     * Recursively prints out each category and its children. 
     * 
     * @param array $categories the map of categories to print 
     * @param string $prefix the string to print at the beginning of each line of output 
     */ 
    private static function displayCategories( 
        array $categories, 
        string $prefix 
    ) { 
        foreach ($categories as $categoryKey => $categoryValue) { 
            $localizedName = $categoryValue['localizedName']; 
            printf( 
                '%s%s [%s]%s', 
                $prefix, 
                $localizedName, 
                $categoryKey, 
                PHP_EOL 
            ); 
            if (array_key_exists('children', $categoryValue)) { 
                self::displayCategories( 
                    $categoryValue['children'], 
                    sprintf('%s%s > ', $prefix, $localizedName) 
                ); 
            } 
        } 
    } 
} 
GetProductCategoryConstants::main(); 
         
    
  
  
 
  
  
  
  
    
  
  
  
  
  
  
  
  
    
  
  
  
  
  
    
    
  
  
  
  
  
  
  Python 
  
  
    
      
        
#!/usr/bin/env python 
# Copyright 2019 Google LLC 
# 
# Licensed under the Apache License, Version 2.0 (the "License"); 
# you may not use this file except in compliance with the License. 
# You may obtain a copy of the License at 
# 
#     https://www.apache.org/licenses/LICENSE-2.0 
# 
# Unless required by applicable law or agreed to in writing, software 
# distributed under the License is distributed on an "AS IS" BASIS, 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
# See the License for the specific language governing permissions and 
# limitations under the License. 
"""This example fetches the set of all ProductCategoryConstants.""" 
import   argparse 
import   collections 
import   sys 
from   typing   import  DefaultDict ,  List ,  Optional 
from   google.ads.googleads.client   import  GoogleAdsClient 
from   google.ads.googleads.errors   import  GoogleAdsException 
from   google.ads.googleads.v22.resources.types.product_category_constant   import  ( 
    ProductCategoryConstant , 
) 
from   google.ads.googleads.v22.services.services.google_ads_service   import  ( 
    GoogleAdsServiceClient , 
) 
from   google.ads.googleads.v22.services.types.google_ads_service   import  ( 
    SearchGoogleAdsStreamRequest , 
    SearchGoogleAdsStreamResponse , 
) 
class   Category : 
    def   __init__ ( 
        self , 
        localized_name :  Optional [ str ]  =  None , 
        resource_name :  Optional [ str ]  =  None , 
        children :  Optional [ List [ "Category" ]]  =  None , 
    )  - > None : 
        self . localized_name :  Optional [ str ]  =  localized_name 
        self . resource_name :  Optional [ str ]  =  resource_name 
        if  children  is  None : 
            self . children :  List [ "Category" ]  =  [] 
        else : 
            self . children :  List [ "Category" ]  =  children 
def   display_categories ( categories :  List [ Category ],  prefix :  str  =  "" )  - > None : 
     """Recursively prints out each category and its children. 
    Args: 
      categories: the map of categories to print 
      prefix: the string to print at the beginning of each line of output 
    Returns: None 
    """ 
    for  category  in  categories : 
        print ( f " { prefix }   { category . localized_name }  [ { category . resource_name } ]" ) 
        if  category . children : 
            display_categories ( 
                category . children ,  prefix = f " { prefix }   { category . localized_name } " 
            ) 
def   main ( client :  GoogleAdsClient ,  customer_id :  str )  - > None : 
     """Fetches the set of valid ProductBiddingCategories.""" 
    ga_service :  GoogleAdsServiceClient  =  client . get_service ( "GoogleAdsService" ) 
    query :  str  =  """ 
        SELECT 
            product_category_constant.localizations, 
            product_category_constant.product_category_constant_parent 
        FROM product_category_constant""" 
    search_request :  SearchGoogleAdsStreamRequest  =  client . get_type ( 
        "SearchGoogleAdsStreamRequest" 
    ) 
    search_request . customer_id  =  customer_id 
    search_request . query  =  query 
    stream :  SearchGoogleAdsStreamResponse  =  ga_service . search_stream ( 
        search_request 
    ) 
    all_categories :  DefaultDict [ str ,  Category ]  =  collections . defaultdict ( 
        lambda :  Category () 
    ) 
    # Creates a map of top level categories. 
    root_categories :  List [ Category ]  =  [] 
    for  batch  in  stream : 
        for  row  in  batch . results : 
            # Gets the product category constant from the row. 
            product_category :  ProductCategoryConstant  =  ( 
                row . product_category_constant 
            ) 
            localized_name :  str  =  "" 
            for  localization  in  product_category . localizations : 
                region :  str  =  localization . region_code 
                lang :  str  =  localization . language_code 
                if  region  ==  "US"  and  lang  ==  "en" : 
                    # Gets the name from the product category localization. 
                    localized_name  =  localization . value 
                    break 
            category :  Category  =  Category ( 
                localized_name = localized_name , 
                resource_name = product_category . resource_name , 
            ) 
            # Ensure resource_name is not None before using as a dict key 
            if  category . resource_name : 
                all_categories [ category . resource_name ]  =  category 
            parent_resource_name :  Optional [ str ]  =  None 
            if  product_category . product_category_constant_parent : 
                parent_resource_name  =  ( 
                    product_category . product_category_constant_parent 
                ) 
            # Links the category to the parent category if any. 
            if  parent_resource_name : 
                # Adds the category as a child category of the parent 
                # category. 
                all_categories [ parent_resource_name ] . children . append ( category ) 
            elif  ( 
                category . resource_name 
            ):   # Ensure it's not None before adding to root 
                # Otherwise adds the category as a root category. 
                root_categories . append ( category ) 
    display_categories ( root_categories ) 
if  __name__  ==  "__main__" : 
    parser  =  argparse . ArgumentParser ( 
        description = "Get Product Bidding Category Constant" 
    ) 
    # 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 :  argparse . Namespace  =  parser . parse_args () 
    # GoogleAdsClient will read the google-ads.yaml configuration file in the 
    # home directory if none is specified. 
    googleads_client :  GoogleAdsClient  =  GoogleAdsClient . load_from_storage ( 
        version = "v22" 
    ) 
    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 ' \t Error with message " { error . message } ".' ) 
            if  error . location : 
                for  field_path_element  in  error . location . field_path_elements : 
                    print ( f " \t\t On field:  { field_path_element . field_name } " ) 
        sys . exit ( 1 ) 
       
    
  
  
 
  
  
  
  
    
  
  
  
  
  
  
  
  
    
  
  
  
  
  
    
    
  
  
  
  
  
  
  Ruby 
  
  
    
      
        
#!/usr/bin/env ruby 
# Encoding: utf-8 
# 
# Copyright 2019 Google LLC 
# 
# Licensed under the Apache License, Version 2.0 (the "License"); 
# you may not use this file except in compliance with the License. 
# You may obtain a copy of the License at 
# 
#     https://www.apache.org/licenses/LICENSE-2.0 
# 
# Unless required by applicable law or agreed to in writing, software 
# distributed under the License is distributed on an "AS IS" BASIS, 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
# See the License for the specific language governing permissions and 
# limitations under the License. 
# 
# This example fetches the set of all ProductCategoryConstants. 
require   'optparse' 
require   'google/ads/google_ads' 
def   display_categories ( categories ,   prefix :   '' ) 
   categories . each   do   | c | 
     puts   " #{ prefix }#{ c . fetch ( :name ) }  [ #{ c . fetch ( :id ) } ]" 
     unless   c . fetch ( :children ) . empty? 
       display_categories ( 
         c . fetch ( :children ), 
         prefix :   " #{ prefix }#{ c . fetch ( :name ) }  > " 
       ) 
     end 
   end 
end 
def   get_product_category_constant ( customer_id ) 
   # GoogleAdsClient will read a config file from 
   # ENV['HOME']/google_ads_config.rb when called without parameters 
   client   =   Google :: Ads :: GoogleAds :: GoogleAdsClient . new 
   query   =   <<~ EOD 
     SELECT 
       product_category_constant . localizations , 
       product_category_constant . product_category_constant_parent 
     FROM 
       product_category_constant 
   EOD 
   ga_service   =   client . service . google_ads 
   response   =   ga_service . search ( 
       customer_id :   customer_id , 
       query :   query , 
   ) 
   # Default the values in the hash to have an Array of children, so that 
   # we can push children in before we've discovered all the data for the 
   # parent category. 
   all_categories   =   Hash . new   do   | h ,   k | 
     h [ k ]   =   { children :   [] } 
   end 
   root_categories   =   Set . new 
   response . each   do   | row | 
     product_category   =   row . product_category_constant 
     localized_product   =   product_category . localizations . detect {   | l | 
       l . region_code   ==   "US"  &&  l . language_code   ==   'en' 
     } 
     category   =   { 
       name :   localized_product . value , 
       id :   product_category . resource_name , 
       children :   [] 
     } 
     all_categories [ category . fetch ( :id ) ]   =   category 
     parent_id   =   product_category . product_category_constant_parent 
     if   parent_id 
       all_categories [ parent_id ][ :children ]  <<  category 
     else 
       root_categories . add ( category ) 
     end 
   end 
   display_categories ( root_categories ) 
end 
if   __FILE__   ==   $0 
   options   =   {} 
   # The following parameter(s) should be provided to run the example. You can 
   # either specify these by changing the INSERT_XXX_ID_HERE values below, or on 
   # the command line. 
   # 
   # Parameters passed on the command line will override any parameters set in 
   # code. 
   # 
   # Running the example with -h will print the command line usage. 
   options [ :customer_id ]   =   'INSERT_CUSTOMER_ID_HERE' 
   OptionParser . new   do   | opts | 
     opts . banner   =   sprintf ( 'Usage: %s [options]' ,   File . basename ( __FILE__ )) 
     opts . separator   '' 
     opts . separator   'Options:' 
     opts . on ( '-C' ,   '--customer-id CUSTOMER-ID' ,   String ,   'Customer ID' )   do   | v | 
       options [ :customer_id ]   =   v 
     end 
     opts . separator   '' 
     opts . separator   'Help:' 
     opts . on_tail ( '-h' ,   '--help' ,   'Show this message' )   do 
       puts   opts 
       exit 
     end 
   end . parse! 
   begin 
     get_product_category_constant ( 
       options . fetch ( :customer_id ) . tr ( "-" ,   "" ) 
     ) 
   rescue   Google :: Ads :: GoogleAds :: Errors :: GoogleAdsError   = >  e 
     e . failure . errors . each   do   | error | 
       STDERR . printf ( "Error with message: %s \n " ,   error . message ) 
       if   error . location 
         error . location . field_path_elements . each   do   | field_path_element | 
           STDERR . printf ( " \t On field: %s \n " ,   field_path_element . field_name ) 
         end 
       end 
       error . error_code . to_h . each   do   | k ,   v | 
         next   if   v   ==   :UNSPECIFIED 
         STDERR . printf ( " \t Type: %s \n\t Code: %s \n " ,   k ,   v ) 
       end 
     end 
     raise 
   end 
end 
        
    
  
  
 
  
  
  
  
    
  
  
  
  
  
  
  
  
    
  
  
  
  
  
    
    
  
  
  
  
  
  
  Perl 
  
  
    
      
        
#!/usr/bin/perl -w 
# 
# Copyright 2019, Google LLC 
# 
# Licensed under the Apache License, Version 2.0 (the "License"); 
# you may not use this file except in compliance with the License. 
# You may obtain a copy of the License at 
# 
#     http://www.apache.org/licenses/LICENSE-2.0 
# 
# Unless required by applicable law or agreed to in writing, software 
# distributed under the License is distributed on an "AS IS" BASIS, 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
# See the License for the specific language governing permissions and 
# limitations under the License. 
# 
# This example fetches the set of all ProductCategoryConstants. 
use   strict ; 
use   warnings ; 
use   utf8 ; 
use   FindBin   qw($Bin) ; 
use   lib   "$Bin/../../lib" ; 
use   Google::Ads::GoogleAds::Client ; 
use   Google::Ads::GoogleAds::Utils::GoogleAdsHelper ; 
use   Google::Ads::GoogleAds::Utils::SearchGoogleAdsIterator ; 
use 
   Google::Ads::GoogleAds::V22::Services::GoogleAdsService::SearchGoogleAdsRequest ; 
use   Getopt::Long   qw(:config auto_help) ; 
use   Pod::Usage ; 
use   Cwd   qw(abs_path) ; 
# The following parameter(s) should be provided to run the example. You can 
# either specify these by changing the INSERT_XXX_ID_HERE values below, or on 
# the command line. 
# 
# Parameters passed on the command line will override any parameters set in 
# code. 
# 
# Running the example with -h will print the command line usage. 
my   $customer_id   =   "INSERT_CUSTOMER_ID_HERE" ; 
sub   get_product_category_constants   { 
   my   ( $api_client ,   $customer_id )   =   @_ ; 
   # Create the search query. 
   my   $search_query   = 
     "SELECT product_category_constant.localizations, "   . 
     "product_category_constant.product_category_constant_parent "   . 
     "FROM product_category_constant" ; 
   # Create a search Google Ads request that will retrieve all product 
   # categories using pages of the specified page size. 
   my   $search_request   = 
     Google::Ads::GoogleAds::V22::Services::GoogleAdsService:: SearchGoogleAdsRequest 
     - >new ({ 
       customerId   = >  $customer_id , 
       query        = >  $search_query 
     }); 
   # Get the GoogleAdsService. 
   my   $google_ads_service   =   $api_client - >GoogleAdsService (); 
   my   $iterator   =   Google::Ads::GoogleAds::Utils:: SearchGoogleAdsIterator - >new ({ 
     service   = >  $google_ads_service , 
     request   = >  $search_request 
   }); 
   # Default the values in the hash to have an array of children, so that 
   # we can push children in before we've discovered all the data for the 
   # parent category. 
   my   $all_categories    =   {}; 
   my   $root_categories   =   [] ; 
   while   ( $iterator - >has_next )   { 
     my   $google_ads_row     =   $iterator - >next ; 
     my   $product_category   =   $google_ads_row - >{ productCategoryConstant }; 
     # Find the US-en localized name in the localizations list. 
     my   @localizations   = 
       grep   {   $_ - >{ regionCode }   eq   "US"   and   $_ - >{ languageCode }   eq   "en"   } 
       @ { $product_category - >{ localizations }}; 
     my   $localized_name   =   @localizations   ?   @localizations [ 0 ] - >{ value }   :   undef ; 
     my   $category         =   { 
       name       = >  $localized_name , 
       id         = >  $product_category - >{ resourceName }, 
       children   = >  [] }; 
     $all_categories - >{ $category - >{ id }}   =   $category ; 
     my   $parent_id   =   $product_category - >{ productCategoryConstantParent }; 
     if   ( $parent_id )   { 
       push   @ { $all_categories - >{ $parent_id }{ children }},   $category ; 
     }   else   { 
       push   @$root_categories ,   $category ; 
     } 
   } 
   display_categories ( $root_categories ,   "" ); 
   return   1 ; 
} 
# Recursively prints out each category node and its children. 
sub   display_categories   { 
   my   ( $categories ,   $prefix )   =   @_ ; 
   foreach   my   $category   ( @$categories )   { 
     printf   "%s%s [%s]\n" ,   $prefix ,   $category - >{ name },   $category - >{ id }; 
     display_categories ( $category - >{ children }, 
       sprintf ( "%s%s > " ,   $prefix ,   $category - >{ name })); 
   } 
} 
# Don't run the example if the file is being included. 
if   ( abs_path ( $0 )   ne   abs_path ( __FILE__ ))   { 
   return   1 ; 
} 
# Get Google Ads Client, credentials will be read from ~/googleads.properties. 
my   $api_client   =   Google::Ads::GoogleAds:: Client - >new (); 
# By default examples are set to die on any server returned fault. 
$api_client - >set_die_on_faults ( 1 ); 
# Parameters passed on the command line will override any parameters set in code. 
GetOptions ( "customer_id=s"   = >  \ $customer_id ); 
# Print the help message if the parameters are not initialized in the code nor 
# in the command line. 
pod2usage ( 2 )   if   not   check_params ( $customer_id ); 
# Call the example. 
get_product_category_constants ( $api_client ,   $customer_id   =~   s/-//g r ); 
=pod 
=head1 NAME 
get_product_category_constants 
=head1 DESCRIPTION 
This example fetches the set of all ProductCategoryConstants. 
=head1 SYNOPSIS 
get_product_category_constants.pl [options] 
    -help                       Show the help message. 
    -customer_id                The Google Ads customer ID. 
=cut 
        
    
  
  
 
  
  
  
  
  
   
 
  
  
  
  
     
  
 
  
    
      
       
    
    
      
    
     
  
       
         
  
  
    
    Geri bildirim gönderin
  
   
 
       
    
    
       
    
  
  
 
  Aksi belirtilmediği sürece bu sayfanın içeriği Creative Commons Atıf 4.0 Lisansı  altında ve kod örnekleri Apache 2.0 Lisansı  altında lisanslanmıştır. Ayrıntılı bilgi için Google Developers Site Politikaları 'na göz atın. Java, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
  Son güncelleme tarihi: 2025-11-03 UTC.
 
 
  
  
    
    
    
      
  
  
    Bize geri bildirimde bulunmak mı istiyorsunuz?
  
   
 
     
  
  
    
      [[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-11-03 UTC."],[],[]]