動的リマーケティング

動的リマーケティング広告はインプレッションのたびにカスタマイズされるディスプレイ広告で、ユーザーがウェブサイトを訪れた過去のデータに基づいて関連する商品が表示されます。AdWords API では、ディスプレイ ネットワークへの動的リマーケティング広告の掲載に使用する FeedsFeedMappingsFeedItems を管理できます。このガイドでは、フィードを使って動的リマーケティング広告を更新する 2 つの例を紹介します。

前提条件

このガイドの内容は、AdWords の管理画面で動的ディスプレイ広告フィードがすでに設定されており、対応するフィード ID も割り当てられていることを前提としています。

動的リマーケティング広告で使用する FeedFeedMappingFeedItemsAPI を使用して作成することもできます。各リマーケティング フィードで必要な属性とプレースホルダ フィールド ID については、フィード プレースホルダのページをご覧ください。

使用事例 1: 不動産情報を追加、削除する

不動産関係のウェブサイトの動的リマーケティング広告があるとします。このサイトでは新しい物件があれば登録され、成約物件は削除されます。このため、動的リマーケティング広告は最新の在庫に合わせて更新しなければなりません。

ステップ 1 - 物件の設定に関する情報を取得する

不動産物件を管理するには Feed不動産カテゴリのプレースホルダ タイプFeedMapping を取得する必要があります。FeedMapping では各プレースホルダ フィールドに対応する Feed 内の FeedAttribute を確認できます。このコードサンプルは FeedMapping を取得し、プレースホルダの fieldId キーと feedAttributeId の値を対応付けるメソッドを定義するものです。

/**
 * Returns a map from placeholder field ID to feed attribute ID for the given
 * combination of feed ID and placeholder type.
 */
public static Map<Integer, Long> getPlaceholderToAttributeMap(Long feedId,
    Integer placeholderType, AdWordsSession session, AdWordsServices adWordsServices)
    throws ApiException, RemoteException {
  Selector selector = new SelectorBuilder()
    .fields("AttributeFieldMappings")
    .equals("FeedId", feedId.toString())
    .equals("Status", FeedMappingStatus.ENABLED.getValue())
    .equals("PlaceholderType", placeholderType.toString())
    .build();

  // Get the FeedMappingService.
  FeedMappingServiceInterface feedMappingService =
    adWordsServices.get(session, FeedMappingServiceInterface.class);

  // Submit the 'get' request.
  FeedMapping feedMapping = feedMappingService.get(selector).getEntries(0);

  // Build a map from placeholder field ID to feed attribute ID from the FeedMapping.
  Map<Integer, Long> fieldMap = Maps.newHashMap();
  for(AttributeFieldMapping attributeFieldMapping :
      feedMapping.getAttributeFieldMappings()) {
    fieldMap.put(attributeFieldMapping.getFieldId(),
        attributeFieldMapping.getFeedAttributeId());
  }
  return fieldMap;
}

ステップ 2 - 新しい物件を追加するオペレーションを作成する

上記のユーティリティ メソッドを準備できたら、新しい物件の追加オペレーションは簡単に作成できます。新しい物件ごとに次の基本的なプロセスを実施します。

  1. ユーティリティ メソッドを使って、プレースホルダ フィールド ID とフィード属性 ID を対応付けたマッピングを取得します。
  2. 物件の属性(ID、名前、画像 URL など)ごとに FeedItemAttributeValue を作成します。その際、feedAttributeId は対応するプレースホルダ フィールドの ID に設定します(マッピングで確認)。
  3. FeedItemAttributeValue では、属性のプレースホルダ フィールド向けに適切な値フィールドを設定します。たとえば物件 ID では stringValue フィールドを設定しますが、これは LISTING_ID フィールドのデータ型が STRING であるためです。
  4. すべての FeedItemAttributeValue を準備できたら、新しい FeedItem を作成します。feedIdFeed の ID に設定し、attributeValuesFeedItemAttributeValue の集合に設定します。
  5. 新しい FeedItemOperation を作成します。operatorADD に設定し、operandFeedItem に設定します。
Long feedId = Long.valueOf("INSERT_FEED_ID_HERE");

List<FeedItemOperation> newFeedItemOperations = Lists.newArrayList();

// First, get the mapping from placeholder field ID to feed attribute ID.
// Note that 16 is the placeholder type ID for the Real Estate vertical.
Map<Integer, Long> fieldMap = getPlaceholderToAttributeMap(feedId,
  16, session, adWordsServices);

