フィード サービスの概要

このガイドではフィードについて説明しますが、フィードは AdWords アカウントで表形式のデータを使用する汎用的で柔軟な手段です。表形式のデータを使用する AdWords の機能には、広告表示オプション、広告カスタマイザ、動的リマーケティングなどがあります。このガイドではサイトリンク表示オプションを使ってフィード サービスの使い方を説明しますが、後述するとおり、プレースホルダ タイプを変えれば他の表形式のデータにも応用できます。

このガイドでは Java のコードサンプルを使用します。その他のプログラム言語のコードサンプルについては、このガイドの最後にまとめられているをご覧ください。

使用例

AdWords を使用してサイトへのユーザー アクセスを促進している場合は、広告にサイトリンクを表示すれば、ユーザーがサイトの特定のセクションに直接アクセスできます。

広告に表示されるサイトリンクには次のようなものがあります。

サイトリンクの名前 サイトリンクの最終ページ URL
ホームページ http://www.example.com
店舗検索 http://www.example.com/locations
セール中の商品http://www.example.com/discounts
サポート http://www.example.com/support
商品 http://www.example.com/prods
会社概要 http://www.example.com/about

データは表形式であり、各列にはサイトリンクの特性、各行にはサイトリンクの値を挿入します。

フィード サービス

フィードの作成や管理では、次のような相互に関連するサービスを利用できます。

FeedService
このサービスでは表形式のデータの内容を AdWords に伝えます。具体的には Feed(表)の名前または見出しや列の名前、データタイプなどです。
FeedItemService
このサービスではフィードにデータを入力します。各 FeedItem は表内の行を表します。
FeedMappingService
このサービスではフィードの使い方を指定します。たとえば表の列と AdWords の特定の機能で必要なフィールドについて、対応付けの方法を指定します。このガイドではサイトリンクで使用するフィードの対応付けの方法を紹介します。
CustomerFeedService
このサービスを利用すると、顧客のアカウント全体(すべてのキャンペーンと広告グループ)でフィードを有効にできます。
CampaignFeedService
このサービスを利用すると、キャンペーン全体(すべての広告グループ)でフィードを有効にできます。
AdGroupFeedService
このサービスを利用すると、特定の広告グループでフィードを有効にできます。

Java のコードサンプル

下記のコードサンプルではサイトリンクのフィードを追加し、Java のクライアント ライブラリを使用してキャンペーンと関連付けます。コードサンプル全体を確認したい場合は、このガイドの最後にあるをご覧ください。

サイトリンクをキャンペーンに追加するには:

  1. フィードを作成します。
  2. フィードに情報を入力します。
  3. フィードとサイトリンクのプレースホルダのフィールドを対応付けます
  4. フィードとユーザー、キャンペーン、または広告グループを関連付けます
  5. フィード アイテムを有効にするスケジュールを設定します(任意)。


1. サイトリンクのフィードを作成する

FeedService ではアップロードするデータの形式を記述します。このデータは Feed(表)の名前または見出しと FeedAttribute(列)の集合で構成されます。各 FeedAttribute にも名前(列ヘッダー)とデータタイプを割り当てます。

次の例では createSiteLinksFeed() が FeedService を使用して Feed を作成し、サイトリンクの表形式のデータを保持する FeedAttribute(列)も設定します。

