저는 Bing Ads API를 사용하여 bing에서 실행되는 온라인 광고에서 캠페인 통계 (클릭 수, 노출 수 등)를 얻고 있습니다.이전 요청의 결과에 따라 API 요청 속도가 느려짐
이러한 통계를 검색하려면보고 서비스를 통해 2 개의 API 요청을해야합니다. 당신이 합계 필드 /에 날짜 범위를 전달하고 ReportRequestId 당신이에 ReportRequestId을 통과
- A "SubmitGenerateReport"요청
내가 가지고있는 문제는 SubmitGenerateReport 요청에이 ReportRequestId를 반환하기 위해 두 번째 또는 두 번째가 추가로 필요하므로 "Invalid ReportRequestId"오류가 발생합니다. 아직 페이지가 없기 때문에. 페이지를 새로 고침 할 때 대부분의 시간을 해결합니다 (그렇지 않은 경우 다시로드하거나 두 번 다시 가져옵니다).
첫 번째 요청 후에 잠자기 명령을 추가하려고했지만 (아래에서 볼 수 있듯이) 문제를 해결하지 못했습니다.
더 나은 옵션이 있습니까? Bing API 팀은별로 도움이되지 않았습니다. 빙 보고서의 상태를 확인 할 수있는 API가없는 경우
adwordscampaign_controller.rb
#Start Bing Reporting Code - acquire report request ID number client = Savon.client("https://adcenterapi.microsoft.com/Api/Advertiser/v8/Reporting/ReportingService.svc?wsdl") @response = client.request :v8, :submit_generate_report, xmlns: "https://adcenter.microsoft.com/v8" do soap.namespaces["xmlns:v8"] = "https://adcenter.microsoft.com/v8" soap.namespaces["xmlns:i"] = "http://www.w3.org/2001/XMLSchema-instance" soap.namespaces["xmlns:a1"] ="http://schemas.microsoft.com/2003/10/Serialization/Arrays" soap.header = "<v8:UserName>#{binguser}</v8:UserName><v8:Password>#{bingpass}</v8:Password><v8:DeveloperToken>[removed]</v8:DeveloperToken>" soap.body = "<ReportRequest i:nil=\"false\" i:type=\"CampaignPerformanceReportRequest\"><Format i:nil=\"false\">Xml</Format><Language i:nil=\"false\">English</Language>[shortened for the sake of reader sanity]</ReportRequest>" end #adding delay to compensate for slow turnaround by report generation sleep 1.5 @responsehash = @response.to_hash @responsehashdeep = @responsehash[:submit_generate_report_response][:report_request_id] @report_req_id = @responsehashdeep.to_s reportreq = @report_req_id #report request ID acquired #acquire Bing report download URL reportclient = Savon.client("https://adcenterapi.microsoft.com/Api/Advertiser/v8/Reporting/ReportingService.svc?wsdl") @reportresponse = reportclient.request :v8, :poll_generate_report do soap.namespaces["xmlns:v8"] = "https://adcenter.microsoft.com/v8" soap.header = "<v8:UserName>[removed]</v8:UserName><v8:Password>[removed]</v8:Password><v8:DeveloperToken>[removed]</v8:DeveloperToken><v8:CustomerId>[removed]</v8:CustomerId><v8:CustomerAccountId>[removed]</v8:CustomerAccountId>" soap.body = "<v8:ReportRequestId>#{reportreq}</v8:ReportRequestId>" end @reportresponsehash = @reportresponse.to_hash @reportresponsehashdeep = @reportresponsehash[:poll_generate_report_response][:report_request_status][:report_download_url] reporturl = @reportresponsehashdeep.to_s #report download URL acquired
보고서가 준비되지 않은 경우 상태 => "보류 중"을 반환하지만 페이지를로드하기 전에 새 보고서를 요청하지 않고 요청을 다시 실행하는 방법을 모르겠습니다. 저는 두 번째 요청 전에 잠자기 전화가 왔는지 확인했습니다. 보고서가 준비되었는지 여부에 관계없이 어떤 종류의 응답이 있다는 것을 이해합니다. 그 보석은 정말 재미있어 보여, 고마워. 이 문제를 해결하는 가장 좋은 방법이라고 생각하십니까? – macoughl
http://msdn.microsoft.com/en-us/library/jj879320.aspx – bridiver
위의 링크에서 API 호출을 사용하여 폴링합니다. 그러나 보고서 생성을 기다리면서 페이지로드 시간이 길어질 수 있습니다. 나는 정기적으로 보고서가 준비 될 때까지 자바 스크립트 또는 메타 새로 고침을 사용하여 페이지를 새로 고치거나 아약스를 사용하여 준비 될 때까지 폴링합니다. – bridiver