Попытка отфильтровать данные API Bing Ads на основе статуса кампании, используя гем Savon в Ruby on Rails - PullRequest
0 голосов
/ 10 мая 2019

Я смог достичь этого, не зная XML, поскольку гем Savon переводит код Ruby в XML, но теперь я застрял.Я запрашиваю CampaignPerformanceReport из API и могу успешно извлечь нужные мне данные, но теперь мне нужно добавить фильтр, чтобы получать только «приостановленные» кампании.

Следуя этой документации Я отправил это сообщение в API:

<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="https://bingads.microsoft.com/Reporting/v13" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns="https://bingads.microsoft.com/Reporting/v13">
  <env:Header>
    <AuthenticationToken>foo</AuthenticationToken>
    <CustomerAccountId>foo</CustomerAccountId>
    <CustomerId>foo</CustomerId>
    <DeveloperToken>foo</DeveloperToken>
  </env:Header>
  <env:Body>
    <tns:SubmitGenerateReportRequest>
      <ReportRequest xsi:nil="false" xsi:type="CampaignPerformanceReportRequest">
        <ExcludeColumnHeaders>true</ExcludeColumnHeaders>
        <ExcludeReportFooter>true</ExcludeReportFooter>
        <ExcludeReportHeader>true</ExcludeReportHeader>
        <Format>Csv</Format>
        <Language>English</Language>
        <ReportName>CampaignPerformanceReportRequest</ReportName>
        <ReturnOnlyCompleteData>false</ReturnOnlyCompleteData>
        <Aggregation>Summary</Aggregation>
        <Columns>
          <CampaignPerformanceReportColumn>CampaignName</CampaignPerformanceReportColumn>
          <CampaignPerformanceReportColumn>CampaignStatus</CampaignPerformanceReportColumn>
          <CampaignPerformanceReportColumn>Spend</CampaignPerformanceReportColumn>
          <CampaignPerformanceReportColumn>Impressions</CampaignPerformanceReportColumn>
          <CampaignPerformanceReportColumn>Clicks</CampaignPerformanceReportColumn>
          <CampaignPerformanceReportColumn>Conversions</CampaignPerformanceReportColumn>
          <CampaignPerformanceReportColumn>Revenue</CampaignPerformanceReportColumn>
          <CampaignPerformanceReportColumn>PhoneCalls</CampaignPerformanceReportColumn>
        </Columns>
        <Filter>
          <CampaignStatusReportFilter>Paused</CampaignStatusReportFilter>
        </Filter>
        <Scope>
          <AccountIds xmlns:a1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
            <a1:long>foo</a1:long>
          </AccountIds>
        </Scope>
        <Time>
          <CustomDateRangeEnd>
            <Day>31</Day>
            <Month>01</Month>
            <Year>2019</Year>
          </CustomDateRangeEnd>
          <CustomDateRangeStart>
            <Day>01</Day>
            <Month>01</Month>
            <Year>2019</Year>
          </CustomDateRangeStart>
          <PredefinedTime xsi:nil="true"/>
          <ReportTimeZone>EasternTimeUSCanada</ReportTimeZone>
        </Time>
      </ReportRequest>
    </tns:SubmitGenerateReportRequest>
  </env:Body>
</env:Envelope>

Запрос принят и обработан, но возвращаемые данные показывают только «Активные» кампании.Я уверен, что есть проблема с тем, как я фильтрую.Вот код Ruby, который я использую для генерации запроса.

report_request = {
      '@xsi:nil' => false,
      '@xsi:type' => 'CampaignPerformanceReportRequest',
      'ExcludeColumnHeaders' => true,
      'ExcludeReportFooter' => true,
      'ExcludeReportHeader' => true,
      'Format' => 'Csv',
      'Language' => 'English',
      'ReportName' => 'CampaignPerformanceReportRequest',
      'ReturnOnlyCompleteData' => false,
      'Aggregation' => 'Summary',
      'Columns' => {
         'CampaignPerformanceReportColumn' => [
           'CampaignName',
           'CampaignStatus',
           'Spend',
           'Impressions',
           'Clicks',
           'Conversions',
           'Revenue',
           'PhoneCalls'
         ]
      },
      'Filter' => { 'CampaignStatusReportFilter' => 'Paused' },
      'Scope' => {
        'AccountIds' => {
          '@xmlns:a1' => 'http://schemas.microsoft.com/2003/10/Serialization/Arrays',
          'a1:long' => account_id,
        }
      },
   etc...
}

Я попытался точно сопоставить синтаксис в документации, указанной выше, но он по-прежнему возвращает только «активные» кампании, что приводитЯ верю, что это настройка по умолчанию, и API просто игнорирует мою неправильную фильтрацию.

Если кто-нибудь может помочь мне выяснить, что я делаю не так, это будет с благодарностью.

1 Ответ

1 голос
/ 13 мая 2019

Обратите внимание, что доступно несколько типов подфильтров, например AccountStatus, AdDistribution, DeviceOS, DeviceType и Status .

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

<Filter>
    <AccountStatus i:nil="true"/>
    <AdDistribution i:nil="true"/>
    <DeviceOS i:nil="true"/>
    <DeviceType>Tablet</DeviceType>
    <Status>Paused</Status>
</Filter>

Извините, что у меня нет образца Ruby под рукой, но вот фрагмент C #, который помогает сгенерировать вышеуказанный XML в запросе SOAP:

Filter = new CampaignPerformanceReportFilter {
    DeviceType = DeviceTypeReportFilter.Tablet,
    Status = CampaignStatusReportFilter.Active
},

TIP:Каждая операция службы Bing Ads API включает шаблон синтаксиса, например, SubmitGenerateReport .Вам просто нужно вырезать части, относящиеся к вашему запросу, например, только один тип запроса отчета за раз.

Пожалуйста, не стесняйтесь связаться с нашей командой через форум разработки Bing Ads API и обратитесь в службу поддержки ссылки.

Надеюсь, это поможет!

...