private static void createSiteLinksFeed(AdWordsServices adWordsServices, AdWordsSession session,
    SiteLinksDataHolder siteLinksData, String feedName) throws Exception {
  // Get the FeedService.
  FeedServiceInterface feedService = adWordsServices.get(session, FeedServiceInterface.class);

  // Create attributes.
  FeedAttribute textAttribute = new FeedAttribute();
  textAttribute.setType(FeedAttributeType.STRING);
  textAttribute.setName("Link Text");
  FeedAttribute finalUrlAttribute = new FeedAttribute();
  finalUrlAttribute.setType(FeedAttributeType.URL_LIST);
  finalUrlAttribute.setName("Link Final URLs");
  FeedAttribute line1Attribute = new FeedAttribute();
  line1Attribute.setType(FeedAttributeType.STRING);
  line1Attribute.setName("Line 1 Description");
  FeedAttribute line2Attribute = new FeedAttribute();
  line2Attribute.setType(FeedAttributeType.STRING);
  line2Attribute.setName("Line 2 Description");

  // Create the feed.
  Feed siteLinksFeed = new Feed();
  siteLinksFeed.setName(feedName);
  siteLinksFeed.setAttributes(
      new FeedAttribute[] {textAttribute, finalUrlAttribute, line1Attribute, line2Attribute});
  siteLinksFeed.setOrigin(FeedOrigin.USER);

  // Create operation.
  FeedOperation operation = new FeedOperation();
  operation.setOperand(siteLinksFeed);
  operation.setOperator(Operator.ADD);

  // Add the feed.
  FeedReturnValue result = feedService.mutate(new FeedOperation[] {operation});

  Feed savedFeed = result.getValue()[0];
  siteLinksData.siteLinksFeedId = savedFeed.getId();
  FeedAttribute[] savedAttributes = savedFeed.getAttributes();
  siteLinksData.linkTextFeedAttributeId = savedAttributes[0].getId();
  siteLinksData.linkFinalUrlFeedAttributeId = savedAttributes[1].getId();
  siteLinksData.line1FeedAttributeId = savedAttributes[2].getId();
  siteLinksData.line2FeedAttributeId = savedAttributes[3].getId();
  System.out.printf("Feed with name '%s' and ID %d with linkTextAttributeId %d"
      + " and linkFinalUrlAttributeId %d and line1AttributeId %d"
      + " and line2AttributeId %d was created.%n",
      savedFeed.getName(),
      savedFeed.getId(),
      savedAttributes[0].getId(),
      savedAttributes[1].getId(),
      savedAttributes[2].getId(),
      savedAttributes[3].getId());
}

サイトリンクで使用する表形式のデータの説明として、このメソッドでは Link TextFinal URLsLine 1Line 2 という名前の FeedAttribute(列)を設定して Feed を作成します。Feed の名前は Feed For Sitelinks というわかりやすいものにしました。Feed の原点は FeedOrigin.USER に設定し、FeedItem(行)にデータを入力するのが広告主様であることを宣言します(フィードへのデータ入力を AdWords が担当するケースもあります)。

FeedService ではフィードを作成するために mutate オペレーションを呼び出します。Feed の作成に成功すると、FeedService はフィードの ID と各 FeedAttribute(列)の ID を返します。そうした ID は他のサービスでも使用するので必ず保存しておきます。この例では簡単に SiteLinksDataHolder 型のオブジェクト siteLinksData を作成し、ID を保持する適切なフィールドも設定しています。このオブジェクトは次以降の手順で ID を取得する際に使用します。このオブジェクトはどの言語でも同じように作成できます。

この Feed にはサイトリンクで必要な数だけ列を設定しています。ただし Feed にもっと多くの列を設定し、AdWords で使用するデータをその一部にだけ格納するという選択もできます。余っている列は、たとえばどの FeedItem(行)がどのキャンペーンまたは広告グループに該当するのか、マッチングする場合に活用することができます(詳細は後述)。

2. フィードにデータを入力する

AdWords 向けにデータの形式を記述したら、FeedItemService で FeedItem(行)を追加してサイトリンクのデータを入力できます。

まずはヘルパー メソッド newSiteLinkFeedItemAddOperation() を使って FeedItem を作成します。このヘルパー メソッドはサイトリンクに関する情報(テキストラベル、最終ページ URL、広告文)と Feed の FeedAttribute(列)の ID を利用して、新しい FeedItem(行)を作成します。新たに作成した FeedItem は ADD オペレーションにラップして返されます。

FeedItem の作成方法を理解するには、表の構造についても把握する必要があります。各行はセルの集合です。各セルは特定の列にあり、なんらかのデータを格納する役割を持ちます。同様に FeedItem(行)は FeedItemAttributeValue(セル)の集合であり、各 FeedItemAttributeValue(セル)は FeedAttribute(セルのある列)の ID と stringValue(文字列など)を格納します。

