Reminder: v201702 will be sunset on February 28, 2018.

DFP セールス マネージャの商品テンプレートと商品

このガイドでは、商品の概要と、API で ProductTemplate オブジェクトを使って Product オブジェクトを作成する方法について説明します。

はじめに

DFP セールス マネージャの商品とは、販売する在庫のセグメントを表すもので、営業チームが作成します。エンティティとして見ると、商品は広告申込情報のプロポーザル、つまり ProposalLineItem オブジェクトを作成するためのテンプレートです。商品テンプレートを作成すると、商品はバックグラウンドで自動的に作成されます。 商品では、プロポーザル広告申込情報の各フィールドの既定値を定義します。名前、商品タイプ、レートタイプ、ターゲティング初期設定といったフィールドがあります。ターゲティング初期設定は、デフォルトで設定するターゲティングや、カスタマイズ可能にするターゲティング フィールドを指定するものです。プロポーザル広告申込情報は、RateCard オブジェクトと Product オブジェクト(有効にした後)を組み合わせて作成されます。

商品を作成する

商品を作成するには、まずローカルで ProductTemplate オブジェクトを作成します。次にオブジェクトの定義として、名前と、必要に応じてカタログ内の他の商品テンプレートと区別するための説明を指定します。

Java

  // Create a product template.
  ProductTemplate productTemplate = new ProductTemplate();
  productTemplate.setName("Product template #" + new Random().nextInt(Integer.MAX_VALUE));
  productTemplate.setDescription("This product template creates standard proposal line items "
      + "targeting Chrome browsers with product segmentation on ad units and geo targeting.");
    