FeedItemAttributeValue listingId = new FeedItemAttributeValue();
listingId.setFeedAttributeId(fieldMap.get(1));
listingId.setStringValue("ABC123DEF");

FeedItemAttributeValue listingName = new FeedItemAttributeValue();
listingName.setFeedAttributeId(fieldMap.get(2));
listingName.setStringValue("Two bedroom with magnificent views");

FeedItemAttributeValue finalUrl = new FeedItemAttributeValue();
finalUrl.setFeedAttributeId(fieldMap.get(12));
finalUrl.setStringValues(new String[] {"http://www.example.com/listings/"});

// Insert additional attributes here, such as address, city, description, etc.

FeedItemAttributeValue imageUrl = new FeedItemAttributeValue();
imageUrl.setFeedAttributeId(fieldMap.get(8));
imageUrl.setStringValue("http://www.example.com/listings/images?listing_id=ABC123DEF");

FeedItemAttributeValue contextualKeywords = new FeedItemAttributeValue();
contextualKeywords.setFeedAttributeId(fieldMap.get(11));
contextualKeywords.setStringValues(
    new String[] {"beach community", "ocean view", "two bedroom"});

// Create the FeedItem, specifying the Feed ID and the attributes created above.
FeedItem feedItem = new FeedItem();
feedItem.setFeedId(feedId);
feedItem.setAttributeValues(new FeedItemAttributeValue[]{
    listingId,
    listingName,
    finalUrl,
    // Include additional attributes...
    imageUrl,
    contextualKeywords});

// Create an operation to add each FeedItem.
FeedItemOperation feedItemOperation = new FeedItemOperation();
feedItemOperation.setOperator(Operator.ADD);
feedItemOperation.setOperand(feedItem);
newFeedItemOperations.add(feedItemOperation);

// Repeat the above for additional new listings.

ステップ 3 - 成約物件を削除するオペレーションを作成する

成約物件を削除するプロセスはさらにシンプルです。必要な要素は feedId と各成約物件の feedItemId だけとなります。

ヒント: 成約物件の feedItemId がない場合は、FeedItemService.get を使用して feedItemId を含む FeedItem を取得できます。

物件を削除する基本的な手順は次のとおりです。

  1. 新しい FeedItem を作成します。feedIdFeed の ID に設定し、feedItemId は物件のアイテム ID に設定します。
  2. 新しい FeedItemOperation を作成します。operatorREMOVE に設定し、operandFeedItem に設定します。
Long feedId = Long.valueOf("INSERT_FEED_ID_HERE");

List<Long> feedItemIds = Lists.newArrayList(
    // feed item ID 1,
    // feed item ID 2,
    // ...
    );

List<FeedItemOperation> removeFeedItemOperations = Lists.newArrayList();
for(Long feedItemId : feedItemIds) {
  // When removing you can simply specify the feedId and the feedItemId.
  FeedItem feedItemToRemove = new FeedItem();

  feedItemToRemove.setFeedId(feedId);
  feedItemToRemove.setFeedItemId(feedItemId);

  FeedItemOperation removeOperation = new FeedItemOperation();
  removeOperation.setOperator(Operator.REMOVE);
  removeOperation.setOperand(feedItemToRemove);

  removeFeedItemOperations.add(removeOperation);
}

ステップ 4 - add と remove のオペレーションを引き渡す

このステップは API の他の mutate オペレーションとほぼ同じです。変更を実際に適用するには、作成済みの FeedItemOperation のコレクションを 2 つまとめて FeedItemService.mutate に渡します。

// Get the FeedItemService
FeedItemServiceInterface feedItemService =
    adWordsServices.get(session, FeedItemServiceInterface.class);

// Combine the lists of operations.
List<FeedItemOperation> allOperations = Lists.newArrayList(newFeedItemOperations);
allOperations.addAll(removeFeedItemOperations);

// Pass the collection of FeedItemOperations to the mutate method.
FeedItemReturnValue itemsUpdateReturnValue =
    feedItemService.mutate(allOperations.toArray(new FeedItemOperation[allOperations.size()]));

System.out.printf("Updated %d items%n", itemsUpdateReturnValue.getValue().length);

使用事例 2: 航空券の価格を更新する

航空便の予約サイト向けの動的リマーケティング広告を設定しており、航空券の販売価格の更新や削除を行いたいとします。広告に航空券の正しい価格が表示されるようにするには、各航空券に対応する FeedItem で価格を更新する必要があります。