private static FeedItemOperation newSiteLinkFeedItemAddOperation(
    SiteLinksDataHolder siteLinksData, String text, String finalUrl, String line1, String line2) {
  return newSiteLinkFeedItemAddOperation(siteLinksData, text, finalUrl, line1, line2, null);
}

private static FeedItemOperation newSiteLinkFeedItemAddOperation(
    SiteLinksDataHolder siteLinksData, String text, String finalUrl, String line1, String line2,
    Long locationId) {
  // Create the FeedItemAttributeValues for our text values.
  FeedItemAttributeValue linkTextAttributeValue = new FeedItemAttributeValue();
  linkTextAttributeValue.setFeedAttributeId(siteLinksData.linkTextFeedAttributeId);
  linkTextAttributeValue.setStringValue(text);
  FeedItemAttributeValue linkFinalUrlAttributeValue = new FeedItemAttributeValue();
  linkFinalUrlAttributeValue.setFeedAttributeId(siteLinksData.linkFinalUrlFeedAttributeId);
  linkFinalUrlAttributeValue.setStringValues(new String[] {finalUrl});
  FeedItemAttributeValue line1TextAttributeValue = new FeedItemAttributeValue();
  line1TextAttributeValue.setFeedAttributeId(siteLinksData.line1FeedAttributeId);
  line1TextAttributeValue.setStringValue(line1);
  FeedItemAttributeValue line2TextAttributeValue = new FeedItemAttributeValue();
  line2TextAttributeValue.setFeedAttributeId(siteLinksData.line2FeedAttributeId);
  line2TextAttributeValue.setStringValue(line2);

  // Create the feed item and operation.
  FeedItem item = new FeedItem();
  item.setFeedId(siteLinksData.siteLinksFeedId);
  item.setAttributeValues(new FeedItemAttributeValue[] {linkTextAttributeValue,
      linkFinalUrlAttributeValue, line1TextAttributeValue, line2TextAttributeValue});

  // OPTIONAL: Use geographical targeting on a feed item.
  // IDs can be found in the documentation or retrieved with the
  // LocationCriterionService.
  if (locationId != null) {
    Location location = new Location();
    location.setId(locationId);
    item.setGeoTargeting(location);
    // OPTIONAL: Restrict targeting only to people physically within the location.
    FeedItemGeoRestriction geoTargetingRestriction = new FeedItemGeoRestriction();
    geoTargetingRestriction.setGeoRestriction(GeoRestriction.LOCATION_OF_PRESENCE);
    item.setGeoTargetingRestriction(geoTargetingRestriction);
  }

  // Optional: use item.setStartTime() and item.setEndTime() to specify the
  // time period for the feed to deliver.  The example below will make the feed
  // start now and stop in one month.
  // Make sure you specify the DateTime in the customer's time zone.  You can
  // retrieve this from customer.getDateTimeZone().
  //   item.setStartTime(new DateTime(customerTimeZone).toString("yyyyMMdd HHmmss"));
  //   item.setEndTime(new DateTime(customerTimeZone).plusMonths(1).toString("yyyyMMdd HHmmss"));

  // Optional: use item.setScheduling() to specify time and days of the week for feed to deliver.
  FeedItemOperation operation = new FeedItemOperation();
  operation.setOperand(item);
  operation.setOperator(Operator.ADD);
  return operation;
}

次のメソッド createSiteLinksFeedItems() はすべての FeedItem とそれらを格納する FeedItemOperation を作成します。ヘルパー メソッドは、作成するサイトリンクごとに異なる情報を使って呼び出されます。

mutate の呼び出しで返された FeedItem には ID が含まれており、これは今後の利用に備えて siteLinksData に保存します(このオブジェクトが作成済みで、ID を保持する適切なフィールドがあることを前提とした説明です)。

