2013-05-30 1 views
1

저는 Google Analytics 데이터를 추출하고 .CSV 파일에 쓰는 Windows 콘솔 애플리케이션을 개발했습니다. Google 웹 로그 분석 검색어 탐색기에서 특정 날짜의 데이터를 쿼리하면 '검색어가 96782 개의 결과와 일치했습니다 ...'라고 표시됩니다. 내가 그것을 1000 레코드를 반환 기본적으로 응용 프로그램을 사용하여 동일한 날짜의 데이터를 쿼리 할 때 때Google 애널리틱스에서 10,000 개가 넘는 레코드를 검색 할 수 없습니다.

문제는 내가 10K보다

DataResource.GaResource.GetRequest objRequest.MaxResult 더 설정할 때, 그것은 최대 10K 기록에 저를 최대 수 있습니다.

레코드를 10KB 이상 확보 할 수있는 방법이 있습니까?

+0

10K 기록의 한계는 웹에 여러 곳에서 찾을 수 있습니다. 이 한도에 도달하면 Google에 문의하는 것이 유용 할 수 있습니다. – CodeCaster

+0

예, 예상됩니다. –

답변

2

도움이 될 희망은 전체 세부 사항에 대한 https://developers.google.com/analytics/devguides/reporting/core/v3/limits-quotas 읽기 내가, 내가 설정 한 일 Request.MaxResult = 10000 Response.ItemsPerPage는 페이지 매김을 중요한 역할을 Request.StartIndex에 의해 재생이 = 10000하는 메커니즘 예 1 루프에서 1-10000 행을 얻고 10001-20000 .... 20001-30000 등등.

루프에서 특정 날짜의 데이터 요청은 Request.StartIndex = 1로 설정되고 행 수가 10000 번째 행에 도달하면 MaxResult + 1로 연속 증가합니다. 예 : Request.StartIndex = 1 then 10001 그런 다음 20001 .... 30001 ... 40001, Response.Rows == null이 될 때까지 계속됩니다.

여기 내 코드입니다 : -

  StringBuilder sbrCSVData = new StringBuilder(); 
      int intStartIndex = 1; 
      int intIndexCnt = 0; 
      int intMaxRecords = 10000; 

      AnalyticsService objAnaSrv = new AnalyticsService(objInit); 
      string metrics = "ga:visitors,ga:visits,ga:visitBounceRate,ga:pageviews,ga:pageviewsPerVisit,ga:uniquePageviews,ga:avgTimeOnPage,ga:exits,ga:avgPageLoadTime,ga:goal1ConversionRate"; 
      DataResource.GaResource.GetRequest objRequest = objAnaSrv.Data.Ga.Get(strProfId, startDate,endDate, metrics); 
      objRequest.Dimensions = "ga:visitCount,ga:browser,ga:browserVersion,ga:IsMobile,ga:screenResolution,ga:date,ga:hour"; 
      objRequest.MaxResults = 10000; 

      while (true) 
      { 
       objRequest.StartIndex = intStartIndex; 
       GaData objResponse = objRequest.Fetch(); 
       objResponse.ItemsPerPage = intMaxRecords; 

        if (objResponse.Rows != null) 
       { 
        intIndexCnt++; 
        for (int intRows = 0; intRows < objResponse.Rows.Count; intRows++) 
        { 
         IList<string> lstRow = objResponse.Rows[intRows]; 
         for (int intCols = 0; intCols <= lstRow.Count - 1; intCols++) 
         { 
          strRowData += lstRow[intCols].ToString() + "|"; 
         } 
         strRowData = strRowData.Remove(strRowData.Length - 1, 1); 
         sbrCSVData.Append(strRowData + "\r\n"); 
         strRowData = ""; 
        } 
        intStartIndex = intIndexCnt * intMaxRecords + 1; 
       } 
       else break; 
      } 
+0

좋은 구현 Pratik –

0

예이 문서에는이 내용이 언급되어 있습니다. 더 많은 데이터를 얻으려면 일반적으로 간격 또는 조건을 세분화 한 다음 여러 쿼리를 실행하여 데이터를 가져옵니다. 가 당신에게 조금 그래서

+0

단서를 주셔서 감사합니다. 문제가 해결되었습니다. –

+0

당신은 환영합니다 Pratik –