Распределение ставок

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

Эта функция API поможет вам понять, как изменение ставок может повлиять на расходы, количество показов и кликов. Ее аналог в пользовательском интерфейсе AdWords – Симулятор ставок.

Пример использования

Представьте, что ваше объявление показывается уже несколько недель и вы очень много на него тратите – гораздо больше, чем рассчитывали.

Вы хотите узнать, какими будут результаты при более низких ставках. Сколько показов и кликов вы получите? Дешевле ли обойдется вам реклама? Или, допустим, объявления не получают столько показов и кликов, сколько вы ожидали. Какая ставка исправила бы ситуацию?

Распределение ставок поможет вам получить ответы на эти вопросы. Функция предоставляет расчетные значения показов, кликов и расходов для определенного периода, в который показывалась ваша реклама.

С помощью распределения ставок можно сравнить эффективность рекламы за прошлую неделю при текущих ставках и при более низких или высоких значениях.

Просматривая результаты, которые могли бы быть получены в прошлом, вы будете принимать более обоснованные решения о величине ставок и их модификаторов.

Требования

Чтобы можно было использовать распределение ставок, должны выполняться следующие требования:

  • Кампания (либо критерий или группа объявлений) должна существовать уже какое-то время, так как системе необходимы исходные данные для прогнозирования.
  • Должно быть включено отслеживание конверсий.
  • Аккаунт не должен быть тестовым. Распределение ставок рассчитывается на основе статистики эффективности, а объявления из тестовых аккаунтов не показываются.

Кроме того, полученная информация будет относиться только к поисковой сети. Данные по контекстно-медийной сети не учитываются в распределении ставок. Для поисковой и оптимизированной контекстно-медийной сети будут возвращены только данные, относящиеся к первой из них.

Выполнение запросов

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

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

С помощью службы DataService можно запрашивать три типа распределения ставок или модификаторов. Выбор зависит от уровня, на котором вы хотите корректировать ставки – критерий, группа объявлений или кампания. Методы get() и query() имеют соответствующие названия:

Запросы: критерии и группы объявлений

Допустим, ставки задаются на уровне критерия (для групп объявлений выполняется аналогичная процедура).

Чтобы просмотреть распределение ставок, необходимо выполнить запрос к API. Вы задаете нужные поля, выбираете интересующие вас группы объявлений или критерии, настраивая предикаты, а затем выполняете вызов метода get() или query() и получаете данные.

Поля, доступные для фильтрации и выбора, можно просмотреть в документации к BidLandscape и LandscapePoint.

Вне зависимости от того, относится ли нужное вам поле к BidLandscape или LandscapePoint, оно должно быть включено в один и тот же селектор или предикат. Обратите внимание, что поля BidModifier, TotalLocalClicks, TotalLocalCost, TotalLocalImpressions и RequiredBudget поддерживаются только в запросах для модификаторов ставок для мобильных устройств на уровне кампании. Поля BiddableConversions и BiddableConversionsValue поддерживаются только в запросах на уровне группы объявлений и критерия. При возврате данных поля будут автоматически вставлены в нужное место в реализации на базе SOAP и клиентской библиотеки. Поля LandscapePoints будут заполнены для каждого объекта LandscapePoint, возвращаемого в BidLandscape.

Java

// Get the DataService.
DataServiceInterface dataService = adWordsServices.get(session, DataServiceInterface.class);

// Create selector.
Selector selector =
    new SelectorBuilder()
        .fields(
            DataField.AdGroupId,
            DataField.CriterionId,
            DataField.StartDate,
            DataField.EndDate,
            DataField.Bid,
            DataField.BiddableConversions,
            DataField.BiddableConversionsValue,
            DataField.LocalClicks,
            DataField.LocalCost,
            DataField.LocalImpressions)
        .equals(DataField.AdGroupId, adGroupId.toString())
        .equals(DataField.CriterionId, criterionId.toString())
        .limit(PAGE_SIZE)
        .build();

CriterionBidLandscapePage page = dataService.getCriterionBidLandscape(selector);

CSharp