private static void createSiteLinksFeedItems(AdWordsServices adWordsServices,
    AdWordsSession session, SiteLinksDataHolder siteLinksData) throws Exception {
  // Get the FeedItemService.
  FeedItemServiceInterface feedItemService =
      adWordsServices.get(session, FeedItemServiceInterface.class);

  // Create operations to add FeedItems.
  FeedItemOperation home = newSiteLinkFeedItemAddOperation(siteLinksData, "Home",
      "http://www.example.com", "Home line 1", "Home line 2");
  FeedItemOperation stores = newSiteLinkFeedItemAddOperation(siteLinksData, "Stores",
      "http://www.example.com/stores", "Stores line 1", "Stores line 2");
  FeedItemOperation onSale = newSiteLinkFeedItemAddOperation(siteLinksData, "On Sale",
      "http://www.example.com/sale", "On Sale line 1", "On Sale line 2");
  FeedItemOperation support = newSiteLinkFeedItemAddOperation(siteLinksData, "Support",
      "http://www.example.com/support", "Support line 1", "Support line 2");
  FeedItemOperation products = newSiteLinkFeedItemAddOperation(siteLinksData, "Products",
      "http://www.example.com/prods", "Products line 1", "Products line 2");
  // This site link is using geographical targeting by specifying the
  // criterion ID for California.
  FeedItemOperation aboutUs = newSiteLinkFeedItemAddOperation(siteLinksData, "About Us",
      "http://www.example.com/about", "About Us line 1", "About Us line 2", 21137L);

  FeedItemOperation[] operations =
      new FeedItemOperation[] {home, stores, onSale, support, products, aboutUs};

  FeedItemReturnValue result = feedItemService.mutate(operations);
  for (FeedItem item : result.getValue()) {
    System.out.printf("FeedItem with feedItemId %d was added.%n", item.getFeedItemId());
    siteLinksData.siteLinkFeedItemIds.add(item.getFeedItemId());
  }
}

3. フィードとプレースホルダ フィールドを対応付ける

表形式のデータを使用する AdWords の機能ごとに、必要なフィールドとデータタイプを指定するプレースホルダ タイプがあります。FeedMappingService ではフィードとプレースホルダ タイプを対応付けて、フィードの使い方を示します。また、FeedAttribute(列)とプレースホルダ フィールドも対応付けて、AdWords の機能による FeedAttribute の解釈方法を明確にします。

// See the Placeholder reference page for a list of all the placeholder types and fields.
// https://developers.google.com/adwords/api/docs/appendix/placeholders
private static final int PLACEHOLDER_SITELINKS = 1;

// See the Placeholder reference page for a list of all the placeholder types and fields.
// https://developers.google.com/adwords/api/docs/appendix/placeholders
private static final int PLACEHOLDER_FIELD_SITELINK_LINK_TEXT = 1;
private static final int PLACEHOLDER_FIELD_SITELINK_FINAL_URL = 5;
private static final int PLACEHOLDER_FIELD_LINE_1_TEXT = 3;
private static final int PLACEHOLDER_FIELD_LINE_2_TEXT = 4;

private static void createSiteLinksFeedMapping(AdWordsServices adWordsServices,
    AdWordsSession session, SiteLinksDataHolder siteLinksData) throws Exception {
  // Get the FeedItemService.
  FeedMappingServiceInterface feedMappingService =
      adWordsServices.get(session, FeedMappingServiceInterface.class);

  // Map the FeedAttributeIds to the fieldId constants.
  AttributeFieldMapping linkTextFieldMapping = new AttributeFieldMapping();
  linkTextFieldMapping.setFeedAttributeId(siteLinksData.linkTextFeedAttributeId);
  linkTextFieldMapping.setFieldId(PLACEHOLDER_FIELD_SITELINK_LINK_TEXT);
  AttributeFieldMapping linkFinalUrlFieldMapping = new AttributeFieldMapping();
  linkFinalUrlFieldMapping.setFeedAttributeId(siteLinksData.linkFinalUrlFeedAttributeId);
  linkFinalUrlFieldMapping.setFieldId(PLACEHOLDER_FIELD_SITELINK_FINAL_URL);
  AttributeFieldMapping line1FieldMapping = new AttributeFieldMapping();
  line1FieldMapping.setFeedAttributeId(siteLinksData.line1FeedAttributeId);
  line1FieldMapping.setFieldId(PLACEHOLDER_FIELD_LINE_1_TEXT);
  AttributeFieldMapping line2FieldMapping = new AttributeFieldMapping();
  line2FieldMapping.setFeedAttributeId(siteLinksData.line2FeedAttributeId);
  line2FieldMapping.setFieldId(PLACEHOLDER_FIELD_LINE_2_TEXT);

  // Create the FeedMapping and operation.
  FeedMapping feedMapping = new FeedMapping();
  feedMapping.setPlaceholderType(PLACEHOLDER_SITELINKS);
  feedMapping.setFeedId(siteLinksData.siteLinksFeedId);
  feedMapping.setAttributeFieldMappings(new AttributeFieldMapping[] {linkTextFieldMapping,
      linkFinalUrlFieldMapping, line1FieldMapping, line2FieldMapping});
  FeedMappingOperation operation = new FeedMappingOperation();
  operation.setOperand(feedMapping);
  operation.setOperator(Operator.ADD);

  // Save the field mapping.
  FeedMappingReturnValue result =
      feedMappingService.mutate(new FeedMappingOperation[] {operation});
  for (FeedMapping savedFeedMapping : result.getValue()) {
    System.out.printf(
        "Feed mapping with ID %d and placeholderType %d was saved for feed with ID %d.%n",
        savedFeedMapping.getFeedMappingId(), savedFeedMapping.getPlaceholderType(),
        savedFeedMapping.getFeedId());
  }
}

