2014-02-06 4 views
1

저는 Bing Ads API를 사용하여 bing에서 실행되는 온라인 광고에서 캠페인 통계 (클릭 수, 노출 수 등)를 얻고 있습니다.이전 요청의 결과에 따라 API 요청 속도가 느려짐

이러한 통계를 검색하려면보고 서비스를 통해 2 개의 API 요청을해야합니다. 당신이 합계 필드 /에 날짜 범위를 전달하고 ReportRequestId 당신이에 ReportRequestId을 통과

  • A "PollGenerateReport"요청을 반환하고 요청 된 보고서
  • 을위한 다운로드 URL을 반환

    1. 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 
      

    답변

    1

    , 당신은 예외를 catch하고 다시 시도 할 수있다. 나중에 도움이 될 수 있습니다. https://github.com/nfedyashev/retryable

    수면 전화를 걸면 어디에서 무슨 일이 일어나고 있는지 혼란 스러울 수도 있습니다. 요청이 리턴 될 때 응답은 항상 존재하지만 두 x 째 API 호출을 작성하면 보고서가 아직 준비되지 않았습니다.

    +0

    보고서가 준비되지 않은 경우 상태 => "보류 중"을 반환하지만 페이지를로드하기 전에 새 보고서를 요청하지 않고 요청을 다시 실행하는 방법을 모르겠습니다. 저는 두 번째 요청 전에 잠자기 전화가 왔는지 확인했습니다. 보고서가 준비되었는지 여부에 관계없이 어떤 종류의 응답이 있다는 것을 이해합니다. 그 보석은 정말 재미있어 보여, 고마워. 이 문제를 해결하는 가장 좋은 방법이라고 생각하십니까? – macoughl

    +0

    http://msdn.microsoft.com/en-us/library/jj879320.aspx – bridiver

    +0

    위의 링크에서 API 호출을 사용하여 폴링합니다. 그러나 보고서 생성을 기다리면서 페이지로드 시간이 길어질 수 있습니다. 나는 정기적으로 보고서가 준비 될 때까지 자바 스크립트 또는 메타 새로 고침을 사용하여 페이지를 새로 고치거나 아약스를 사용하여 준비 될 때까지 폴링합니다. – bridiver

    관련 문제