using (DataService dataService = (DataService) user.GetService(
    AdWordsService.v201802.DataService)) {

  // Create the selector.
  Selector selector = new Selector() {
    fields = new string[] {
      CriterionBidLandscape.Fields.AdGroupId, CriterionBidLandscape.Fields.CriterionId,
      CriterionBidLandscape.Fields.StartDate, CriterionBidLandscape.Fields.EndDate,
      BidLandscapeLandscapePoint.Fields.Bid, BidLandscapeLandscapePoint.Fields.LocalClicks,
      BidLandscapeLandscapePoint.Fields.LocalCost,
      BidLandscapeLandscapePoint.Fields.LocalImpressions,
      BidLandscapeLandscapePoint.Fields.BiddableConversions,
      BidLandscapeLandscapePoint.Fields.BiddableConversionsValue
    },
    predicates = new Predicate[] {
      Predicate.Equals(CriterionBidLandscape.Fields.AdGroupId, adGroupId),
      Predicate.Equals(CriterionBidLandscape.Fields.CriterionId, keywordId)
    },
    paging = Paging.Default
  };

page = dataService.getCriterionBidLandscape(selector);

Python

data_service = client.GetService('DataService', version='v201802')

# Construct bid landscape selector object and retrieve bid landscape.
selector = {
    'fields': ['AdGroupId', 'CriterionId', 'StartDate', 'EndDate', 'Bid',
               'BiddableConversions', 'BiddableConversionsValue',
               'LocalClicks', 'LocalCost', 'LocalImpressions'],
    'predicates': [
        {
            'field': 'AdGroupId',
            'operator': 'EQUALS',
            'values': [ad_group_id]
        },
        {
            'field': 'CriterionId',
            'operator': 'EQUALS',
            'values': [criterion_id]
        }
    ],
    'paging': {
        'startIndex': 0,
        'numberResults': PAGE_SIZE
    }
}

page = data_service.getCriterionBidLandscape(selector)

PHP

$dataService = $adWordsServices->get($session, DataService::class);

// Create a selector to select all keyword bid simulations for the
// specified ad group.
$selector = new Selector();
$selector->setFields(
    [
        'AdGroupId',
        'CriterionId',
        'StartDate',
        'EndDate',
        'Bid',
        'BiddableConversions',
        'BiddableConversionsValue',
        'LocalClicks',
        'LocalCost',
        'LocalImpressions'
    ]
);
$selector->setPredicates(
    [
        new Predicate('AdGroupId', PredicateOperator::IN, [$adGroupId])
    ]
);
$selector->setPaging(new Paging(0, self::PAGE_SIZE));

$page = $dataService->getCriterionBidLandscape($selector);

Perl

# Create predicates.
my $adgroup_predicate = Google::Ads::AdWords::v201802::Predicate->new({
    field    => "AdGroupId",
    operator => "IN",
    values   => [$ad_group_id]});
my $criterion_predicate = Google::Ads::AdWords::v201802::Predicate->new({
    field    => "CriterionId",
    operator => "IN",
    values   => [$keyword_id]});

# Create selector.
my $paging = Google::Ads::AdWords::v201802::Paging->new({
  startIndex    => 0,
  numberResults => PAGE_SIZE
});
my $selector = Google::Ads::AdWords::v201802::Selector->new({
    fields => [
      "AdGroupId",                "CriterionId",
      "StartDate",                "EndDate",
      "Bid",                      "BiddableConversions",
      "BiddableConversionsValue", "LocalClicks",
      "LocalCost",                "LocalImpressions"
    ],
    paging     => $paging,
    predicates => [$adgroup_predicate, $criterion_predicate]});

my $page =
  $client->DataService()
  ->getCampaignCriterionBidLandscape({serviceSelector => $selector});

Ruby

data_srv = adwords.service(:DataService, API_VERSION)

# Get keyword bid landscape.
selector = {
  :fields => ['AdGroupId', 'CriterionId', 'StartDate', 'EndDate', 'Bid',
      'BiddableConversions', 'BiddableConversionsValue', 'LocalClicks',
      'LocalCost', 'LocalImpressions'],
  :predicates => [
    {:field => 'AdGroupId', :operator => 'IN', :values => [ad_group_id]},
    {:field => 'CriterionId', :operator => 'IN', :values => [keyword_id]},
  ],
  :paging => {
    :start_index => 0,
    :number_results => PAGE_SIZE
  }
}

page = data_srv.get_criterion_bid_landscape(selector)

VB.NET

Using dataService As DataService = CType(user.GetService(
    AdWordsService.v201802.DataService), DataService)

  ' Create the selector.
  Dim selector As New Selector
  selector.fields = New String() {
    CriterionBidLandscape.Fields.AdGroupId, CriterionBidLandscape.Fields.CriterionId,
    CriterionBidLandscape.Fields.StartDate, CriterionBidLandscape.Fields.EndDate,
    BidLandscapeLandscapePoint.Fields.Bid, BidLandscapeLandscapePoint.Fields.LocalClicks,
    BidLandscapeLandscapePoint.Fields.LocalCost,
    BidLandscapeLandscapePoint.Fields.LocalImpressions,
    BidLandscapeLandscapePoint.Fields.BiddableConversions,
    BidLandscapeLandscapePoint.Fields.BiddableConversionsValue
  }

  selector.predicates = New Predicate() {
    Predicate.Equals(CriterionBidLandscape.Fields.AdGroupId, adGroupId),
    Predicate.Equals(CriterionBidLandscape.Fields.CriterionId, keywordId)
  }

  ' Select selector paging.
  selector.paging = Paging.Default

page = dataService.getCriterionBidLandscape(selector)

Запросы модификаторов ставок для мобильных устройств на уровне кампании

Распределение для модификаторов ставок для мобильных устройств на уровне кампании можно получить так же, как для групп объявлений и критериев. Поля LandscapePoints будут заполнены для каждого объекта LandscapePoint, возвращаемого в BidLandscape. Поля, доступные для фильтрации и выбора, можно просмотреть в документации к BidLandscape и LandscapePoint. Вне зависимости от того, находится ли поле в BidLandscape или LandscapePoint, оно должно быть включено в один и тот же селектор или предикат.

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

Java

// Get the DataService.
DataServiceInterface dataService = adWordsServices.get(session, DataServiceInterface.class);

// Create selector.
Selector selector =
    new SelectorBuilder()
        .fields(
            DataField.BidModifier,
            DataField.CampaignId,
            DataField.CriterionId,
            DataField.StartDate,
            DataField.EndDate,
            DataField.LocalClicks,
            DataField.LocalCost,
            DataField.LocalImpressions,
            DataField.TotalLocalClicks,
            DataField.TotalLocalCost,
            DataField.TotalLocalImpressions,
            DataField.RequiredBudget)
        .equals(DataField.CampaignId, campaignId.toString())
        .limit(PAGE_SIZE)
        .build();

CriterionBidLandscapePage page = dataService.getCampaignCriterionBidLandscape(selector);

CSharp

using (DataService dataService = (DataService) user.GetService(
    AdWordsService.v201802.DataService)) {

  // Create selector.
  Selector selector = new Selector() {
    fields = new string[] {
      CriterionBidLandscape.Fields.CampaignId,
      CriterionBidLandscape.Fields.CriterionId,
      CriterionBidLandscape.Fields.StartDate,
      CriterionBidLandscape.Fields.EndDate,
      BidLandscapeLandscapePoint.Fields.LocalClicks,
      BidLandscapeLandscapePoint.Fields.LocalCost,
      BidLandscapeLandscapePoint.Fields.LocalImpressions,
      BidLandscapeLandscapePoint.Fields.TotalLocalClicks,
      BidLandscapeLandscapePoint.Fields.TotalLocalCost,
      BidLandscapeLandscapePoint.Fields.TotalLocalImpressions,
      BidLandscapeLandscapePoint.Fields.RequiredBudget,
      BidLandscapeLandscapePoint.Fields.BidModifier,
    },
    predicates = new Predicate[] {
      Predicate.Equals(CriterionBidLandscape.Fields.CampaignId, campaignId)
    },
    paging = Paging.Default
  };

Python

data_service = client.GetService('DataService', version='v201802')

# Get all the campaigns for this account.
selector = {
    'fields': ['CampaignId', 'CriterionId', 'StartDate', 'EndDate',
               'BidModifier', 'LocalClicks', 'LocalCost', 'LocalImpressions',
               'TotalLocalClicks', 'TotalLocalCost', 'TotalLocalImpressions',
               'RequiredBudget'],
    'paging': {
        'startIndex': 0,
        'numberResults': PAGE_SIZE
    },
    'predicates': [{
        'field': 'CampaignId', 'operator': 'IN', 'values': [campaign_id]
    }]
}

PHP

$dataService = $adWordsServices->get($session, DataService::class);

// Create a selector to select all campaign criterion bid modifiers for the
// specified campaign.
$selector = new Selector();
$selector->setFields(
    [
        'BidModifier',
        'CampaignId',
        'CriterionId',
        'StartDate',
        'EndDate',
        'LocalClicks',
        'LocalCost',
        'LocalImpressions',
        'TotalLocalClicks',
        'TotalLocalCost',
        'TotalLocalImpressions',
        'RequiredBudget'
    ]
);
$selector->setPredicates(
    [new Predicate('CampaignId', PredicateOperator::IN, [$campaignId])]
);
$selector->setPaging(new Paging(0, self::PAGE_SIZE));

Perl

# Create predicates.
my $campaign_predicate = Google::Ads::AdWords::v201802::Predicate->new({
    field    => "CampaignId",
    operator => "IN",
    values   => [$campaign_id]});
# Create selector.
my $paging = Google::Ads::AdWords::v201802::Paging->new({
  startIndex    => 0,
  numberResults => PAGE_SIZE
});
my $selector = Google::Ads::AdWords::v201802::Selector->new({
    fields => [
      "BidModifier",           "CampaignId",
      "CriterionId",           "StartDate",
      "EndDate",               "LocalClicks",
      "LocalCost",             "LocalImpressions",
      "TotalLocalClicks",      "TotalLocalCost",
      "TotalLocalImpressions", "RequiredBudget"
    ],
    paging     => $paging,
    predicates => [$campaign_predicate]});

Ruby

data_srv = adwords.service(:DataService, API_VERSION)

selector = {
  :fields => [
    'CampaignId',
    'CriterionId',
    'StartDate',
    'EndDate',
    'BidModifier',
    'LocalClicks',
    'LocalCost',
    'LocalImpressions',
    'TotalLocalImpressions',
    'TotalLocalClicks',
    'TotalLocalCost',
    'RequiredBudget'
  ],
  :predicates => [
    {:field => 'CampaignId', :operator => 'IN', :values => [campaign_id]}
  ],
  :paging => {
    :start_index => 0,
    :number_results => PAGE_SIZE
  }
}

VB.NET

Using dataService As DataService = CType(user.GetService(AdWordsService.v201802.DataService),
    DataService)

  ' Create selector.
  Dim selector As New Selector()
  selector.fields = New String() {
    CriterionBidLandscape.Fields.CampaignId,
    CriterionBidLandscape.Fields.CriterionId,
    CriterionBidLandscape.Fields.StartDate,
    CriterionBidLandscape.Fields.EndDate,
    BidLandscapeLandscapePoint.Fields.LocalClicks,
    BidLandscapeLandscapePoint.Fields.LocalCost,
    BidLandscapeLandscapePoint.Fields.LocalImpressions,
    BidLandscapeLandscapePoint.Fields.TotalLocalClicks,
    BidLandscapeLandscapePoint.Fields.TotalLocalCost,
    BidLandscapeLandscapePoint.Fields.TotalLocalImpressions,
    BidLandscapeLandscapePoint.Fields.RequiredBudget,
    BidLandscapeLandscapePoint.Fields.BidModifier
  }
  selector.predicates = New Predicate() {
    Predicate.Equals(CriterionBidLandscape.Fields.CampaignId, campaignId)
  }
  selector.paging = Paging.Default

Просмотр страниц с результатами

Поведение объекта CriterionBidLandscapePage (возвращаемого методами [get|query]CriterionBidLandscape и [get|query]CampaignCriterionBidLandscape) и объекта AdGroupBidLandscapePage (возвращаемого методом [get|query]AdGroupBidLandscape) отличается от других типов страниц. Вместо того чтобы увеличивать paging.startIndex и отправлять запросы до тех пор, пока не будет выполнено условие paging.startIndex >= page.totalNumEntries, необходимо сделать следующее:

  • увеличивайте paging.startIndex на количество внутренних точек распределения, найденное в каждом ответе;
  • продолжайте выполнять запросы до тех пор, пока количество внутренних точек распределения в последнем ответе не будет меньше параметра paging.numberResults, указанного в селекторе.

В примере ниже показано, как реализовать эту логику.

Java

// Display bid landscapes.
int landscapePointsInPreviousPage = 0;
int startIndex = 0;
do {
  // Offset the start index by the number of landscape points in the last retrieved page,
  // NOT the number of entries (bid landscapes) in the page.
  startIndex += landscapePointsInPreviousPage;
  selector.getPaging().setStartIndex(startIndex);

  // Reset the count of landscape points in preparation for processing the next page.
  landscapePointsInPreviousPage = 0;

  // Request the next page of bid landscapes.
  CriterionBidLandscapePage page = dataService.getCriterionBidLandscape(selector);

  if (page.getEntries() != null) {
    for (CriterionBidLandscape criterionBidLandscape : page.getEntries()) {
      System.out.printf(
          "Criterion bid landscape with ad group ID %d, criterion ID %d, "
              + "start date %s, end date %s, with landscape points:%n",
          criterionBidLandscape.getAdGroupId(),
          criterionBidLandscape.getCriterionId(),
          criterionBidLandscape.getStartDate(),
          criterionBidLandscape.getEndDate());

      for (BidLandscapeLandscapePoint bidLanscapePoint :
          criterionBidLandscape.getLandscapePoints()) {
        landscapePointsInPreviousPage++;
        System.out.printf(
            "\t{bid: %d clicks: %d cost: %d impressions: %d, biddable conversions: %.2f, "
                + "biddable conversions value: %.2f}%n",
            bidLanscapePoint.getBid().getMicroAmount(),
            bidLanscapePoint.getClicks(),
            bidLanscapePoint.getCost().getMicroAmount(),
            bidLanscapePoint.getImpressions(),
            bidLanscapePoint.getBiddableConversions(),
            bidLanscapePoint.getBiddableConversionsValue());
      }
      System.out.println(" was found.");
    }
  }
} while (landscapePointsInPreviousPage >= PAGE_SIZE);

CSharp

CriterionBidLandscapePage page = new CriterionBidLandscapePage();
int landscapePointsFound = 0;
int landscapePointsInLastResponse = 0;

try {
  do {
    // Get bid landscape for keywords.
    page = dataService.getCriterionBidLandscape(selector);
    landscapePointsInLastResponse = 0;

    // Display bid landscapes.
    if (page != null && page.entries != null) {
      foreach (CriterionBidLandscape bidLandscape in page.entries) {
        Console.WriteLine("Found criterion bid landscape with ad group id '{0}', " +
            "keyword id '{1}', start date '{2}', end date '{3}', and landscape points:",
            bidLandscape.adGroupId, bidLandscape.criterionId,
            bidLandscape.startDate, bidLandscape.endDate);
        foreach (BidLandscapeLandscapePoint bidLandscapePoint in
            bidLandscape.landscapePoints) {
          Console.WriteLine("- bid: {0} => clicks: {1}, cost: {2}, impressions: {3}, " +
              "biddable conversions: {4:0.00}, biddable conversions value:{5:0.00}",
              bidLandscapePoint.bid.microAmount, bidLandscapePoint.clicks,
              bidLandscapePoint.cost.microAmount, bidLandscapePoint.impressions,
              bidLandscapePoint.biddableConversions,
              bidLandscapePoint.biddableConversionsValue);
          landscapePointsInLastResponse++;
          landscapePointsFound++;
        }
      }
    }
    // Offset by the number of landscape points, NOT the number
    // of entries (bid landscapes) in the last response.
    selector.paging.IncreaseOffsetBy(landscapePointsInLastResponse);
  } while (landscapePointsInLastResponse > 0);

Python

while more_pages:
  num_landscape_points = 0
  page = data_service.getCriterionBidLandscape(selector)

  if page and 'entries' in page:
    entries = page['entries']
    print 'Bid landscape(s) retrieved: %d.' % len(entries)

    for bid_landscape in entries:
      print ('Retrieved keyword bid landscape with ad group ID "%d", '
             'keyword ID "%d", start date "%s", end date "%s", '
             'with landscape points:' % (
                 bid_landscape['adGroupId'], bid_landscape['criterionId'],
                 bid_landscape['startDate'], bid_landscape['endDate']))
      for bid_landscape_point in bid_landscape['landscapePoints']:
        num_landscape_points += 1
        print ('  bid: %s => clicks: %s, cost: %s, impressions: %s, '
               'biddable conversions: %.2f, '
               'biddable conversions value: %.2f'
               % (bid_landscape_point['bid']['microAmount'],
                  bid_landscape_point['clicks'],
                  bid_landscape_point['cost']['microAmount'],
                  bid_landscape_point['impressions'],
                  bid_landscape_point['biddableConversions'],
                  bid_landscape_point['biddableConversionsValue']))

  # Need to increment by the total # of landscape points within the page,
  # NOT the number of entries (bid landscapes) in the page.
  offset += num_landscape_points
  selector['paging']['startIndex'] = str(offset)
  more_pages = num_landscape_points >= PAGE_SIZE

PHP

// Display bid landscapes.
$landscapePointsInPreviousPage = 0;
$startIndex = 0;
do {
    // Offset the start index by the number of landscape points in the last
    // retrieved page, NOT the number of entries (bid landscapes) in the page.
    $startIndex += $landscapePointsInPreviousPage;
    $selector->getPaging()->setStartIndex($startIndex);

    // Reset the count of landscape points in preparation for processing the
    // next page.
    $landscapePointsInPreviousPage = 0;

    // Retrieve keyword bid simulations one page at a time, continuing to
    // request pages until all of them have been retrieved.
    $page = $dataService->getCriterionBidLandscape($selector);

    // Print out some information for each bid landscape.
    if ($page->getEntries() !== null) {
        foreach ($page->getEntries() as $bidLandscape) {
            printf(
                "Found criterion bid landscape with ad group ID %d, criterion ID"
                . " %d, start date '%s', end date '%s', and landscape points:\n",
                $bidLandscape->getAdGroupId(),
                $bidLandscape->getCriterionId(),
                $bidLandscape->getStartDate(),
                $bidLandscape->getEndDate()
            );
            $landscapePointsInPreviousPage = count($bidLandscape->getLandscapePoints());
            foreach ($bidLandscape->getLandscapePoints() as $bidLandscapePoint) {
                printf(
                    "  bid: %d => clicks: %d, cost: %d, impressions: %d"
                    . ", biddable conversions: %.2f, biddable "
                    . "conversions value: %.2f\n",
                    $bidLandscapePoint->getBid()->getMicroAmount(),
                    $bidLandscapePoint->getClicks(),
                    $bidLandscapePoint->getCost()->getMicroAmount(),
                    $bidLandscapePoint->getImpressions(),
                    $bidLandscapePoint->getBiddableConversions(),
                    $bidLandscapePoint->getBiddableConversionsValue()
                );
            }
            print "\n";
        }
    }
} while ($landscapePointsInPreviousPage >= self::PAGE_SIZE);

Perl

# Display bid landscapes.
my $landscape_points_in_previous_page = 0;
my $start_index                       = 0;
do {
  # Offset the start index by the number of landscape points in the last
  # retrieved page, NOT the number of entries (bid landscapes) in the page.
  $start_index += $landscape_points_in_previous_page;
  $selector->get_paging()->set_startIndex($start_index);

  # Reset the count of landscape points in preparation for processing the
  # next page.
  $landscape_points_in_previous_page = 0;

  # Request the next page of bid landscapes.
  my $page =
    $client->DataService()
    ->getCampaignCriterionBidLandscape({serviceSelector => $selector});

  if ($page->get_entries()) {
    foreach my $criterion_bid_landscape (@{$page->get_entries()}) {
      printf "Criterion bid landscape with ad group ID %d, criterion ID " .
        " %d, start date %s, end date %s, with landscape points:\n",
        $criterion_bid_landscape->get_criterionId(),
        $criterion_bid_landscape->get_startDate(),
        $criterion_bid_landscape->get_endDate();
      foreach my $bid_landscape_point (
        @{$criterion_bid_landscape->get_landscapePoints()})
      {
        $landscape_points_in_previous_page++;
        printf "  bid: %d => clicks: %d, cost: %d, impressions: %d" .
          ", biddable conversions: %.2f, biddable " .
          "conversions value: %.2f\n",
          $bid_landscape_point->get_bid()->get_microAmount(),
          $bid_landscape_point->get_clicks(),
          $bid_landscape_point->get_cost()->get_microAmount(),
          $bid_landscape_point->get_impressions(),
          $bid_landscape_point->get_biddableConversions(),
          $bid_landscape_point->get_biddableConversionsValue();
      }
      printf(" was found.");
    }
  }
} while ($landscape_points_in_previous_page >= PAGE_SIZE);

Ruby

start_index = 0
landscape_points_in_previous_page = 0
begin
  # Offset the start index by the number of landscape points in the last
  # retrieved page, NOT the number of entries (bid landscapes) in the page.
  start_index += landscape_points_in_previous_page
  selector[:paging][:start_index] = start_index

  # Reset the count of landscape points in preparation for processing the
  # next page.
  landscape_points_in_previous_page = 0

  # Request the next page of bid landscapes.
  page = data_srv.get_criterion_bid_landscape(selector)

  if page and page[:entries]
    puts "Bid landscape(s) retrieved: %d." % [page[:entries].length]
    page[:entries].each do |bid_landscape|
      puts ("Retrieved keyword bid landscape with ad group ID %d" +
          ", keyword ID %d, start date '%s', end date '%s'" +
          ", with landscape points:") %
          [bid_landscape[:ad_group_id], bid_landscape[:criterion_id],
          bid_landscape[:start_date], bid_landscape[:end_date]]
      bid_landscape[:landscape_points].each do |point|
        landscape_points_in_previous_page += 1
        puts ("\t%d => clicks: %d, cost: %d, impressions: %d, biddable " +
            "conversions: %.2f, biddable conversions value: %.2f") %
            [point[:bid][:micro_amount], point[:clicks],
            point[:cost][:micro_amount], point[:impressions],
            point[:biddable_conversions], point[:biddable_conversions_value]]
      end
    end
  end
end while landscape_points_in_previous_page >= PAGE_SIZE

VB.NET

Dim page As New CriterionBidLandscapePage

Dim landscapePointsFound As Integer = 0
Dim landscapePointsInLastResponse As Integer = 0

Try
  Do
    ' Get bid landscape for keywords.
    page = dataService.getCriterionBidLandscape(selector)
    landscapePointsInLastResponse = 0

    ' Display bid landscapes.
    If ((Not page Is Nothing) AndAlso (Not page.entries Is Nothing)) Then
      Dim i As Integer = selector.paging.startIndex

      For Each bidLandscape As CriterionBidLandscape In page.entries
        Console.WriteLine("Found keyword bid landscape with ad group id ""{0}"", " &
            "keyword id ""{1}"", start date ""{2}"", end date ""{3}"", and " &
            "landscape points:", bidLandscape.adGroupId,
            bidLandscape.criterionId, bidLandscape.startDate, bidLandscape.endDate)
        For Each bidLandscapePoint As BidLandscapeLandscapePoint _
            In bidLandscape.landscapePoints
          Console.WriteLine("- bid: {0} => clicks: {1}, cost: {2}, impressions: {3}, " &
              "biddable conversions: {4:0.00}, biddable conversions value:{5:0.00}",
              bidLandscapePoint.bid.microAmount, bidLandscapePoint.clicks,
              bidLandscapePoint.cost.microAmount, bidLandscapePoint.impressions,
              bidLandscapePoint.biddableConversions,
              bidLandscapePoint.biddableConversionsValue)
          landscapePointsInLastResponse += 1
          landscapePointsFound += 1
        Next
      Next
    End If

    ' Offset by the number of landscape points, NOT the number
    ' of entries (bid landscapes) in the last response.
    selector.paging.IncreaseOffsetBy(landscapePointsInLastResponse)
  Loop While (landscapePointsInLastResponse > 0)

Интерпретация результатов

Результаты отражают различные величины ставок и ожидаемую эффективность на этих уровнях. Пример XML-ответа на запрос:

<landscapePoints>
  <bid>
    <ComparableValue.Type>Money</ComparableValue.Type>
    <microAmount>990000</microAmount>
  </bid>
  <clicks>278000</clicks>
  <cost>
    <ComparableValue.Type>Money</ComparableValue.Type>
    <microAmount>14500000000</microAmount>
  </cost>
  <impressions>648000</impressions>
  <promotedImpressions>0</promotedImpressions>
</landscapePoints>

Выше показаны все возможные элементы, которые вы можете получить от LandscapePoints. Значение promotedImpressions представляет собой количество показов на "продвигаемой" позиции (например, вверху страницы результатов поиска).

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

Ресурсы

Примеры кода

В папке Optimization (Оптимизация) каждой клиентской библиотеки содержится пример полного кода для вывода ключевых слов и модификаторов ставок кампании.

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

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