【问题标题】:Trying to filter Bing Ads API data based on Campaign Status using Savon gem in Ruby on Rails尝试使用 Ruby on Rails 中的 Savon gem 根据活动状态过滤 Bing Ads API 数据
【发布时间】:2019-05-10 14:12:13
【问题描述】:

自从 Savon gem 将 Ruby 代码转换为 XML 以来,我已经能够在不了解 XML 的情况下做到这一点,但现在我陷入了困境。我从 API 请求 CampaignPerformanceReport 并且能够成功检索我需要的数据,但现在我需要添加一个过滤器以仅获取“已暂停”的广告系列。

在documentation 之后,我将此消息发送到 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 只是忽略了我不正确的过滤。

如果有人能帮我找出我做错了什么,将不胜感激。

【问题讨论】:

  • 常见的第一个问题:您是否尝试在 SoapUI 中为您的请求建模?如果它按预期工作,我们可以分析您的 Ruby 代码。
  • 我不确定 SoapUI 是什么。你要我测试什么?我确切地知道问题出在哪里,我只是不确定如何阅读 Bing Ads API 文档中列出的语法。如果我知道他们想要请求的格式,那么我可以自己完成。
  • soapui.com。但是您的问题似乎被贴错了标签?它与 Savon、XML 或 Ruby 无关,而与 Bing 无关?
  • 我没有将我的问题标记为与 Ruby 相关,只有 xml、savon 和 bing-ads-api。我这样标记它是因为我认为了解 xml 的人将能够告诉我如何理解我链接到的文档中的语法。我已经花了几个小时在上面,并且在我们说话时仍在研究,但我无法弄清楚。我不是懒惰或只是想让别人为我做我的工作,我刚刚达到了我的理解极限,并且正在积极尝试在我的代码中找到问题。您的评论不是很有帮助,因为它没有为我指明任何有用的方向。
  • 别担心,这并不是批评。我去过那儿 :-)。看来您需要对 Bing API 有深入了解的人。不幸的是,那不是我,对不起。

标签: xml savon bing-ads-api


【解决方案1】:

请注意,有多种子过滤器类型可用,例如 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# sn-p,它有助于在 SOAP 请求中生成上述 XML:

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

提示:每个 Bing Ads API 服务操作都包含一个语法模板,例如 SubmitGenerateReport。您只需要划分出适用于您的请求的部分,例如,一次只有一种报告请求类型。

也请随时通过Bing Ads API Development forum 和contact support 链接与我们的团队联系。

我希望这会有所帮助!

【讨论】:

  • 感谢您的回答和提示!我忘记了语法模板。看到这种语法很有帮助。不过我还是有点困惑。我尝试了您的确切语法,但无法返回任何暂停的广告系列。 &lt;Filter&gt; &lt;AccountStatus xsi:nil="true"/&gt; &lt;AdDistribution xsi:nil="true"/&gt; &lt;DeviceOS xsi:nil="true"/&gt; &lt;Status&gt;Paused&lt;/Status&gt; &lt;/Filter&gt; 这不会返回任何内容(至少它会过滤掉有效的广告系列),但我已经暂停了我帐户上的广告系列,所以我不确定为什么它不会返回任何内容。
  • @JordanLagan 在您在报告请求中指定的日期期间(当前)暂停的广告活动是否有效?如果您通过ads.microsoft.com 运行类似的报告,您能否成功过滤已暂停的广告系列?如果 API 未返回与 UI 相同的数据,请联系支持人员并提供详细信息,我们的团队将进行调查。
  • 好的,谢谢!您回答了我最初的问题并确认它在您的最终工作,所以我的配置肯定有问题。我非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 2023-03-10
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
相关资源
最近更新 更多