2

PHP 용 Google 클라이언트 라이브러리를 사용하여 Google 웹 로그 분석보고 API 버전 4를 사용하여 Google 웹 로그 분석에서 데이터를 가져옵니다. 문제는 내 정규식을 수락하지 않는다는 것입니다. Google의 검색어 탐색기에서 정규 표현식이 작동하는지 확인했습니다. 그것은 그것이 작동하지 않는 Google_Service_AnalyticsReporting_DimensionFilter() 클래스와 함께 사용하려고 할 때입니다. 결과는 합계가 0 인 경우 레코드가 반환되지 않음을 나타냅니다. 아래 코드를 살펴보십시오.정규 표현식을 Google Analytics Reporting API V4와 함께 사용하는 방법

function getReport($analytics) 
{ 

    // Replace with your view ID, for example XXXX. 
    $VIEW_ID = $this->viewId; 

    // Create the DateRange object. 
    $dateRange = new Google_Service_AnalyticsReporting_DateRange(); 
    $dateRange->setStartDate($this->startDate); 
    $dateRange->setEndDate($this->endDate); 

    // Create the Metrics object. 
    $sessions = new Google_Service_AnalyticsReporting_Metric(); 
    $sessions->setExpression($this->metrics); 
    $sessions->setAlias($this->metricAlias); 

    //Create the Dimensions object. 
    $pagePath = new Google_Service_AnalyticsReporting_Dimension(); 
    $pagePath->setName("ga:pagePath"); 

    // Create Dimension Filter 1, Must use: =~ 
    $dimensionFilter1 = new Google_Service_AnalyticsReporting_DimensionFilter(); 
    $dimensionFilter1->setDimensionName("ga:pagePath"); 
    $dimensionFilter1->setOperator('REGEXP'); 
    $dimensionFilter1->setExpressions('27-of-the-most-beautiful-small-towns-to-visit-in-europe'); 
    $dimensionFilter1->setNot(FALSE); 

    // Create Dimension Filter 2, Must use: !~ 
    $dimensionFilter2 = new Google_Service_AnalyticsReporting_DimensionFilter(); 
    $dimensionFilter2->setDimensionName("ga:pagePath"); 
    $dimensionFilter2->setOperator('REGEXP'); 
    $dimensionFilter2->setExpressions('\/.*?\/[0-9]+'); 
    $dimensionFilter2->setNot(TRUE); 

    // Create Dimension Filter 3, Must use !~ 
    $dimensionFilter3 = new Google_Service_AnalyticsReporting_DimensionFilter(); 
    $dimensionFilter3->setDimensionName("ga:pagePath"); 
    $dimensionFilter3->setOperator('REGEXP'); 
    $dimensionFilter3->setExpressions('\/.*?\/images/images'); 
    $dimensionFilter3->setNot(TRUE); 

    // Create the DimensionFilterClauses 
    $dimensionFilterClause = new Google_Service_AnalyticsReporting_DimensionFilterClause(); 
    $dimensionFilterClause->setFilters([$dimensionFilter1, $dimensionFilter2, $dimensionFilter3]); 

    // Create the ReportRequest object. 
    $request = new Google_Service_AnalyticsReporting_ReportRequest(); 
    $request->setViewId($VIEW_ID); 
    $request->setDateRanges($dateRange); 
    $request->setMetrics([$sessions]); 
    $request->setDimensions([$pagePath]); 
    $request->setDimensionFilterClauses([$dimensionFilterClause]); 

    $request->setIncludeEmptyRows(false); 

    $body = new Google_Service_AnalyticsReporting_GetReportsRequest(); 
    $body->setReportRequests([$request]); 

    return $analytics->reports->batchGet($body); 
} 

이 코드가 올바르지 않습니까?

// Create Dimension Filter 1. 
    $dimensionFilter = new Google_Service_AnalyticsReporting_DimensionFilter(); 
    $dimensionFilter->setDimensionName("ga:pagePath"); 
    $dimensionFilter->setOperator('REGEXP'); 
    $dimensionFilter->setExpressions('ga:PagePath !~ \/.*?\/[0-9]+'); 
+0

쿼리 탐색기와 PHP API 요청의 출력을 모두 표시 할 수 있습니까? – dikesh

+0

예. Query Explorer에서 다음 결과를 출력합니다. https://pastebin.com/enddpNbc 총 304 개의 레코드가 반환되었습니다. 위에 게시 한 코드가있는 API는 다음을 반환합니다. https://pastebin.com/VRchv798 –

답변

0

예. 코드에는 실수가 있습니다. setExpression 방법에 치수 이름, 즉 ga:pagePath을 포함하면 안됩니다.

나는 필터에 Does not match Regular Expression 연산자를 추가하려고한다고 가정합니다.

그래서 코드는 다음과 같아야합니다 작동 여부

$dimensionFilter = new Google_Service_AnalyticsReporting_DimensionFilter(); 
$dimensionFilter->setDimensionName("ga:pagePath"); 
$dimensionFilter->setOperator('REGEXP'); 
$dimensionFilter->setExpressions('\/.*?\/[0-9]+'); 
$dimensionFilter->setNot(TRUE); 

참조.

+0

Dikesh, 여전히 작동하지 않았습니다. 게시 된 업데이트 된 코드를 확인하십시오. 나는 3 개의 필터를 가지고있다. Dimension Filter 1, 반드시 사용해야 함 : = ~, Dimension Filter 2 만들기,! ~를 사용하고 Dimension Filter 3을 작성해야 함! ~ –

+0

어떻게해야합니까?> setNot()은 = ~ 또는! ~로 변환합니다. –