Изтеглете, разархивирайте и анализирайте файл в Ruby/Rails

Работя с много разочароващия Bing Ads Api (SOAP) и въпреки че изпълних успешно повечето SOAP заявки, от които се нуждая, последната ми създава проблеми.

Екипът там ми казва, че за да получа статистически данни за рекламни кампании (кликвания, импресии, реализации и т.н.), трябва да поискам генериране на отчет (да му предам параметрите), след което да взема reportID от отговора и да „анкетирам“ отчета с друга SOAP заявка, която дава URL адрес за изтегляне на zip файл.

Успешно направих всичко по-горе и 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, който трябва да анализирам, за да докладвам на потребителите на уеб приложението, което създавам.

Въпросът ми е - Кой е най-добрият начин да получите този XML последователно в приложението? Това наистина изглежда като труден подход за приложението, като се има предвид, че всичко по-горе ще трябва да се извършва всеки път, когато потребител зареди страницата на Bing или промени диапазона от дати, но ми казват, че това е единственият начин да го направя.

Пътят, по който вървя, е да получа отчета с HTTParty и след това да разархивирам с RubyZip (бяха неуспешни поради проблеми с недефинирана грешка при преобразуване), но не съм сигурен какво да правя оттам нататък. Да се ​​съхранява в база данни (може би временно)?

Всяка помощ ще бъде високо оценена.


person macoughl    schedule 14.01.2014    source източник


Отговори (2)


Ако няма по-добър начин за използване на API, кеширайте резултатите (във вашата база данни или във файловата система) и обновете данните, като използвате задача за рейк, която ще се изпълнява периодично. Ако направите това, обмислете добавянето на опция за потребителя да поиска незабавно опресняване.

person mechanicalfish    schedule 14.01.2014
comment
Благодаря за отговора! Предполагам, че имате предвид кеширане на резултатите от zip файла, нали? Можете ли да предложите добър начин за изтегляне/разархивиране на този файл? - person macoughl; 14.01.2014

Използвайте фонова задача, за да изтеглите zip файла и след това да го обработите, нещо като delayed_job или resque може да се използва за стартиране на заданието с URL адреса.

person aarti    schedule 14.01.2014