この例のメソッドはサイトリンクで使用するフィードを設定します。そのために FeedMapping のプレースホルダ タイプを定数 PLACEHOLDER_SITELINKS に設定しており、この定数の値は 1 となっています。このメソッドは FeedAttribute とサイトリンクで必要なプレースホルダ フィールド(リンクテキスト、最終ページ URL、広告文)の対応付けも行います。この対応付けにより、どの FeedAttribute(列)がサイトリンクのどの部分に対応しているのか AdWords に伝えます。

4. フィードとユーザー、キャンペーン、または広告グループを関連付ける

この段階でフィードはすでにサイトリンクで利用できる状態になっています。最後はフィードとユーザー(CustomerFeedService)、キャンペーン(CampaignFeedService)、または広告グループ(AdGroupFeedService)を関連付けて、特定の広告でサイトリンクを表示できるようにします。

フィードをユーザー、キャンペーン、広告グループのどれに関連付けるかは、フィードのデータと管理性のレベルに基づいて決めます。ここでもサイトリンクを例にしますが、キャンペーンのすべての広告グループで同じサイトリンクを表示する場合は、フィードとキャンペーンを関連付けます。同様に、すべてのキャンペーンでサイトリンクを使用したい場合は、フィードをアカウントに関連付けます。一方、同じキャンペーンでも広告グループごとに異なるサイトリンクを表示したい場合は、フィードを特定の広告グループだけに関連付けます。

フィードの関連付けが済んだら、ユーザー、キャンペーン、または広告グループで実際にどの FeedItem(行)を有効にするのか絞り込むことができます。たとえばフィルタを使うことにより、同じフィードでも FeedItem によって有効にするキャンペーンを変えることができます。フィルタは FeedItem ごとに評価されるマッチング関数によって適用されます。

private static void createSiteLinksCampaignFeed(AdWordsServices adWordsServices,
    AdWordsSession session, SiteLinksDataHolder siteLinksData, Long campaignId) throws Exception {
  // Get the CampaignFeedService.
  CampaignFeedServiceInterface campaignFeedService =
      adWordsServices.get(session, CampaignFeedServiceInterface.class);

  // Construct a matching function that associates the sitelink feed items to the campaign, and
  // sets the device preference to mobile. See the matching function guide at
  // https://developers.google.com/adwords/api/docs/guides/feed-matching-functions
  // for more details.
  String matchingFunctionString = String.format(
      "AND( IN(FEED_ITEM_ID, {%s}), EQUALS(CONTEXT.DEVICE, 'Mobile') )",
      Joiner.on(',').join(siteLinksData.siteLinkFeedItemIds));

  CampaignFeed campaignFeed = new CampaignFeed();
  campaignFeed.setFeedId(siteLinksData.siteLinksFeedId);
  campaignFeed.setCampaignId(campaignId);

  Function matchingFunction = new Function();
  matchingFunction.setFunctionString(matchingFunctionString);

  campaignFeed.setMatchingFunction(matchingFunction);
  // Specifying placeholder types on the CampaignFeed allows the same feed
  // to be used for different placeholders in different Campaigns.
  campaignFeed.setPlaceholderTypes(new int[] {PLACEHOLDER_SITELINKS});

  CampaignFeedOperation operation = new CampaignFeedOperation();
  operation.setOperand(campaignFeed);
  operation.setOperator(Operator.ADD);
  CampaignFeedReturnValue result =
      campaignFeedService.mutate(new CampaignFeedOperation[] {operation});
  for (CampaignFeed savedCampaignFeed : result.getValue()) {
    System.out.printf("Campaign with ID %d was associated with feed with ID %d.%n",
        savedCampaignFeed.getCampaignId(), savedCampaignFeed.getFeedId());
  }
}