ステップ 1 - 販売価格を更新するオペレーションを作成する

このプロセスは新しい FeedItem の作成とほぼ同じですが、変更を加える FeedItemAttributeValue を指定することが可能で、プレースホルダ フィールドの ID は航空便カテゴリのフィールド リストから取得します。

価格を修正する航空券ごとに次の基本的なプロセスを実施します。

  1. ユーティリティ メソッドを使って、プレースホルダ フィールド ID とフィード属性 ID を対応付けたマッピングを取得します。
  2. 航空券の属性(販売価格、航空運賃など)ごとに FeedItemAttributeValue を作成します。その際、feedAttributeId は対応するプレースホルダ フィールドの ID に設定します(マッピングで確認)。
  3. FeedItemAttributeValue では、属性のプレースホルダ フィールド向けに適切な値フィールドを設定します。
  4. すべての FeedItemAttributeValue を準備できたら、新しい FeedItem を作成します。feedIdFeed の ID、feedItemId は航空券のフィード アイテム ID、attributeValuesFeedItemAttributeValue のコレクションに設定します。
  5. 新しい FeedItemOperation を作成します。operatorSET に設定し、operandFeedItem に設定します。
Long feedId = Long.valueOf("INSERT_FEED_ID_HERE");

List<FeedItemOperation> updateFeedItemOperations = Lists.newArrayList();

// First, get the mapping from placeholder field ID to feed attribute ID.
// Note that 13 is the placeholder type ID for the Flights vertical.
Map<Integer, Long> fieldMap = getPlaceholderToAttributeMap(feedId,
  13, session, adWordsServices);

// Update the sale price on the first flight
Long newSalePriceFeedItemId = Long.valueOf("INSERT_FEED_ITEM_ID");
FeedItemAttributeValue salePrice = new FeedItemAttributeValue();
salePrice.setFeedAttributeId(fieldMap.get(12));
salePrice.setStringValue("1,309.89 USD");

FeedItem feedItemForNewSalePrice = new FeedItem();
feedItemForNewSalePrice.setFeedId(feedId);
feedItemForNewSalePrice.setFeedItemId(newSalePriceFeedItemId);
feedItemForNewSalePrice.setAttributeValues(new FeedItemAttributeValue[] {salePrice});

// Clear the sale price on the second flight, and update its regular price
Long removedSalePriceFeedItemId = Long.valueOf("INSERT_FEED_ITEM_ID");
FeedItemAttributeValue removedSalePrice = new FeedItemAttributeValue();
removedSalePrice.setFeedAttributeId(fieldMap.get(12));

FeedItemAttributeValue newFlightPrice = new FeedItemAttributeValue();
newFlightPrice.setFeedAttributeId(fieldMap.get(6));
newFlightPrice.setStringValue("499.99 USD");

FeedItem feedItemForRemovedSalePrice = new FeedItem();
feedItemForRemovedSalePrice.setFeedId(feedId);
feedItemForRemovedSalePrice.setFeedItemId(removedSalePriceFeedItemId);
feedItemForRemovedSalePrice.setAttributeValues(
    new FeedItemAttributeValue[] {removedSalePrice, newFlightPrice});

// Create the FeedItemOperations to update the FeedItems.
for(FeedItem feedItemToUpdate : new FeedItem[]{ feedItemForNewSalePrice,
                                                feedItemForRemovedSalePrice}) {
  FeedItemOperation updateFeedItemOperation = new FeedItemOperation();
  updateFeedItemOperation.setOperator(Operator.SET);
  updateFeedItemOperation.setOperand(feedItemToUpdate);

  updateFeedItemOperations.add(updateFeedItemOperation);
}

ステップ 2 - update オペレーションを引き渡す

add や remove のオペレーションと同じように、実際に変更を適用するには作成済みの FeedItemOperation のコレクションを FeedItemService.mutate に渡します。

レポート

動的リマーケティング広告の掲載結果データを集めるには、他のディスプレイ ネットワーク キャンペーンと同じレポートを使用します。

追加情報

このガイドでは不動産と航空券の例を紹介しています。動的リマーケティング広告が別のカテゴリを対象としている場合は、動的リマーケティングのプレースホルダ タイプの全リストを参照して、適切なプレースホルダ タイプ ID とプレースホルダ フィールド ID を取得してください。

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

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