在Ruby/Rails中下载、解压缩和解析文件



我正在处理非常令人沮丧的Bing Ads Api(SOAP),虽然我已经成功地执行了我需要的大多数SOAP请求,但最后一个请求给我带来了麻烦。

那里的团队告诉我,要获得广告活动统计数据(点击量、印象、转化率等),我需要请求生成一个报告(将参数传递给它),然后从响应中获取报告ID,并使用另一个SOAP请求"轮询"报告,这会产生一个zip文件的下载URL。

我已经成功地完成了以上所有操作,下载URL(仅适用于5分钟)如下所示:

https://download.api.bingads.microsoft.com/ReportDownload/Download.aspx?q=k471B%2fhtf62jwhaelHhu0EqMSfWCvWSpOOBRu76%2bUC%2bgATLEobf%2bMYiVKX0CBOr52d95ViPXJeKbvAbnb%2bSK%2bGumYlSYQT80kTtt5waa5z%2fmbeXT%2fPFqde95DFR1%2b4yQgekl5T6gKipbMFcQJOn5aGYmtI1ALcREIwJRA%2bi%2b3jOE55Cl69TAzBOUWvB73NAKX6S0Y7zF%2bERnSu7TJnJfmqHopWihGtkeMzoqqwsJVgVDEKz84RrPPaDOs2pxg3qE%2bLSrEwu2cpa7bP%2f9t%2fjUVtIgiZMbMjzSf73VnAUSpYNz

当我转到那个URL时,它开始下载一个zip文件,一旦解压缩,它确实包含了我需要解析的XML,以便向我正在创建的web应用程序的用户报告。

我的问题是,在应用程序中一致地获取XML的最佳方法是什么?考虑到每次用户加载Bing页面或更改日期范围时都必须进行上述操作,这对应用程序来说似乎是一种艰难的方法,但他们告诉我这是唯一的方法。

我一直在走的路是用HTTParty获取报告,然后用RubyZip解压缩(由于未定义的转换错误问题,没有成功),但我不确定该怎么办。存储在数据库中(可能是临时的)?

如有任何帮助,我们将不胜感激。

如果没有更好的方法使用API,请缓存结果(在数据库或文件系统中),并使用定期运行的rake任务刷新数据。如果要执行此操作,请考虑为用户添加一个选项以请求立即刷新。

使用后台任务下载zip文件,然后对其进行处理,可以使用delayed_job或resque之类的东西来启动带有URL的作业。

最新更新