このメソッドはキャンペーンとフィードを関連付け、その関連付けによって、プレースホルダ タイプとマッチング関数の 2 つのデータが設定されます。

プレースホルダ タイプ(この例ではサイトリンク)は Feed の FeedMapping で一度設定しているのに、なぜ CampaignFeed でも再び設定するのか、不思議に思う方もいるかもしれません。その理由は、プレースホルダを再び設定することにより、複数の FeedMapping を持つフィードを複数のキャンペーンの異なるプレースホルダ タイプで柔軟に利用できるようになるからです。

CampaignFeed でマッチング関数を設定すると、どの FeedItem(行)をサイトリンクとして使用するのか配信システムに示すことができます。詳細についてはマッチング関数のガイドをご覧ください。この例のマッチング関数では FEED_ITEM_ID を RequestContextOperand として使用していますが、簡単に別の RequestContextOperand 型を使用したり、FeedAttributeId などの FeedAttributeOperand を使用して対応付けを行ったりすることもできます。

広告グループやユーザーでもプロセスは同じです。AdGroupFeedService を使用して AdGroupFeed を作成するか、CustomerFeedService を使用して CustomerFeed を作成することにより、フィードを関連付けることができます。

5. フィード アイテムを有効にするスケジュールを設定する(任意)

次のように FeedItemScheduling を FeedItem オブジェクトに追加することで、FeedItem を有効にする日時を指定できるようになりました。

// Create and set the days and time.
FeedItemSchedule schedule = new FeedItemSchedule();
schedule.setDayOfWeek(dayOfWeek);
schedule.setStartHour(startHour);
schedule.setEndHour(endHour);
schedule.setStartMinute(startMinute);
schedule.setEndMinute(endMinute);

// Create the feed item scheduling.
FeedItemScheduling scheduling = new FeedItemScheduling();
scheduling.setFeedItemSchedules(new FeedItemSchedule[] {schedule});
item.setScheduling(scheduling);
スケジュールをリセットする場合は、次のように空の FeedItemScheduling を設定します。

private static FeedItemOperation newSiteLinkFeedItemOperationResetScheduling(
    Long feedId, Long feedItemId) {
  // Create the feed item and operation.
  FeedItem feedItem = new FeedItem();
  feedItem.setFeedId(feedId);
  feedItem.setFeedItemId(feedItemId);

  FeedItemScheduling scheduling = new FeedItemScheduling();
  feedItem.setScheduling(scheduling);

  FeedItemOperation operation = new FeedItemOperation();
  operation.setOperand(feedItem);
  operation.setOperator(Operator.SET);
  return operation;
}

ソースコードの全文

フィード サービスの詳細は、クライアント ライブラリにある以下のコードサンプルで確認してください。
ライブラリ AddSitelinksUsingFeeds の例
Java AddSitelinksUsingFeeds.java
Perl add_site_links_using_feeds.pl
PHP AddSitelinksUsingFeeds.php
Python add_site_links_using_feeds.py
Ruby add_site_links_using_feeds.rb
.NET(C#) AddSitelinksUsingFeeds.cs
.NET(VB) AddSitelinksUsingFeeds.vb

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

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