Общие сведения о службах фидов

Это руководство дает основное представление о фидах. Фиды – очень гибкий и удобный формат для работы с табличными данными. Эти данные используются такими функциями 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. Добавление расписания для элементов фида (необязательно).
  6. Настройку таргетинга кампаний, групп объявлений и критериев (необязательно).


1. Создание фида

Используйте FeedService, чтобы описать структуру загружаемых данных. Присвойте фиду (таблице) имя и набор атрибутов (столбцов). Для каждого атрибута укажите название (заголовок столбца) и тип.

В примере ниже метод createSiteLinksFeed() использует сервис FeedService для создания объекта Feed с атрибутами FeedAttribute, в которых содержатся данные дополнительных ссылок.

private static void createSiteLinksFeed(
    AdWordsServicesInterface adWordsServices,
    AdWordsSession session,
    SiteLinksDataHolder siteLinksData,
    String feedName)
    throws RemoteException {
  // 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 line2Attribute = new FeedAttribute();
  line2Attribute.setType(FeedAttributeType.STRING);
  line2Attribute.setName("Line 2");
  FeedAttribute line3Attribute = new FeedAttribute();
  line3Attribute.setType(FeedAttributeType.STRING);
  line3Attribute.setName("Line 3");

  // Create the feed.
  Feed siteLinksFeed = new Feed();
  siteLinksFeed.setName(feedName);
  siteLinksFeed.setAttributes(
      new FeedAttribute[] {textAttribute, finalUrlAttribute, line2Attribute, line3Attribute});
  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.line2FeedAttributeId = savedAttributes[2].getId();
  siteLinksData.line3FeedAttributeId = savedAttributes[3].getId();
  System.out.printf("Feed with name '%s' and ID %d with linkTextAttributeId %d"
      + " and linkFinalUrlAttributeId %d and line2AttributeId %d"
      + " and line3AttributeId %d was created.%n",
      savedFeed.getName(),
      savedFeed.getId(),
      savedAttributes[0].getId(),
      savedAttributes[1].getId(),
      savedAttributes[2].getId(),
      savedAttributes[3].getId());
}

Чтобы описать табличные данные, которые будут использоваться для дополнительных ссылок, метод создает фид с объектами FeedAttribute:

  • Текст ссылки
  • Конечные URL ссылки
  • Строка 1
  • Строка 2
  • Строка 3

Мы указываем имя и источник фида для FeedOrigin.USER, обозначая таким образом, что объекты фида будут добавлены рекламодателем (а не системой AdWords).

Для создания фида вызывается операция feedService.mutate. После успешного добавления фида FeedService возвращает идентификатор фида, а также все идентификаторы атрибутов. Сохраните их для последующего использования в других сервисах. Для простоты предположим, что был создан объект siteLinksData типа SiteLinksDataHolder с соответствующими полями для идентификаторов. Мы будем использовать этот объект позже для получения идентификаторов. Вы можете создать аналогичный объект на своем языке программирования.

Обратите внимание, что в нашем фиде ровно столько столбцов, сколько нужно для дополнительных ссылок. Однако, как вы увидите позже, столбцов может быть и больше. Вы можете использовать другие столбцы, чтобы указать, какие объекты элементов фида (строки) должны применяться к определенным кампаниям или группам объявлений, с помощью функции сопоставления.

2. Наполнение фида

После описания структуры данных в AdWords можно добавить дополнительные ссылки с помощью метода FeedItemService.

Для этого сначала примените вспомогательный метод newSiteLinkFeedItemAddOperation(), чтобы создать элементы фида на основе информации о дополнительных ссылках и идентификаторах объектов FeedAttribute. Затем объедините элементы фида с помощью операции ADD и верните полученный результат.

Чтобы лучше понять, как создать FeedItem, запомните следующее описание таблицы: каждая строка представляет собой набор ячеек, а каждая ячейка расположена в определенном столбце и имеет некое содержание. Аналогичным образом FeedItem (строка) представляет собой набор объектов FeedItemAttributeValue (ячеек), каждый FeedItemAttributeValue из которых имеет идентификатор FeedAttribute (столбец, в котором расположена эта ячейка) и stringValue (содержимое ячейки, если это строка).

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