Python

  # Initialize appropriate service.
  product_template_service = client.GetService(
      'ProductTemplateService', version='v201702')

  # Create a product template.
  product_template = {
      'name': ('Product template #%d' % uuid.uuid4()),
      'description': ('This product template creates standard proposal line '
                      'items targeting Chrome browsers with product '
                      'segmentation on ad units and geo targeting.'),
      ...
    

PHP

    $productTemplateService =
        $dfpServices->get($session, ProductTemplateService::class);

    $productTemplate = new ProductTemplate();
    $productTemplate->setName('Product template #' . uniqid());
    $productTemplate->setDescription('This product template creates standard '
        . 'proposal line items targeting Chrome browsers with product '
        . 'segmentation on ad units and geo targeting.');
    

C#

  // Get the ProductTemplateService.
  ProductTemplateService productTemplateService =
      (ProductTemplateService) user.GetService(DfpService.v201702.ProductTemplateService);

  // Create a product template.
  ProductTemplate productTemplate = new ProductTemplate();
  productTemplate.name = "Product template #" + new Random().Next(int.MaxValue);
  productTemplate.description = "This product template creates standard proposal line items "
      + "targeting Chrome browsers with product segmentation on ad units and geo targeting.";
    

ここで名前マクロを設定できます。このフィールドにより、作成される商品の名前が生成されます。指定した商品セグメントに基づいて、1 つの商品テンプレートから複数の商品が作成されます。

Java

  // Set the name macro which will be used to generate the names of the products.
  // This will create a segmentation based on the line item type, ad unit, and location.
  productTemplate.setNameMacro("<line-item-type> - <ad-unit> - <template-name> - <location>");
    

Python

      ...
      'nameMacro': ('<line-item-type> - <ad-unit> - '
                    '<template-name> - <location>'),
      ...
    

PHP

    // Set the name macro which will be used to generate the names of the
    // products. This will create a segmentation based on the line item type, ad
    // unit, and location.
    $productTemplate->setNameMacro(
        '<line-item-type> - <ad-unit> - <template-name> - <location>');
    

C#

  // Set the name macro which will be used to generate the names of the products.
  // This will create a segmentation based on the line item type, ad unit, and location.
  productTemplate.nameMacro = "<line-item-type> - <ad-unit> - <template-name> - <location>";
    

以下のフィールドは、プロポーザル広告申込情報の入稿仕様(広告申込情報タイプ、商品タイプ、料金、クリエイティブ、クリエイティブの配信設定など)に関連したものです。

Java

  // Set the product type so the created proposal line items will be trafficked in DFP.
  productTemplate.setProductType(ProductType.DFP);

  // Set rate type to create CPM priced proposal line items.
  productTemplate.setRateType(RateType.CPM);
  productTemplate.setDeliveryRateType(DeliveryRateType.AS_FAST_AS_POSSIBLE);

  // Optionally set the creative rotation of the product to serve one or more creatives.
  productTemplate.setRoadblockingType(RoadblockingType.ONE_OR_MORE);

  // Create the master creative placeholder.
  CreativePlaceholder creativeMasterPlaceholder = new CreativePlaceholder();
  creativeMasterPlaceholder.setSize(new Size(728, 90, false));

  // Create companion creative placeholders.
  CreativePlaceholder companionCreativePlaceholder = new CreativePlaceholder();
  companionCreativePlaceholder.setSize(new Size(300, 250, false));

  // Set the size of creatives that can be associated with the product template.
  productTemplate.setCreativePlaceholders(
      new CreativePlaceholder[] {creativeMasterPlaceholder, companionCreativePlaceholder});

  // Set the type of proposal line item to be created from the product template.
  productTemplate.setLineItemType(LineItemType.STANDARD);
    

Python

      ...
      'productType': 'DFP',
      'rateType': 'CPM',
      'roadblockingType': 'ONE_OR_MORE',
      'deliveryRateType': 'AS_FAST_AS_POSSIBLE',
      'creativePlaceholders': [
          {
              'size': {
                  'width': '728',
                  'height': '90'
              }
          },
          {
              'size': {
                  'width': '300',
                  'height': '250'
              }
          }
      ],
      'lineItemType': 'STANDARD',
      ...
    

PHP

    // Set the product type so the created proposal line items will be
    // trafficked in DFP.
    $productTemplate->setProductType(ProductType::DFP);

    // Set rate type to create CPM priced proposal line items.
    $productTemplate->setRateType(RateType::CPM);
    $productTemplate->setDeliveryRateType(
        DeliveryRateType::AS_FAST_AS_POSSIBLE);

    // Optionally set the creative rotation of the product to serve one or more
    // creatives.
    $productTemplate->setRoadblockingType(RoadblockingType::ONE_OR_MORE);

    // Set the size of creatives that can be associated with the product
    // template.
    $creativePlaceholder1 = new CreativePlaceholder();
    $size = new Size();
    $size->setWidth(728);
    $size->setHeight(90);
    $size->setIsAspectRatio(false);
    $creativePlaceholder1->setSize($size);
    $creativePlaceholder2 = new CreativePlaceholder();
    $size = new Size();
    $size->setWidth(300);
    $size->setHeight(250);
    $size->setIsAspectRatio(false);
    $creativePlaceholder2->setSize($size);
    $productTemplate->setCreativePlaceholders(
        [$creativePlaceholder1, $creativePlaceholder2]);

    // Set the type of proposal line item to be created from the product
    // template.
    $productTemplate->setLineItemType(LineItemType::STANDARD);
    

C#

  // Set the product type so the created proposal line items will be trafficked in DFP.
  productTemplate.productType = ProductType.DFP;

  // Set rate type to create CPM priced proposal line items.
  productTemplate.rateType = RateType.CPM;

  // Optionally set the creative rotation of the product to serve one or more creatives.
  productTemplate.roadblockingType = RoadblockingType.ONE_OR_MORE;
  productTemplate.deliveryRateType = DeliveryRateType.AS_FAST_AS_POSSIBLE;

  // Create the master creative placeholder.
  CreativePlaceholder creativeMasterPlaceholder = new CreativePlaceholder();
  creativeMasterPlaceholder.size =
      new Size() {width = 728, height = 90, isAspectRatio = false};

  // Create companion creative placeholders.
  CreativePlaceholder companionCreativePlaceholder = new CreativePlaceholder();
  companionCreativePlaceholder.size =
      new Size() {width = 300, height = 250, isAspectRatio = false};

  // Set the size of creatives that can be associated with the product template.
  productTemplate.creativePlaceholders =
      new CreativePlaceholder[] {creativeMasterPlaceholder, companionCreativePlaceholder};

  // Set the type of proposal line item to be created from the product template.
  productTemplate.lineItemType = LineItemType.STANDARD;
    

次は、商品にターゲティングの既定値を定義します。この値は商品から作成されるプロポーザル広告申込情報に継承されます。 同様に、プロポーザル広告申込情報のターゲティングは商品テンプレートに直接追加できます。 これは ProductTemplateTargeting オブジェクトを使用して行います。

Java

  // Get the root ad unit ID used to target the whole site.
  String rootAdUnitId = networkService.getCurrentNetwork().getEffectiveRootAdUnitId();

  // Create ad unit targeting for the root ad unit (i.e. the whole network).
  AdUnitTargeting adUnitTargeting = new AdUnitTargeting();
  adUnitTargeting.setAdUnitId(rootAdUnitId);
  adUnitTargeting.setIncludeDescendants(true);

  // Create geo targeting for the US.
  Location countryLocation = new Location();
  countryLocation.setId(2840L);

  // Create geo targeting for Hong Kong.
  Location regionLocation = new Location();
  regionLocation.setId(2344L);

  GeoTargeting geoTargeting = new GeoTargeting();
  geoTargeting.setTargetedLocations(new Location[] {countryLocation, regionLocation});

  // Add browser targeting to Chrome on the product template distinct from product segmentation.
  Browser chromeBrowser = new Browser();
  chromeBrowser.setId(500072L);

  BrowserTargeting browserTargeting = new BrowserTargeting();
  browserTargeting.setBrowsers(new Browser[] {chromeBrowser});

  TechnologyTargeting technologyTargeting = new TechnologyTargeting();
  technologyTargeting.setBrowserTargeting(browserTargeting);

  Targeting productTemplateTargeting = new Targeting();
  productTemplateTargeting.setTechnologyTargeting(technologyTargeting);

  productTemplate.setBuiltInTargeting(productTemplateTargeting);
    

Python

      ...
      'customizableAttributes': {
          'allowPlacementTargetingCustomization': True,
      },
      'builtInTargeting': {
          'technologyTargeting': {
              # Set browser targeting to Chrome.
              'browserTargeting': {
                  {
                      'browsers': [
                          {
                              'id': '500072'
                          }
                      ]
                  }
              }
          }
      },
      ...
    

PHP

    // Add browser targeting to Chrome on the product template distinct from
    // product segmentation.
    $targeting = new Targeting();
    $technologyTargeting = new TechnologyTargeting();
    $browserTargeting = new BrowserTargeting();
    $browser = new Browser();
    $browser->setId(500072);
    $browserTargeting->setBrowsers([$browser]);
    $technologyTargeting->setBrowserTargeting($browserTargeting);
    $targeting->setTechnologyTargeting($technologyTargeting);
    $productTemplate->setBuiltInTargeting($targeting);

    // Allow placement targeting to be customized on the proposal line item.
    $customizableAttributes = new CustomizableAttributes();
    $customizableAttributes->setAllowPlacementTargetingCustomization(true);
    $productTemplate->setCustomizableAttributes($customizableAttributes);

    // Add inventory and geo targeting as product segmentation.
    $productSegmentation = new ProductSegmentation();
    // Create ad unit targeting for the root ad unit (i.e. the whole network).
    $adUnitTargeting = new AdUnitTargeting();
    $adUnitTargeting->setAdUnitId(
        $networkService->getCurrentNetwork()->getEffectiveRootAdUnitId());
    $adUnitTargeting->setIncludeDescendants(true);
    $productSegmentation->setAdUnitSegments([$adUnitTargeting]);
    // Create geo targeting for the US and Hong Kong.
    $geoTargeting = new GeoTargeting();
    $location1 = new Location();
    $location1->setId(2840); // US
    $location2 = new Location();
    $location2->setId(2344); // Hong Kong
    $geoTargeting->setTargetedLocations([$location1, $location2]);
    

C#

  // Get the root ad unit ID used to target the whole site.
  String rootAdUnitId = networkService.getCurrentNetwork().effectiveRootAdUnitId;

  // Create ad unit targeting for the root ad unit (i.e. the whole network).
  AdUnitTargeting adUnitTargeting = new AdUnitTargeting();
  adUnitTargeting.adUnitId = rootAdUnitId;
  adUnitTargeting.includeDescendants = true;

  // Create geo targeting for the US.
  Location countryLocation = new Location();
  countryLocation.id = 2840L;

  // Create geo targeting for Hong Kong.
  Location regionLocation = new Location();
  regionLocation.id = 2344L;

  GeoTargeting geoTargeting = new GeoTargeting();
  geoTargeting.targetedLocations = new Location[] {countryLocation, regionLocation};

  // Add browser targeting to Chrome on the product template distinct from product
  // segmentation.
  Browser chromeBrowser = new Browser();
  chromeBrowser.id = 500072L;

  BrowserTargeting browserTargeting = new BrowserTargeting();
  browserTargeting.browsers = new Browser[] {chromeBrowser};

  TechnologyTargeting technologyTargeting = new TechnologyTargeting();
  technologyTargeting.browserTargeting = browserTargeting;

  Targeting productTemplateTargeting = new Targeting();
  productTemplateTargeting.technologyTargeting = technologyTargeting;

  productTemplate.builtInTargeting = productTemplateTargeting;

  productTemplate.customizableAttributes = new CustomizableAttributes() {
    allowPlacementTargetingCustomization = true
  };
    

商品セグメントを使用すると、複数のターゲティング オプションの組み合わせを基に、一連のプロポーザル広告申込情報の設定を共有する複数の商品を作成できます。 上記のセクションでは、GeoTargeting オブジェクトに対して複数の場所を追加しました。 これを 1 つのセグメントとして商品テンプレートに追加すると、米国と香港をそれぞれターゲットとする 2 つの商品が作成されます。

Java

  // Add inventory and geo targeting as product segmentation.
  ProductSegmentation productSegmentation = new ProductSegmentation();
  productSegmentation.setAdUnitSegments(new AdUnitTargeting[] {adUnitTargeting});
  productSegmentation.setGeoSegment(geoTargeting);

  productTemplate.setProductSegmentation(productSegmentation);
    

Python

      ...
      'productSegmentation': {
          'geoSegment': {
              'targetedLocations': [
                  {'id': '2840',
                   'displayName': 'US'},
                  {'id': '2344',
                   'displayName': 'Hong Kong'}
              ]
          },
          'adUnitSegments': [{
              'adUnitId': (network_service.getCurrentNetwork()[
                  'effectiveRootAdUnitId']),
              'includeDescendants': 'true'
          }]
      }
      ...
    

PHP

    $productSegmentation->setGeoSegment($geoTargeting);
    $productTemplate->setProductSegmentation($productSegmentation);
    

C#

  // Add inventory and geo targeting as product segmentation.
  ProductSegmentation productSegmentation = new ProductSegmentation();
  productSegmentation.adUnitSegments = new AdUnitTargeting[] {adUnitTargeting};
  productSegmentation.geoSegment = geoTargeting;

  productTemplate.productSegmentation = productSegmentation;
    

これらのフィールドを設定した後、商品テンプレートの配列に対して createProductTemplates を呼び出すと、新しい ProductTemplate オブジェクトが作成されます。

Java

  // Create the product template on the server.
  ProductTemplate[] productTemplates =
      productTemplateService.createProductTemplates(new ProductTemplate[] {productTemplate});
    

Python

  # Create product templates on the server.
  product_templates = product_template_service.createProductTemplates(
      [product_template])
    

PHP

    // Create the product template on the server.
    $results =
        $productTemplateService->createProductTemplates([$productTemplate]);
    

C#

  // Create the product template on the server.
  ProductTemplate[] productTemplates = productTemplateService.createProductTemplates(
      new ProductTemplate[] {productTemplate});
    

商品テンプレートは INACTIVE ステータスで作成されます。対応する商品も同様です。

商品テンプレートを有効にする

商品テンプレートから作成される商品を使用できるようにするには、商品テンプレートを有効にする必要があります。 これには、ActivateProductTemplates アクションを使用します。

Java

    // Create a statement to select a product template.
    StatementBuilder statementBuilder = new StatementBuilder()
        .where("WHERE id = :id")
        .orderBy("id ASC")
        .limit(StatementBuilder.SUGGESTED_PAGE_LIMIT)
        .withBindVariableValue("id", productTemplateId);

      // Create action.
      com.google.api.ads.dfp.axis.v201702.ActivateProductTemplates action =
          new com.google.api.ads.dfp.axis.v201702.ActivateProductTemplates();

      // Perform action.
      UpdateResult result =
          productTemplateService.performProductTemplateAction(
              action, statementBuilder.toStatement());
    

Python

  # Create query.
  values = [{
      'key': 'id',
      'value': {
          'xsi_type': 'NumberValue',
          'value': product_template_id
      }
  }]
  query = 'WHERE id = :id'
  statement = dfp.FilterStatement(query, values, 1)

      # Perform action.
      result = product_template_service.performProductTemplateAction(
          {'xsi_type': 'ActivateProductTemplates'}, statement.ToStatement())
    

PHP

    // Create a statement to select the product templates to activate.
    $pageSize = StatementBuilder::SUGGESTED_PAGE_LIMIT;
    $statementBuilder = (new StatementBuilder())
        ->where('id = :id')
        ->orderBy('id ASC')
        ->limit($pageSize)
        ->withBindVariableValue('id', $productTemplateId);

      // Create and perform action.
      $action = new ActivateProductTemplatesAction();
      $result = $productTemplateService->performProductTemplateAction($action,
          $statementBuilder->toStatement());
    

C#

  // Create statement to select a product template by ID.
  StatementBuilder statementBuilder = new StatementBuilder()
      .Where("id = :id")
      .OrderBy("id ASC")
      .Limit(StatementBuilder.SUGGESTED_PAGE_LIMIT)
      .AddValue("id", productTemplateId);

  // Create action.
  Google.Api.Ads.Dfp.v201702.ActivateProductTemplates action =
      new Google.Api.Ads.Dfp.v201702.ActivateProductTemplates();

  // Perform action.
  UpdateResult result = productTemplateService.performProductTemplateAction(action,
      statementBuilder.ToStatement());
    

これで商品テンプレートと商品が有効になり、プロポーザル広告申込情報の作成に使用できるようになります。

商品を取得する

新しい ProductTemplate オブジェクトを作成した後、商品テンプレートによって返された ID を検索することで、作成済みの商品を再度取得できます。

Java

  // Create a statement to select products.
  StatementBuilder statementBuilder = new StatementBuilder()
      .where("productTemplateId = :productTemplateId")
      .orderBy("id ASC")
      .limit(StatementBuilder.SUGGESTED_PAGE_LIMIT)
      .withBindVariableValue("productTemplateId", productTemplateId);

    ProductPage page =
        productService.getProductsByStatement(statementBuilder.toStatement());
    

Python

  query = 'WHERE productTemplateId = :productTemplateId'
  values = [
      {'key': 'productTemplateId',
       'value': {
           'xsi_type': 'TextValue',
           'value': product_template_id
       }},
  ]
  # Create a statement to select products.
  statement = dfp.FilterStatement(query, values)

    response = product_service.getProductsByStatement(statement.ToStatement())
    

PHP

    // Create a statement to select products.
    $pageSize = StatementBuilder::SUGGESTED_PAGE_LIMIT;
    $statementBuilder = (new StatementBuilder())
        ->where('productTemplateId = :productTemplateId')
        ->orderBy('id ASC')
        ->limit($pageSize)
        ->withBindVariableValue('productTemplateId', $productTemplateId);

      $page = $productService->getProductsByStatement(
          $statementBuilder->toStatement());
    

C#

  // Create a statement to select products.
  int pageSize = StatementBuilder.SUGGESTED_PAGE_LIMIT;
  StatementBuilder statementBuilder = new StatementBuilder()
      .Where("productTemplateId = :productTemplateId")
      .OrderBy("id ASC")
      .Limit(pageSize)
      .AddValue("productTemplateId", productTemplateId);

ProductPage page = productService.getProductsByStatement(
    statementBuilder.ToStatement());
    

ローカルで商品を同期する

すべての商品のローカル カタログを作成する場合は、初回のクエリで次のようなステートメントを使ってすべての商品を選択します。

Java

  StatementBuilder statementBuilder = new StatementBuilder()
      .orderBy("id ASC")
      .limit(StatementBuilder.SUGGESTED_PAGE_LIMIT);
    

Python

  statement = dfp.FilterStatement('ORDER BY id ASC')
    

PHP

  $statementBuilder->OrderBy('id ASC')
      ->Limit(StatementBuilder::SUGGESTED_PAGE_LIMIT);
    

C#

  StatementBuilder statementBuilder = new StatementBuilder()
      .OrderBy("id ASC")
      .Limit(StatementBuilder.SUGGESTED_PAGE_LIMIT);
    

2 回目以降は、Product オブジェクトで lastModifiedDateTime プロパティを使用してフィルタリングします。 前回の同期の日付を lastModifiedDateTime 変数に渡すと、変更された商品のみを取得でき、時間の短縮になります。

Java

  StatementBuilder statementBuilder = new StatementBuilder()
      .where("lastModifiedDateTime > :lastModifiedDateTime")
      .orderBy("id ASC")
      .limit(StatementBuilder.SUGGESTED_PAGE_LIMIT)
      .withBindVariable("lastModifiedDateTime", lastSyncDateTime);
    

Python

  values = [{
      'key': 'dateTimeString',
      'value': {
          'xsi_type': 'TextValue',
          'value': lastSyncDateTime.strftime('%Y-%m-%dT%H:%M:%S')
      }
  }, {
      'key': 'orderId',
      'value': {
          'xsi_type': 'NumberValue',
          'value': order_id
      }
  }]
  query = 'WHERE lastModifiedDateTime >= :dateTimeString AND orderId = :orderId'
  statement = dfp.FilterStatement(query, values)
    

PHP

  $statementBuilder->Where('lastModifiedDateTime >= :lastModifiedDateTime')
      ->OrderBy('id ASC')
      ->Limit(StatementBuilder::SUGGESTED_PAGE_LIMIT)
      ->WithBindVariableValue(
          'lastModifiedDateTime',
          DateTimeUtils::ToDfpDateTime(lastSyncDateTime)
      );
    

C#

   StatementBuilder statementBuilder = new StatementBuilder()
       .Where("lastModifiedDateTime > :lastModifiedDateTime")
       .OrderBy("id ASC")
       .Limit(StatementBuilder.SUGGESTED_PAGE_LIMIT)
       .AddValue("lastModifiedDateTime", lastSyncDateTime);
    

ローカル版の「カタログ」にネットワークの商品をすべて追加しておくと、追加の API 呼び出しを行わなくてもそれらの商品を再利用できます。

次のステップ

フィードバックを送信...

DoubleClick for Publishers
DoubleClick for Publishers
ご不明な点がありましたら、Google のサポートページをご覧ください。