GA.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662
  1. <?php
  2. namespace app\lib;
  3. class GA{
  4. const SUPERNOVA_KEY_PATH= BASE_DIR . 'config/supernova.json';
  5. const ALIPEARL_KEY_PATH= BASE_DIR . 'config/alipearl.json';
  6. const WIGGINS_KEY_PATH= BASE_DIR . 'config/wiggins.json';
  7. const YOLISSA_KEY_PATH= BASE_DIR . 'config/yolissa.json';
  8. const ASTERIA_KEY_PATH= BASE_DIR . 'config/asteria.json';
  9. const WESTKISS_KEY_PATH= BASE_DIR . 'config/westkiss.json';
  10. private static $insances=[];
  11. private static function initializeAnalytics($dp){
  12. $KEY_FILE_LOCATION = self::getPath($dp);
  13. if(!$KEY_FILE_LOCATION){
  14. throw new \Exception("store 配置不存在");
  15. }
  16. $client = new \Google_Client();
  17. $client->setApplicationName("Hello Analytics Reporting");
  18. $client->setAuthConfig($KEY_FILE_LOCATION);
  19. $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
  20. $analytics = new \Google_Service_AnalyticsReporting($client);
  21. return $analytics;
  22. }
  23. public static function getInstance($dp){
  24. if(isset(self::$insances[$dp])){
  25. return self::$insances[$dp];
  26. }else{
  27. self::$insances[$dp]=self::initializeAnalytics($dp);
  28. return self::$insances[$dp];
  29. }
  30. }
  31. private function getViewId($dp){
  32. $VIEW_ID="";
  33. switch($dp){
  34. case "1"://supernovahair
  35. $VIEW_ID="155703065";
  36. break;
  37. case "2"://asteriahair
  38. $VIEW_ID="162723112";
  39. break;
  40. case "3"://alipearlhair
  41. $VIEW_ID="148377136";
  42. break;
  43. case "4"://alipearlhair
  44. $VIEW_ID="152302477";
  45. break;
  46. case "5"://yolissahair
  47. $VIEW_ID="157127813";
  48. break;
  49. case "6"://wiggins
  50. $VIEW_ID="154631720";
  51. break;
  52. }
  53. return $VIEW_ID;
  54. }
  55. public static function getPath($dp){
  56. $path="";
  57. switch($dp){
  58. case "1"://supernovahair
  59. $path=self::SUPERNOVA_KEY_PATH;
  60. break;
  61. case "2"://asteriahair
  62. $path=self::ASTERIA_KEY_PATH;
  63. break;
  64. case "3"://alipearlhair
  65. $path=self::ALIPEARL_KEY_PATH;
  66. break;
  67. case "4"://westkiss
  68. $path=self::WESTKISS_KEY_PATH;
  69. break;
  70. case "5"://yolissahair
  71. $path=self::YOLISSA_KEY_PATH;
  72. break;
  73. case "6"://alipearlhair
  74. $path=self::WIGGINS_KEY_PATH;
  75. break;
  76. }
  77. return $path;
  78. }
  79. public function contentpages($dp,$start_at,$end_at){
  80. $analytics=self::getInstance($dp);
  81. $metricArr=[
  82. 'pageviews'=>"ga:pageviews",
  83. 'uniquePageviews'=>"ga:uniquePageviews",
  84. 'avgTimeOnPage'=>"ga:avgTimeOnPage",
  85. 'entrances'=>"ga:entrances",
  86. 'bounceRate'=>"ga:bounceRate",
  87. 'exitRate'=>"ga:exitRate",
  88. 'pageValue'=>"ga:pageValue",
  89. ];
  90. $dimensionArr=[
  91. 'pagePath'=>'ga:pagePath',
  92. 'date'=>"ga:date",
  93. ];
  94. $VIEW_ID = $this->getViewId($dp);//
  95. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  96. $dateRange->setStartDate($start_at);
  97. $dateRange->setEndDate($end_at);
  98. $metrics=[];
  99. $dimensions=[];
  100. foreach($metricArr as $k=>$v){
  101. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  102. $Metric->setExpression($v);
  103. $Metric->setAlias($k);
  104. array_push($metrics,$Metric);
  105. }
  106. foreach($dimensionArr as $k=>$v){
  107. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  108. $Dimension->setName($v);
  109. array_push($dimensions,$Dimension);
  110. }
  111. $pageviewsFilter = new \Google_Service_AnalyticsReporting_MetricFilter();
  112. $pageviewsFilter->setMetricName("ga:pageviews");
  113. $pageviewsFilter->setOperator("GREATER_THAN");
  114. $pageviewsFilter->setComparisonValue("1");
  115. $MetricFilterClause=new \Google_Service_AnalyticsReporting_MetricFilterClause();
  116. $MetricFilterClause->setFilters(array($pageviewsFilter));
  117. $segmentDimensions = new \Google_Service_AnalyticsReporting_Dimension();
  118. $segmentDimensions->setName("ga:segment");
  119. array_push($dimensions,$segmentDimensions);
  120. // Create Dimension Filter.
  121. $dimensionFilter = new \Google_Service_AnalyticsReporting_SegmentDimensionFilter();
  122. $dimensionFilter->setDimensionName("ga:pagePath");
  123. $dimensionFilter->setOperator("REGEXP");
  124. $dimensionFilter->setExpressions(array("(fbclid|catalogsearch)"));
  125. // Create Segment Filter Clause.
  126. $segmentFilterClause = new \Google_Service_AnalyticsReporting_SegmentFilterClause();
  127. $segmentFilterClause->setDimensionFilter($dimensionFilter);
  128. // Create the Or Filters for Segment.
  129. $orFiltersForSegment = new \Google_Service_AnalyticsReporting_OrFiltersForSegment();
  130. $orFiltersForSegment->setSegmentFilterClauses(array($segmentFilterClause));
  131. // Create the Simple Segment.
  132. $simpleSegment = new \Google_Service_AnalyticsReporting_SimpleSegment();
  133. $simpleSegment->setOrFiltersForSegment(array($orFiltersForSegment));
  134. // Create the Segment Filters.
  135. $segmentFilter = new \Google_Service_AnalyticsReporting_SegmentFilter();
  136. $segmentFilter->setSimpleSegment($simpleSegment);
  137. $segmentFilter->setNot(True);
  138. // Create the Segment Definition.
  139. $segmentDefinition = new \Google_Service_AnalyticsReporting_SegmentDefinition();
  140. $segmentDefinition->setSegmentFilters(array($segmentFilter));
  141. $dynamicSegment = new \Google_Service_AnalyticsReporting_DynamicSegment();
  142. $dynamicSegment->setSessionSegment($segmentDefinition);
  143. $dynamicSegment->setName('pagePath');
  144. $segment = new \Google_Service_AnalyticsReporting_Segment();
  145. $segment->setDynamicSegment($dynamicSegment);
  146. $orderBy=new \Google_Service_AnalyticsReporting_OrderBy();
  147. $orderBy->setFieldName('ga:pageviews');
  148. $orderBy->setSortOrder("DESCENDING");
  149. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  150. $request->setViewId($VIEW_ID);
  151. $request->setDateRanges($dateRange);
  152. $request->setMetrics($metrics);
  153. $request->setDimensions($dimensions);
  154. $request->setSegments(array($segment));
  155. $request->setOrderBys($orderBy);
  156. $request->setPageSize(5000);
  157. $request->setMetricFilterClauses($MetricFilterClause);
  158. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  159. $body->setReportRequests( array( $request) );
  160. $reports= $analytics->reports->batchGet( $body );
  161. $result=$this->getResults($reports);
  162. return $result;
  163. }
  164. public function trafficsource($dp,$start_at,$end_at){
  165. $analytics=self::getInstance($dp);
  166. $metricArr=[
  167. 'users'=>"ga:users",
  168. 'newUsers'=>"ga:newUsers",
  169. 'sessions'=>"ga:sessions",
  170. 'bounceRate'=>"ga:bounceRate",
  171. 'pageviewsPerSession'=>"ga:pageviewsPerSession",
  172. 'avgSessionDuration'=>"ga:avgSessionDuration",
  173. 'transactionsPerVisit'=>"ga:transactionsPerVisit",
  174. 'transactions'=>"ga:transactions",
  175. 'transactionRevenue'=>"ga:transactionRevenue",
  176. ];
  177. $dimensionArr=[
  178. 'pagePath'=>'ga:source',
  179. 'date'=>"ga:date",
  180. 'channelGrouping'=>"ga:channelGrouping",
  181. 'landingPagePath'=>"ga:landingPagePath",
  182. 'keyword'=>"ga:keyword",
  183. 'socialNetwork'=>"ga:socialNetwork",
  184. ];
  185. $VIEW_ID = $this->getViewId($dp);//
  186. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  187. $dateRange->setStartDate($start_at);
  188. $dateRange->setEndDate($end_at);
  189. $metrics=[];
  190. $dimensions=[];
  191. foreach($metricArr as $k=>$v){
  192. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  193. $Metric->setExpression($v);
  194. $Metric->setAlias($k);
  195. array_push($metrics,$Metric);
  196. }
  197. foreach($dimensionArr as $k=>$v){
  198. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  199. $Dimension->setName($v);
  200. array_push($dimensions,$Dimension);
  201. }
  202. $segmentDimensions = new \Google_Service_AnalyticsReporting_Dimension();
  203. $segmentDimensions->setName("ga:segment");
  204. array_push($dimensions,$segmentDimensions);
  205. // Create Dimension Filter.
  206. $dimensionFilter = new \Google_Service_AnalyticsReporting_SegmentDimensionFilter();
  207. $dimensionFilter->setDimensionName("ga:source");
  208. $dimensionFilter->setOperator("REGEXP");
  209. $dimensionFilter->setExpressions(array("(fbclid|catalogsearch)"));
  210. // Create Segment Filter Clause.
  211. $segmentFilterClause = new \Google_Service_AnalyticsReporting_SegmentFilterClause();
  212. $segmentFilterClause->setDimensionFilter($dimensionFilter);
  213. // Create the Or Filters for Segment.
  214. $orFiltersForSegment = new \Google_Service_AnalyticsReporting_OrFiltersForSegment();
  215. $orFiltersForSegment->setSegmentFilterClauses(array($segmentFilterClause));
  216. // Create the Simple Segment.
  217. $simpleSegment = new \Google_Service_AnalyticsReporting_SimpleSegment();
  218. $simpleSegment->setOrFiltersForSegment(array($orFiltersForSegment));
  219. // Create the Segment Filters.
  220. $segmentFilter = new \Google_Service_AnalyticsReporting_SegmentFilter();
  221. $segmentFilter->setSimpleSegment($simpleSegment);
  222. $segmentFilter->setNot(True);
  223. // Create the Segment Definition.
  224. $segmentDefinition = new \Google_Service_AnalyticsReporting_SegmentDefinition();
  225. $segmentDefinition->setSegmentFilters(array($segmentFilter));
  226. $dynamicSegment = new \Google_Service_AnalyticsReporting_DynamicSegment();
  227. $dynamicSegment->setSessionSegment($segmentDefinition);
  228. $dynamicSegment->setName('trafficsources filter');
  229. $segment = new \Google_Service_AnalyticsReporting_Segment();
  230. $segment->setDynamicSegment($dynamicSegment);
  231. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  232. $request->setViewId($VIEW_ID);
  233. $request->setDateRanges($dateRange);
  234. $request->setMetrics($metrics);
  235. $request->setDimensions($dimensions);
  236. $request->setSegments(array($segment));
  237. $request->setPageSize(5000);
  238. // $request->setOrderBys($orderBy);
  239. // $request->setMetricFilterClauses($MetricFilterClause);
  240. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  241. $body->setReportRequests( array( $request) );
  242. $reports= $analytics->reports->batchGet( $body );
  243. $result=$this->getResults($reports);
  244. return $result;
  245. }
  246. public function visitors_geo($dp,$start_at,$end_at){
  247. $analytics=self::getInstance($dp);
  248. $dimensionArr=[
  249. 'country'=>'ga:country',
  250. 'region'=>"ga:region",
  251. ];
  252. $metricArr=[
  253. 'transactions'=>"ga:transactions",
  254. 'transactionRevenue'=>"ga:transactionRevenue",
  255. ];
  256. $VIEW_ID = $this->getViewId($dp);//
  257. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  258. $dateRange->setStartDate($start_at);
  259. $dateRange->setEndDate($end_at);
  260. $metrics=[];
  261. $dimensions=[];
  262. foreach($metricArr as $k=>$v){
  263. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  264. $Metric->setExpression($v);
  265. $Metric->setAlias($k);
  266. array_push($metrics,$Metric);
  267. }
  268. foreach($dimensionArr as $k=>$v){
  269. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  270. $Dimension->setName($v);
  271. array_push($dimensions,$Dimension);
  272. }
  273. $orderBy=new \Google_Service_AnalyticsReporting_OrderBy();
  274. $orderBy->setFieldName('ga:transactions');
  275. $orderBy->setSortOrder("DESCENDING");
  276. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  277. $request->setViewId($VIEW_ID);
  278. $request->setDateRanges($dateRange);
  279. $request->setMetrics($metrics);
  280. $request->setDimensions($dimensions);
  281. $request->setOrderBys($orderBy);
  282. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  283. $body->setReportRequests( array( $request) );
  284. $reports= $analytics->reports->batchGet( $body );
  285. $result=$this->getResults($reports);
  286. return $result;
  287. }
  288. public function product($dp,$start_at,$end_at){
  289. $analytics=self::getInstance($dp);
  290. $dimensionArr=[
  291. 'productName'=>'ga:productName',
  292. ];
  293. $metricArr=[
  294. 'itemRevenue'=>"ga:itemRevenue",
  295. 'uniquePurchases'=>"ga:uniquePurchases",
  296. 'itemQuantity'=>"ga:itemQuantity",
  297. ];
  298. $VIEW_ID = $this->getViewId($dp);//
  299. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  300. $dateRange->setStartDate($start_at);
  301. $dateRange->setEndDate($end_at);
  302. $metrics=[];
  303. $dimensions=[];
  304. foreach($metricArr as $k=>$v){
  305. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  306. $Metric->setExpression($v);
  307. $Metric->setAlias($k);
  308. array_push($metrics,$Metric);
  309. }
  310. foreach($dimensionArr as $k=>$v){
  311. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  312. $Dimension->setName($v);
  313. array_push($dimensions,$Dimension);
  314. }
  315. $orderBy=new \Google_Service_AnalyticsReporting_OrderBy();
  316. $orderBy->setFieldName('ga:itemQuantity');
  317. $orderBy->setSortOrder("DESCENDING");
  318. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  319. $request->setViewId($VIEW_ID);
  320. $request->setDateRanges($dateRange);
  321. $request->setMetrics($metrics);
  322. $request->setDimensions($dimensions);
  323. $request->setOrderBys($orderBy);
  324. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  325. $body->setReportRequests( array( $request) );
  326. $reports= $analytics->reports->batchGet( $body );
  327. $result=$this->getResults($reports);
  328. return $result;
  329. }
  330. public function visitors_type($dp,$start_at,$end_at){
  331. $analytics=self::getInstance($dp);
  332. $dimensionArr=[
  333. 'userType'=>'ga:userType',
  334. 'date'=>'ga:date',
  335. ];
  336. $metricArr=[
  337. 'users'=>"ga:users",
  338. 'newUsers'=>"ga:newUsers",
  339. ];
  340. $VIEW_ID = $this->getViewId($dp);//
  341. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  342. $dateRange->setStartDate($start_at);
  343. $dateRange->setEndDate($end_at);
  344. $metrics=[];
  345. $dimensions=[];
  346. foreach($metricArr as $k=>$v){
  347. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  348. $Metric->setExpression($v);
  349. $Metric->setAlias($k);
  350. array_push($metrics,$Metric);
  351. }
  352. foreach($dimensionArr as $k=>$v){
  353. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  354. $Dimension->setName($v);
  355. array_push($dimensions,$Dimension);
  356. }
  357. // $orderBy=new \Google_Service_AnalyticsReporting_OrderBy();
  358. // $orderBy->setFieldName('ga:itemQuantity');
  359. // $orderBy->setSortOrder("DESCENDING");
  360. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  361. $request->setViewId($VIEW_ID);
  362. $request->setDateRanges($dateRange);
  363. $request->setMetrics($metrics);
  364. $request->setDimensions($dimensions);
  365. // $request->setOrderBys($orderBy);
  366. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  367. $body->setReportRequests( array( $request) );
  368. $reports= $analytics->reports->batchGet( $body );
  369. $result=$this->getResults($reports);
  370. return $result;
  371. }
  372. public function productInfo($productName,$dp,$start_at,$end_at){
  373. $analytics=self::getInstance($dp);
  374. $dimensionArr=[
  375. 'productName'=>'ga:productName',
  376. ];
  377. $metricArr=[
  378. 'itemRevenue'=>"ga:itemRevenue",
  379. 'revenuePerItem'=>"ga:revenuePerItem",
  380. 'productRefundAmount'=>"ga:productRefundAmount",
  381. 'quantityAddedToCart'=>"ga:quantityAddedToCart",
  382. // 'quantityRemovedFromCart'=>"ga:quantityRemovedFromCart",
  383. 'itemQuantity'=>"ga:itemQuantity",
  384. 'productListViews'=>"ga:productListViews",
  385. 'productDetailViews'=>"ga:productDetailViews",
  386. 'productAddsToCart'=>"ga:productAddsToCart",
  387. // 'productRemovesFromCart'=>"ga:productRemovesFromCart",
  388. 'productCheckouts'=>"ga:productCheckouts",
  389. 'uniquePurchases'=>"ga:uniquePurchases",
  390. ];
  391. $VIEW_ID = $this->getViewId($dp);//
  392. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  393. $dateRange->setStartDate($start_at);
  394. $dateRange->setEndDate($end_at);
  395. $metrics=[];
  396. $dimensions=[];
  397. foreach($metricArr as $k=>$v){
  398. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  399. $Metric->setExpression($v);
  400. $Metric->setAlias($k);
  401. array_push($metrics,$Metric);
  402. }
  403. foreach($dimensionArr as $k=>$v){
  404. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  405. $Dimension->setName($v);
  406. array_push($dimensions,$Dimension);
  407. }
  408. $skuFilter = new \Google_Service_AnalyticsReporting_DimensionFilter();
  409. $skuFilter->setDimensionName("ga:productName");
  410. $skuFilter->setOperator("EXACT");
  411. $skuFilter->setExpressions([$productName]);
  412. $MetricFilterClause=new \Google_Service_AnalyticsReporting_MetricFilterClause();
  413. $MetricFilterClause->setFilters(array($skuFilter));
  414. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  415. $request->setViewId($VIEW_ID);
  416. $request->setDateRanges($dateRange);
  417. $request->setMetrics($metrics);
  418. $request->setDimensions($dimensions);
  419. $request->setDimensionFilterClauses($MetricFilterClause);
  420. // $request->setOrderBys($orderBy);
  421. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  422. $body->setReportRequests( array( $request) );
  423. $reports= $analytics->reports->batchGet( $body );
  424. $result=$this->getResults($reports);
  425. return $result;
  426. }
  427. public function goals($dp,$metricArr,$start_at,$end_at){
  428. $analytics=self::getInstance($dp);
  429. $dimensionArr=[
  430. // 'date'=>'ga:date',
  431. // 'sessionCount'=>'ga:sessionCount',
  432. ];
  433. $VIEW_ID = $this->getViewId($dp);//
  434. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  435. $dateRange->setStartDate($start_at);
  436. $dateRange->setEndDate($end_at);
  437. $metrics=[];
  438. $dimensions=[];
  439. foreach($metricArr as $k=>$v){
  440. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  441. $Metric->setExpression($v);
  442. $Metric->setAlias($k);
  443. array_push($metrics,$Metric);
  444. }
  445. foreach($dimensionArr as $k=>$v){
  446. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  447. $Dimension->setName($v);
  448. array_push($dimensions,$Dimension);
  449. }
  450. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  451. $request->setViewId($VIEW_ID);
  452. $request->setDateRanges($dateRange);
  453. $request->setMetrics($metrics);
  454. $request->setDimensions($dimensions);
  455. // $request->setOrderBys($orderBy);
  456. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  457. $body->setReportRequests( array( $request) );
  458. $reports= $analytics->reports->batchGet( $body );
  459. $result=$this->getResults($reports);
  460. return $result;
  461. }
  462. public function regionProduct($region,$dp,$start_at,$end_at){
  463. $analytics=self::getInstance($dp);
  464. $dimensionArr=[
  465. 'region'=>'ga:region',
  466. ];
  467. $metricArr=[
  468. 'itemRevenue'=>"ga:itemRevenue",
  469. 'revenuePerItem'=>"ga:revenuePerItem",
  470. 'productRefundAmount'=>"ga:productRefundAmount",
  471. 'quantityAddedToCart'=>"ga:quantityAddedToCart",
  472. // 'quantityRemovedFromCart'=>"ga:quantityRemovedFromCart",
  473. 'itemQuantity'=>"ga:itemQuantity",
  474. 'productListViews'=>"ga:productListViews",
  475. 'productDetailViews'=>"ga:productDetailViews",
  476. 'productAddsToCart'=>"ga:productAddsToCart",
  477. // 'productRemovesFromCart'=>"ga:productRemovesFromCart",
  478. 'productCheckouts'=>"ga:productCheckouts",
  479. // 'uniquePurchases'=>"ga:uniquePurchases",
  480. 'transactions'=>"ga:transactions",
  481. ];
  482. $VIEW_ID = $this->getViewId($dp);//
  483. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  484. $dateRange->setStartDate($start_at);
  485. $dateRange->setEndDate($end_at);
  486. $metrics=[];
  487. $dimensions=[];
  488. foreach($metricArr as $k=>$v){
  489. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  490. $Metric->setExpression($v);
  491. $Metric->setAlias($k);
  492. array_push($metrics,$Metric);
  493. }
  494. foreach($dimensionArr as $k=>$v){
  495. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  496. $Dimension->setName($v);
  497. array_push($dimensions,$Dimension);
  498. }
  499. $regionFilter = new \Google_Service_AnalyticsReporting_DimensionFilter();
  500. $regionFilter->setDimensionName("ga:region");
  501. $regionFilter->setOperator("EXACT");
  502. $regionFilter->setExpressions([$region]);
  503. $MetricFilterClause=new \Google_Service_AnalyticsReporting_MetricFilterClause();
  504. $MetricFilterClause->setFilters(array($regionFilter));
  505. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  506. $request->setViewId($VIEW_ID);
  507. $request->setDateRanges($dateRange);
  508. $request->setMetrics($metrics);
  509. $request->setDimensions($dimensions);
  510. $request->setDimensionFilterClauses($MetricFilterClause);
  511. // $request->setOrderBys($orderBy);
  512. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  513. $body->setReportRequests( array( $request) );
  514. $reports= $analytics->reports->batchGet( $body );
  515. $result=$this->getResults($reports);
  516. return $result;
  517. }
  518. /**
  519. * Queries the Analytics Reporting API V4.
  520. *
  521. * @param service An authorized Analytics Reporting API V4 service object.
  522. * @return The Analytics Reporting API V4 response.
  523. */
  524. function getContentReport($VIEW_ID,$analytics,$metricArr,$dimensionArr) {
  525. }
  526. function getResults($reports) {
  527. $data=[];
  528. for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
  529. $item=[];
  530. $report = $reports[ $reportIndex ];
  531. $header = $report->getColumnHeader();
  532. $dimensionHeaders = $header->getDimensions();
  533. $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
  534. $rows = $report->getData()->getRows();
  535. for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
  536. $row = $rows[ $rowIndex ];
  537. $dimensions = $row->getDimensions();
  538. $metrics = $row->getMetrics();
  539. if($dimensionHeaders&&$dimensions){
  540. for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
  541. $header = $dimensionHeaders[$i];
  542. $header=str_replace('ga:','',$header);
  543. $item[$header]=$dimensions[$i];
  544. // print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n\r");
  545. // echo"<br/>";
  546. }
  547. // $date=$dimensions[0];
  548. // $date=date('Y-m-d',strtotime($date));
  549. }
  550. if($metricHeaders&&$metrics){
  551. for ($j = 0; $j < count($metrics); $j++) {
  552. $values = $metrics[$j]->getValues();
  553. for ($k = 0; $k < count($values); $k++) {
  554. $entry = $metricHeaders[$k];
  555. $item[$entry->getName()]=$values[$k];
  556. // print($entry->getName() . ": " . $values[$k] . "\n\r");
  557. // echo"<br/>";
  558. }
  559. }
  560. }
  561. $data[]=$item;
  562. }
  563. }
  564. return $data;
  565. }
  566. }