【发布时间】: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