private static FeedItemOperation newSiteLinkFeedItemAddOperation(
    SiteLinksDataHolder siteLinksData, String text, String finalUrl, String line2, String line3,
    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 line2TextAttributeValue = new FeedItemAttributeValue();
  line2TextAttributeValue.setFeedAttributeId(siteLinksData.line2FeedAttributeId);
  line2TextAttributeValue.setStringValue(line2);
  FeedItemAttributeValue line3TextAttributeValue = new FeedItemAttributeValue();
  line3TextAttributeValue.setFeedAttributeId(siteLinksData.line3FeedAttributeId);
  line3TextAttributeValue.setStringValue(line3);

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

  // 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(), который создает все элементы фида и содержащие их объекты FeedItemOperation, вызывая вспомогательный метод с разной информацией для каждой дополнительной ссылки.

Элементы фида, возвращаемые вызовом mutate, включают идентификаторы, которые сохраняются в siteLinksData для последующего использования (предполагается, что этот объект уже был создан и включает необходимые поля для идентификаторов).

private static void createSiteLinksFeedItems(AdWordsServicesInterface adWordsServices,
    AdWordsSession session, SiteLinksDataHolder siteLinksData) throws RemoteException {
  // 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 2", "Home line 3");
  FeedItemOperation stores = newSiteLinkFeedItemAddOperation(siteLinksData, "Stores",
      "http://www.example.com/stores", "Stores line 2", "Stores line 3");
  FeedItemOperation onSale = newSiteLinkFeedItemAddOperation(siteLinksData, "On Sale",
      "http://www.example.com/sale", "On Sale line 2", "On Sale line 3");
  FeedItemOperation support = newSiteLinkFeedItemAddOperation(siteLinksData, "Support",
      "http://www.example.com/support", "Support line 2", "Support line 3");
  FeedItemOperation products = newSiteLinkFeedItemAddOperation(siteLinksData, "Products",
      "http://www.example.com/prods", "Products line 2", "Products line 3");
  // 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 2", "About Us line 3", 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.

// 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_2_TEXT = 3;
private static final int PLACEHOLDER_FIELD_LINE_3_TEXT = 4;

private static void createSiteLinksFeedMapping(AdWordsServicesInterface adWordsServices,
    AdWordsSession session, SiteLinksDataHolder siteLinksData) throws RemoteException {
  // 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 line2FieldMapping = new AttributeFieldMapping();
  line2FieldMapping.setFeedAttributeId(siteLinksData.line2FeedAttributeId);
  line2FieldMapping.setFieldId(PLACEHOLDER_FIELD_LINE_2_TEXT);
  AttributeFieldMapping line3FieldMapping = new AttributeFieldMapping();
  line3FieldMapping.setFeedAttributeId(siteLinksData.line3FeedAttributeId);
  line3FieldMapping.setFieldId(PLACEHOLDER_FIELD_LINE_3_TEXT);

  // Create the FeedMapping and operation.
  FeedMapping feedMapping = new FeedMapping();
  feedMapping.setPlaceholderType(PLACEHOLDER_SITELINKS);
  feedMapping.setFeedId(siteLinksData.siteLinksFeedId);
  feedMapping.setAttributeFieldMappings(new AttributeFieldMapping[] {linkTextFieldMapping,
      linkFinalUrlFieldMapping, line2FieldMapping, line3FieldMapping});
  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. Этот метод также сопоставляет атрибуты фида с полями меток-заполнителей, которые требуются для дополнительных ссылок. Такое сопоставление сообщает системе, какие атрибуты фида (столбцы) соответствуют тем или иным параметрам дополнительных ссылок.

Не все атрибуты фида должны сопоставляться с полями меток-заполнителей. Как говорилось выше, у фида может быть больше атрибутов, чем требуется функции AdWords. Такие дополнительные атрибуты могут использоваться, например, для фильтрации объектов фида с помощью функции сопоставления.

Один и тот же объект фида может использоваться в нескольких объектах FeedMapping. Это может быть полезно, если несколько функций AdWords требуют одинаковые табличные данные.

4. Установление связи с клиентом, кампанией или группой объявлений

Итак, наш фид готов к использованию с дополнительными ссылками. Осталось связать его с клиентом (CustomerFeedService), кампанией (CampaignFeedService) или группой объявлений (AdGroupFeedService). Это позволит включить дополнительные ссылки для определенного набора объявлений.

При выборе между клиентом, кампанией и группой объявлений следует учитывать необходимый уровень контроля. Например, если во всех группах объявлений в кампании должны быть одни и те же дополнительные ссылки, то можно связать фид с кампанией. Если вы хотите, чтобы ссылки использовались во всех кампаниях, свяжите фид с аккаунтом. А если в разных группах объявлений должны использоваться разные дополнительные ссылки, свяжите фид только с отдельной группой объявлений.

Устанавливая связь с фидом, можно указать, какие элементы фида (строки) должны активироваться для этого клиента, кампании или группы объявлений. Например, у вас может быть всего один фид, где некоторые элементы (отбираемые одним фильтром) используются для одной кампании, а другие элементы (отбираемые другим фильтром) – для другой кампании и т. д. Чтобы применить фильтры, необходима функция сопоставления, которая будет применяться для каждого элемента фида.

private static void createSiteLinksCampaignFeed(
    AdWordsServicesInterface adWordsServices,
    AdWordsSession session,
    SiteLinksDataHolder siteLinksData,
    Long campaignId)
    throws RemoteException {
  // 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());
  }
}

Этот метод устанавливает связь между кампанией и фидом. При этом настраивается функция сопоставления и типы меток-заполнителей.

У вас может возникнуть вопрос, почему для CampaignFeed необходимо снова настраивать тип меток-заполнителей (в нашем примере – дополнительные ссылки), хотя он уже задан в объекте FeedMapping для всего фида. Дело в том, что фид с несколькими объектами FeedMapping можно использовать с одними типами меток-заполнителей в одних кампаниях, и с другими типами меток-заполнителей – в других.

Назначение функции сопоставления в CampaignFeed сообщает системе показа, какие элементы фида (строки) следует использовать в качестве дополнительных ссылок. Подробнее читайте в руководстве Функции сопоставления. В этом примере мы использовали FEED_ITEM_ID как RequestContextOperand в функции (Function) сопоставления, однако можно было бы использовать другой тип RequestContextOperand или выполнить сопоставление с использованием FeedAttributeOperand (например, FeedAttributeId).

Такая же процедура может применяться для аккаунтов и групп объявлений. Чтобы установить связь с группами объявлений, создайте объект AdGroupFeed с помощью службы AdGroupFeedService, а для установки связи с аккаунтами – объект CustomerFeed с помощью службы CustomerFeedService.

5. Добавление расписания для элементов фида (необязательно)

При желании можно указать дни и часы активации элементов фида, задав атрибут для его переменной schedules. Выберите для переменной schedules объект FeedItemScheduling, содержащий коллекцию FeedItemSchedule, в которой заданы периоды активности фида для каждого дня недели.

Чтобы удалить все расписания из фида, выберите для переменной schedules объект FeedItemScheduling, содержащий пустую коллекцию feedItemSchedules.

Пример создания коллекции FeedItemSchedule можно найти в статье о фрагменте кода для изменения расширений объявлений.

6. Настройка таргетинга фидов (необязательно)

В версии 201802 и выше вы можете использовать метод FeedItemTargetService для ограничения настроек таргетинга в фидах отдельными кампаниями, группами объявлений и критериями.

Например, если вы хотите, чтобы какой-либо фид применялся в определенной группе объявлений в кампании, создайте объект FeedItemAdGroupTarget и укажите в нем feedId, feedItemId и adGroupId. Свойства объекта FeedItemAdGroupTarget обеспечат показ объявлений, связанных с фидом, только в выбранной группе.

Обратите внимание, что описанная выше настройка таргетинга является ограничивающей. Это означает, что объект, на который вы настраиваете таргетинг, должен быть заранее включен в настройки функции сопоставления. Метод FeedItemTarget ограничивает показ объявлений, связанных с фидом, только указанным в методе объектом. Если этот объект не был включен ранее, то он будет проигнорирован функцией сопоставления.

Удаление фидов

Чтобы удалить фид, присвойте его свойству status значение REMOVED. Фиды, для которых нет связанной статистики, будут удалены навсегда некоторое время спустя.

Примеры кода

Дополнительную информацию о службах фидов можно найти в следующих примерах кода в наших клиентских библиотеках:

Библиотека Пример 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
C# AddSitelinksUsingFeeds.cs
VB.NET AddSitelinksUsingFeeds.vb

Оставить отзыв о...

Текущей странице
Нужна помощь? Обратитесь в службу поддержки.