无法将URL参数传递给api请求

时间:2014-01-21 00:31:13

标签: ruby-on-rails ruby soap params bing-api

我正在使用Bing API,当我发出SOAP请求来获取我的广告系列统计信息时,我无法将日期的URL参数(由bootstrap datepicker提供)传递给请求。

我一直收到以下错误 -

(a:DeserializationFailed) The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter https://adcenter.microsoft.com/v8:ReportRequest. The InnerException message was 'There was an error deserializing the object of type Microsoft.AdCenter.Advertiser.Reporting.Api.DataContracts.Request.ReportRequest. The value '' cannot be parsed as the type 'Int32'.'. Please see InnerException for more details.

在我看来好像它无法接收我在params中设置为开始/结束日期的值。当params [:start] / [:end]值为nil

时,它正在工作

以下是设置日期参数的控制器代码(datepicker适用于所有其他请求):

#Start Bing Reporting Code - set date for request ID

if params[:start].nil?
bing_start_date = DateTime.parse((Date.today - 7).to_s).strftime("%Y-%m-%d")
  yearstart = bing_start_date[0,4]
  monthstart = bing_start_date[5..6]
  daystart = bing_start_date[8..9]

bing_end_date = DateTime.parse((Date.today - 1).to_s).strftime("%Y-%m-%d")
  yearend = bing_end_date[0,4]
  monthend = bing_end_date[5..6]
  dayend = bing_end_date[8..9]

else
bing_start_date = params[:start]
  yearstart = bing_start_date[2,4]
  monthstart = bing_start_date[5..6]
  daystart = bing_start_date[8..9]

bing_end_date = params[:end]
  yearend = bing_end_date[2,4]
  monthend = bing_end_date[5..6]
  dayend = bing_end_date[8..9]
end

这是我在SOAP请求主体中设置自定义日期范围(使用Savon gem):

soap.body = "<CustomDateRangeEnd i:nil=\"false\"><Day>#{dayend}</Day><Month>#{monthend}</Month><Year>#{yearend}</Year></CustomDateRangeEnd><CustomDateRangeStart i:nil=\"false\"><Day>#{daystart}</Day><Month>#{monthstart}</Month><Year>#{yearstart}</Year></CustomDateRangeStart></Time></ReportRequest>"

它工作正常如果我只是手动设置yearend / start,monthend / start,dayend / start变量:

  yearstart = '2014'
  monthstart = '01'
  daystart = '01'
  #this would set the start date properly to Jan 1 2014

1 个答案:

答案 0 :(得分:0)

愚蠢的错误。我使用与'else'相同的起始索引/长度和'if'语句的范围。因此,它向<day>

投掷和清空字符串

'if'的日期输出为"2014-01-13",其他的输出为"20140113"

因此,我需要像这样调整索引/长度和范围:

bing_start_date = params[:start]
  yearstart = bing_start_date[0,4]
  monthstart = bing_start_date[4..5]
  daystart = bing_start_date[6..7]