GA.php 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028
  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. /*进一步封装
  80. *$config=[
  81. 'dp'=>'',
  82. 'metricArr'=[],
  83. 'dimensionArr'=[],
  84. 'date'=[start_at,end_at]
  85. 'SegmentDimensionFilters'=>[[name,operate,expression,not=]]
  86. 'oderBy'=>[name,order]
  87. ]
  88. *
  89. *
  90. *
  91. */
  92. public function getData($config){
  93. $dp=$config['dp']??"";
  94. $date=$config['date'];
  95. if(!$dp||!$date||empty($config['metricArr'])){
  96. return false;
  97. }
  98. $metricArr=$config['metricArr'];
  99. $dimensionArr=$config['dimensionArr']??[];
  100. $analytics=self::getInstance($dp);
  101. $VIEW_ID = $this->getViewId($dp);//
  102. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  103. $request->setViewId($VIEW_ID);
  104. $metrics=[];
  105. $dimensions=[];
  106. foreach($metricArr as $k=>$v){
  107. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  108. $Metric->setExpression($v);
  109. $Metric->setAlias($k);
  110. array_push($metrics,$Metric);
  111. }
  112. foreach($dimensionArr as $k=>$v){
  113. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  114. $Dimension->setName($v);
  115. array_push($dimensions,$Dimension);
  116. }
  117. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  118. $dateRange->setStartDate($date['start_at']);
  119. $dateRange->setEndDate($date['end_at']);
  120. $request->setDateRanges($dateRange);
  121. $segment=[];
  122. if(isset($config['SegmentDimensionFilters'])&&!empty($config['SegmentDimensionFilters'])){
  123. $segmentDimensions = new \Google_Service_AnalyticsReporting_Dimension();
  124. $segmentDimensions->setName("ga:segment");
  125. array_push($dimensions,$segmentDimensions);
  126. foreach($config['SegmentDimensionFilters'] as $filter){
  127. $segment[]=$this->setSegmentDimensionFilter($filter);
  128. }
  129. }
  130. if(isset($config['SegmentMetricFilters'])&&!empty($config['SegmentMetricFilters'])){
  131. foreach($config['SegmentMetricFilters'] as $filter){
  132. $segment[]=$this->setSegmentMetricFilters($filter);
  133. }
  134. }
  135. $request->setMetrics($metrics);
  136. $request->setDimensions($dimensions);
  137. if(!empty($segment)){
  138. $request->setSegments($segment);
  139. }
  140. if(isset($config['orderBy'])&&!empty($config['orderBy'])){
  141. $orderBy=new \Google_Service_AnalyticsReporting_OrderBy();
  142. $orderBy->setFieldName($config['orderBy']['name']);
  143. $orderBy->setSortOrder($config['orderBy']['order']);
  144. $request->setOrderBys($orderBy);
  145. }
  146. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  147. $body->setReportRequests( array( $request) );
  148. $reports= $analytics->reports->batchGet( $body );
  149. $result=$this->getResults($reports);
  150. return $result;
  151. }
  152. private function setSegmentDimensionFilter($param){
  153. $dimensionFilter = new \Google_Service_AnalyticsReporting_SegmentDimensionFilter();
  154. $dimensionFilter->setDimensionName($param['name']);
  155. $dimensionFilter->setOperator($param['operate']);
  156. $dimensionFilter->setExpressions($param['expression']);
  157. // Create Segment Filter Clause.
  158. $segmentFilterClause = new \Google_Service_AnalyticsReporting_SegmentFilterClause();
  159. $segmentFilterClause->setDimensionFilter($dimensionFilter);
  160. // Create the Or Filters for Segment.
  161. $orFiltersForSegment = new \Google_Service_AnalyticsReporting_OrFiltersForSegment();
  162. $orFiltersForSegment->setSegmentFilterClauses(array($segmentFilterClause));
  163. // Create the Simple Segment.
  164. $simpleSegment = new \Google_Service_AnalyticsReporting_SimpleSegment();
  165. $simpleSegment->setOrFiltersForSegment(array($orFiltersForSegment));
  166. // Create the Segment Filters.
  167. $segmentFilter = new \Google_Service_AnalyticsReporting_SegmentFilter();
  168. $segmentFilter->setSimpleSegment($simpleSegment);
  169. if($param['not']){
  170. $segmentFilter->setNot(True);
  171. }
  172. // Create the Segment Definition.
  173. $segmentDefinition = new \Google_Service_AnalyticsReporting_SegmentDefinition();
  174. $segmentDefinition->setSegmentFilters(array($segmentFilter));
  175. $dynamicSegment = new \Google_Service_AnalyticsReporting_DynamicSegment();
  176. $dynamicSegment->setSessionSegment($segmentDefinition);
  177. $dynamicSegment->setName($param['name']);
  178. $segment = new \Google_Service_AnalyticsReporting_Segment();
  179. $segment->setDynamicSegment($dynamicSegment);
  180. return $segment;
  181. }
  182. private function setSegmentMetricFilters($param){
  183. $metricFilter = new \Google_Service_AnalyticsReporting_SegmentMetricFilter();
  184. $metricFilter->setMetricName($param['name']);
  185. $metricFilter->setOperator($param['operate']);
  186. $metricFilter->setComparisonValue($param['value']);
  187. // Create Segment Filter Clause.
  188. $segmentFilterClause = new \Google_Service_AnalyticsReporting_SegmentFilterClause();
  189. $segmentFilterClause->setMetricFilter($metricFilter);
  190. // Create the Or Filters for Segment.
  191. $orFiltersForSegment = new \Google_Service_AnalyticsReporting_OrFiltersForSegment();
  192. $orFiltersForSegment->setSegmentFilterClauses(array($segmentFilterClause));
  193. // Create the Simple Segment.
  194. $simpleSegment = new \Google_Service_AnalyticsReporting_SimpleSegment();
  195. $simpleSegment->setOrFiltersForSegment(array($orFiltersForSegment));
  196. // Create the Segment Filters.
  197. $segmentFilter = new \Google_Service_AnalyticsReporting_SegmentFilter();
  198. $segmentFilter->setSimpleSegment($simpleSegment);
  199. if($param['not']){
  200. $segmentFilter->setNot(True);
  201. }
  202. // Create the Segment Definition.
  203. $segmentDefinition = new \Google_Service_AnalyticsReporting_SegmentDefinition();
  204. $segmentDefinition->setSegmentFilters(array($segmentFilter));
  205. $dynamicSegment = new \Google_Service_AnalyticsReporting_DynamicSegment();
  206. $dynamicSegment->setSessionSegment($segmentDefinition);
  207. $dynamicSegment->setName($param['name']);
  208. $segment = new \Google_Service_AnalyticsReporting_Segment();
  209. $segment->setDynamicSegment($dynamicSegment);
  210. return $segment;
  211. }
  212. public function contentpages($dp,$start_at,$end_at){
  213. $analytics=self::getInstance($dp);
  214. $metricArr=[
  215. 'pageviews'=>"ga:pageviews",
  216. 'uniquePageviews'=>"ga:uniquePageviews",
  217. 'avgTimeOnPage'=>"ga:avgTimeOnPage",
  218. 'entrances'=>"ga:entrances",
  219. 'bounceRate'=>"ga:bounceRate",
  220. 'exitRate'=>"ga:exitRate",
  221. 'pageValue'=>"ga:pageValue",
  222. ];
  223. $dimensionArr=[
  224. 'pagePath'=>'ga:pagePath',
  225. 'date'=>"ga:date",
  226. ];
  227. $VIEW_ID = $this->getViewId($dp);//
  228. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  229. $dateRange->setStartDate($start_at);
  230. $dateRange->setEndDate($end_at);
  231. $metrics=[];
  232. $dimensions=[];
  233. foreach($metricArr as $k=>$v){
  234. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  235. $Metric->setExpression($v);
  236. $Metric->setAlias($k);
  237. array_push($metrics,$Metric);
  238. }
  239. foreach($dimensionArr as $k=>$v){
  240. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  241. $Dimension->setName($v);
  242. array_push($dimensions,$Dimension);
  243. }
  244. $pageviewsFilter = new \Google_Service_AnalyticsReporting_MetricFilter();
  245. $pageviewsFilter->setMetricName("ga:pageviews");
  246. $pageviewsFilter->setOperator("GREATER_THAN");
  247. $pageviewsFilter->setComparisonValue("1");
  248. $MetricFilterClause=new \Google_Service_AnalyticsReporting_MetricFilterClause();
  249. $MetricFilterClause->setFilters(array($pageviewsFilter));
  250. $segmentDimensions = new \Google_Service_AnalyticsReporting_Dimension();
  251. $segmentDimensions->setName("ga:segment");
  252. array_push($dimensions,$segmentDimensions);
  253. // Create Dimension Filter.
  254. $dimensionFilter = new \Google_Service_AnalyticsReporting_SegmentDimensionFilter();
  255. $dimensionFilter->setDimensionName("ga:pagePath");
  256. $dimensionFilter->setOperator("REGEXP");
  257. $dimensionFilter->setExpressions(array("(fbclid|catalogsearch)"));
  258. // Create Segment Filter Clause.
  259. $segmentFilterClause = new \Google_Service_AnalyticsReporting_SegmentFilterClause();
  260. $segmentFilterClause->setDimensionFilter($dimensionFilter);
  261. // Create the Or Filters for Segment.
  262. $orFiltersForSegment = new \Google_Service_AnalyticsReporting_OrFiltersForSegment();
  263. $orFiltersForSegment->setSegmentFilterClauses(array($segmentFilterClause));
  264. // Create the Simple Segment.
  265. $simpleSegment = new \Google_Service_AnalyticsReporting_SimpleSegment();
  266. $simpleSegment->setOrFiltersForSegment(array($orFiltersForSegment));
  267. // Create the Segment Filters.
  268. $segmentFilter = new \Google_Service_AnalyticsReporting_SegmentFilter();
  269. $segmentFilter->setSimpleSegment($simpleSegment);
  270. $segmentFilter->setNot(True);
  271. // Create the Segment Definition.
  272. $segmentDefinition = new \Google_Service_AnalyticsReporting_SegmentDefinition();
  273. $segmentDefinition->setSegmentFilters(array($segmentFilter));
  274. $dynamicSegment = new \Google_Service_AnalyticsReporting_DynamicSegment();
  275. $dynamicSegment->setSessionSegment($segmentDefinition);
  276. $dynamicSegment->setName('pagePath');
  277. $segment = new \Google_Service_AnalyticsReporting_Segment();
  278. $segment->setDynamicSegment($dynamicSegment);
  279. $orderBy=new \Google_Service_AnalyticsReporting_OrderBy();
  280. $orderBy->setFieldName('ga:pageviews');
  281. $orderBy->setSortOrder("DESCENDING");
  282. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  283. $request->setViewId($VIEW_ID);
  284. $request->setDateRanges($dateRange);
  285. $request->setMetrics($metrics);
  286. $request->setDimensions($dimensions);
  287. $request->setSegments(array($segment));
  288. $request->setOrderBys($orderBy);
  289. $request->setPageSize(5000);
  290. $request->setMetricFilterClauses($MetricFilterClause);
  291. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  292. $body->setReportRequests( array( $request) );
  293. $reports= $analytics->reports->batchGet( $body );
  294. $result=$this->getResults($reports);
  295. return $result;
  296. }
  297. public function trafficsource($dp,$start_at,$end_at){
  298. $analytics=self::getInstance($dp);
  299. $metricArr=[
  300. 'users'=>"ga:users",
  301. 'newUsers'=>"ga:newUsers",
  302. 'sessions'=>"ga:sessions",
  303. 'bounceRate'=>"ga:bounceRate",
  304. 'pageviewsPerSession'=>"ga:pageviewsPerSession",
  305. 'avgSessionDuration'=>"ga:avgSessionDuration",
  306. 'transactionsPerVisit'=>"ga:transactionsPerVisit",
  307. 'transactions'=>"ga:transactions",
  308. 'transactionRevenue'=>"ga:transactionRevenue",
  309. ];
  310. $dimensionArr=[
  311. 'pagePath'=>'ga:source',
  312. 'date'=>"ga:date",
  313. 'channelGrouping'=>"ga:channelGrouping",
  314. 'landingPagePath'=>"ga:landingPagePath",
  315. 'keyword'=>"ga:keyword",
  316. 'socialNetwork'=>"ga:socialNetwork",
  317. ];
  318. $VIEW_ID = $this->getViewId($dp);//
  319. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  320. $dateRange->setStartDate($start_at);
  321. $dateRange->setEndDate($end_at);
  322. $metrics=[];
  323. $dimensions=[];
  324. foreach($metricArr as $k=>$v){
  325. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  326. $Metric->setExpression($v);
  327. $Metric->setAlias($k);
  328. array_push($metrics,$Metric);
  329. }
  330. foreach($dimensionArr as $k=>$v){
  331. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  332. $Dimension->setName($v);
  333. array_push($dimensions,$Dimension);
  334. }
  335. $segmentDimensions = new \Google_Service_AnalyticsReporting_Dimension();
  336. $segmentDimensions->setName("ga:segment");
  337. array_push($dimensions,$segmentDimensions);
  338. // Create Dimension Filter.
  339. $dimensionFilter = new \Google_Service_AnalyticsReporting_SegmentDimensionFilter();
  340. $dimensionFilter->setDimensionName("ga:source");
  341. $dimensionFilter->setOperator("REGEXP");
  342. $dimensionFilter->setExpressions(array("(fbclid|catalogsearch)"));
  343. // Create Segment Filter Clause.
  344. $segmentFilterClause = new \Google_Service_AnalyticsReporting_SegmentFilterClause();
  345. $segmentFilterClause->setDimensionFilter($dimensionFilter);
  346. // Create the Or Filters for Segment.
  347. $orFiltersForSegment = new \Google_Service_AnalyticsReporting_OrFiltersForSegment();
  348. $orFiltersForSegment->setSegmentFilterClauses(array($segmentFilterClause));
  349. // Create the Simple Segment.
  350. $simpleSegment = new \Google_Service_AnalyticsReporting_SimpleSegment();
  351. $simpleSegment->setOrFiltersForSegment(array($orFiltersForSegment));
  352. // Create the Segment Filters.
  353. $segmentFilter = new \Google_Service_AnalyticsReporting_SegmentFilter();
  354. $segmentFilter->setSimpleSegment($simpleSegment);
  355. $segmentFilter->setNot(True);
  356. // Create the Segment Definition.
  357. $segmentDefinition = new \Google_Service_AnalyticsReporting_SegmentDefinition();
  358. $segmentDefinition->setSegmentFilters(array($segmentFilter));
  359. $dynamicSegment = new \Google_Service_AnalyticsReporting_DynamicSegment();
  360. $dynamicSegment->setSessionSegment($segmentDefinition);
  361. $dynamicSegment->setName('trafficsources filter');
  362. $segment = new \Google_Service_AnalyticsReporting_Segment();
  363. $segment->setDynamicSegment($dynamicSegment);
  364. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  365. $request->setViewId($VIEW_ID);
  366. $request->setDateRanges($dateRange);
  367. $request->setMetrics($metrics);
  368. $request->setDimensions($dimensions);
  369. $request->setSegments(array($segment));
  370. $request->setPageSize(5000);
  371. // $request->setOrderBys($orderBy);
  372. // $request->setMetricFilterClauses($MetricFilterClause);
  373. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  374. $body->setReportRequests( array( $request) );
  375. $reports= $analytics->reports->batchGet( $body );
  376. $result=$this->getResults($reports);
  377. return $result;
  378. }
  379. public function visitors_geo($dp,$start_at,$end_at){
  380. $analytics=self::getInstance($dp);
  381. $dimensionArr=[
  382. 'country'=>'ga:country',
  383. 'region'=>"ga:region",
  384. ];
  385. $metricArr=[
  386. 'transactions'=>"ga:transactions",
  387. 'transactionRevenue'=>"ga:transactionRevenue",
  388. ];
  389. $VIEW_ID = $this->getViewId($dp);//
  390. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  391. $dateRange->setStartDate($start_at);
  392. $dateRange->setEndDate($end_at);
  393. $metrics=[];
  394. $dimensions=[];
  395. foreach($metricArr as $k=>$v){
  396. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  397. $Metric->setExpression($v);
  398. $Metric->setAlias($k);
  399. array_push($metrics,$Metric);
  400. }
  401. foreach($dimensionArr as $k=>$v){
  402. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  403. $Dimension->setName($v);
  404. array_push($dimensions,$Dimension);
  405. }
  406. $orderBy=new \Google_Service_AnalyticsReporting_OrderBy();
  407. $orderBy->setFieldName('ga:transactions');
  408. $orderBy->setSortOrder("DESCENDING");
  409. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  410. $request->setViewId($VIEW_ID);
  411. $request->setDateRanges($dateRange);
  412. $request->setMetrics($metrics);
  413. $request->setDimensions($dimensions);
  414. $request->setOrderBys($orderBy);
  415. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  416. $body->setReportRequests( array( $request) );
  417. $reports= $analytics->reports->batchGet( $body );
  418. $result=$this->getResults($reports);
  419. return $result;
  420. }
  421. public function product($dp,$start_at,$end_at){
  422. $analytics=self::getInstance($dp);
  423. $dimensionArr=[
  424. 'productName'=>'ga:productName',
  425. ];
  426. $metricArr=[
  427. 'itemRevenue'=>"ga:itemRevenue",
  428. 'uniquePurchases'=>"ga:uniquePurchases",
  429. 'itemQuantity'=>"ga:itemQuantity",
  430. ];
  431. $VIEW_ID = $this->getViewId($dp);//
  432. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  433. $dateRange->setStartDate($start_at);
  434. $dateRange->setEndDate($end_at);
  435. $metrics=[];
  436. $dimensions=[];
  437. foreach($metricArr as $k=>$v){
  438. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  439. $Metric->setExpression($v);
  440. $Metric->setAlias($k);
  441. array_push($metrics,$Metric);
  442. }
  443. foreach($dimensionArr as $k=>$v){
  444. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  445. $Dimension->setName($v);
  446. array_push($dimensions,$Dimension);
  447. }
  448. $orderBy=new \Google_Service_AnalyticsReporting_OrderBy();
  449. $orderBy->setFieldName('ga:itemQuantity');
  450. $orderBy->setSortOrder("DESCENDING");
  451. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  452. $request->setViewId($VIEW_ID);
  453. $request->setDateRanges($dateRange);
  454. $request->setMetrics($metrics);
  455. $request->setDimensions($dimensions);
  456. $request->setOrderBys($orderBy);
  457. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  458. $body->setReportRequests( array( $request) );
  459. $reports= $analytics->reports->batchGet( $body );
  460. $result=$this->getResults($reports);
  461. return $result;
  462. }
  463. public function visitors_type($dp,$start_at,$end_at){
  464. $analytics=self::getInstance($dp);
  465. $dimensionArr=[
  466. 'userType'=>'ga:userType',
  467. 'date'=>'ga:date',
  468. ];
  469. $metricArr=[
  470. 'users'=>"ga:users",
  471. 'newUsers'=>"ga:newUsers",
  472. ];
  473. $VIEW_ID = $this->getViewId($dp);//
  474. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  475. $dateRange->setStartDate($start_at);
  476. $dateRange->setEndDate($end_at);
  477. $metrics=[];
  478. $dimensions=[];
  479. foreach($metricArr as $k=>$v){
  480. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  481. $Metric->setExpression($v);
  482. $Metric->setAlias($k);
  483. array_push($metrics,$Metric);
  484. }
  485. foreach($dimensionArr as $k=>$v){
  486. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  487. $Dimension->setName($v);
  488. array_push($dimensions,$Dimension);
  489. }
  490. // $orderBy=new \Google_Service_AnalyticsReporting_OrderBy();
  491. // $orderBy->setFieldName('ga:itemQuantity');
  492. // $orderBy->setSortOrder("DESCENDING");
  493. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  494. $request->setViewId($VIEW_ID);
  495. $request->setDateRanges($dateRange);
  496. $request->setMetrics($metrics);
  497. $request->setDimensions($dimensions);
  498. // $request->setOrderBys($orderBy);
  499. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  500. $body->setReportRequests( array( $request) );
  501. $reports= $analytics->reports->batchGet( $body );
  502. $result=$this->getResults($reports);
  503. return $result;
  504. }
  505. public function productInfo($productName,$dp,$start_at,$end_at){
  506. $analytics=self::getInstance($dp);
  507. $dimensionArr=[
  508. 'productName'=>'ga:productName',
  509. ];
  510. $metricArr=[
  511. 'itemRevenue'=>"ga:itemRevenue",
  512. 'revenuePerItem'=>"ga:revenuePerItem",
  513. 'productRefundAmount'=>"ga:productRefundAmount",
  514. 'quantityAddedToCart'=>"ga:quantityAddedToCart",
  515. // 'quantityRemovedFromCart'=>"ga:quantityRemovedFromCart",
  516. 'itemQuantity'=>"ga:itemQuantity",
  517. 'productListViews'=>"ga:productListViews",
  518. 'productDetailViews'=>"ga:productDetailViews",
  519. 'productAddsToCart'=>"ga:productAddsToCart",
  520. // 'productRemovesFromCart'=>"ga:productRemovesFromCart",
  521. 'productCheckouts'=>"ga:productCheckouts",
  522. 'uniquePurchases'=>"ga:uniquePurchases",
  523. ];
  524. $VIEW_ID = $this->getViewId($dp);//
  525. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  526. $dateRange->setStartDate($start_at);
  527. $dateRange->setEndDate($end_at);
  528. $metrics=[];
  529. $dimensions=[];
  530. foreach($metricArr as $k=>$v){
  531. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  532. $Metric->setExpression($v);
  533. $Metric->setAlias($k);
  534. array_push($metrics,$Metric);
  535. }
  536. foreach($dimensionArr as $k=>$v){
  537. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  538. $Dimension->setName($v);
  539. array_push($dimensions,$Dimension);
  540. }
  541. $skuFilter = new \Google_Service_AnalyticsReporting_DimensionFilter();
  542. $skuFilter->setDimensionName("ga:productName");
  543. $skuFilter->setOperator("EXACT");
  544. $skuFilter->setExpressions([$productName]);
  545. $MetricFilterClause=new \Google_Service_AnalyticsReporting_MetricFilterClause();
  546. $MetricFilterClause->setFilters(array($skuFilter));
  547. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  548. $request->setViewId($VIEW_ID);
  549. $request->setDateRanges($dateRange);
  550. $request->setMetrics($metrics);
  551. $request->setDimensions($dimensions);
  552. $request->setDimensionFilterClauses($MetricFilterClause);
  553. // $request->setOrderBys($orderBy);
  554. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  555. $body->setReportRequests( array( $request) );
  556. $reports= $analytics->reports->batchGet( $body );
  557. $result=$this->getResults($reports);
  558. return $result;
  559. }
  560. public function goals($dp,$metricArr,$start_at,$end_at){
  561. $analytics=self::getInstance($dp);
  562. $dimensionArr=[
  563. // 'date'=>'ga:date',
  564. // 'sessionCount'=>'ga:sessionCount',
  565. ];
  566. $VIEW_ID = $this->getViewId($dp);//
  567. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  568. $dateRange->setStartDate($start_at);
  569. $dateRange->setEndDate($end_at);
  570. $metrics=[];
  571. $dimensions=[];
  572. foreach($metricArr as $k=>$v){
  573. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  574. $Metric->setExpression($v);
  575. $Metric->setAlias($k);
  576. array_push($metrics,$Metric);
  577. }
  578. foreach($dimensionArr as $k=>$v){
  579. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  580. $Dimension->setName($v);
  581. array_push($dimensions,$Dimension);
  582. }
  583. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  584. $request->setViewId($VIEW_ID);
  585. $request->setDateRanges($dateRange);
  586. $request->setMetrics($metrics);
  587. $request->setDimensions($dimensions);
  588. // $request->setOrderBys($orderBy);
  589. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  590. $body->setReportRequests( array( $request) );
  591. $reports= $analytics->reports->batchGet( $body );
  592. $result=$this->getResults($reports);
  593. return $result;
  594. }
  595. public function regionProduct($region,$dp,$start_at,$end_at){
  596. $analytics=self::getInstance($dp);
  597. $dimensionArr=[
  598. 'region'=>'ga:region',
  599. ];
  600. $metricArr=[
  601. 'itemRevenue'=>"ga:itemRevenue",
  602. 'revenuePerItem'=>"ga:revenuePerItem",
  603. 'productRefundAmount'=>"ga:productRefundAmount",
  604. 'quantityAddedToCart'=>"ga:quantityAddedToCart",
  605. // 'quantityRemovedFromCart'=>"ga:quantityRemovedFromCart",
  606. 'itemQuantity'=>"ga:itemQuantity",
  607. 'productListViews'=>"ga:productListViews",
  608. 'productDetailViews'=>"ga:productDetailViews",
  609. 'productAddsToCart'=>"ga:productAddsToCart",
  610. // 'productRemovesFromCart'=>"ga:productRemovesFromCart",
  611. 'productCheckouts'=>"ga:productCheckouts",
  612. // 'uniquePurchases'=>"ga:uniquePurchases",
  613. 'transactions'=>"ga:transactions",
  614. ];
  615. $VIEW_ID = $this->getViewId($dp);//
  616. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  617. $dateRange->setStartDate($start_at);
  618. $dateRange->setEndDate($end_at);
  619. $metrics=[];
  620. $dimensions=[];
  621. foreach($metricArr as $k=>$v){
  622. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  623. $Metric->setExpression($v);
  624. $Metric->setAlias($k);
  625. array_push($metrics,$Metric);
  626. }
  627. foreach($dimensionArr as $k=>$v){
  628. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  629. $Dimension->setName($v);
  630. array_push($dimensions,$Dimension);
  631. }
  632. $regionFilter = new \Google_Service_AnalyticsReporting_DimensionFilter();
  633. $regionFilter->setDimensionName("ga:region");
  634. $regionFilter->setOperator("EXACT");
  635. $regionFilter->setExpressions([$region]);
  636. $MetricFilterClause=new \Google_Service_AnalyticsReporting_MetricFilterClause();
  637. $MetricFilterClause->setFilters(array($regionFilter));
  638. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  639. $request->setViewId($VIEW_ID);
  640. $request->setDateRanges($dateRange);
  641. $request->setMetrics($metrics);
  642. $request->setDimensions($dimensions);
  643. $request->setDimensionFilterClauses($MetricFilterClause);
  644. // $request->setOrderBys($orderBy);
  645. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  646. $body->setReportRequests( array( $request) );
  647. $reports= $analytics->reports->batchGet( $body );
  648. $result=$this->getResults($reports);
  649. return $result;
  650. }
  651. public function storeData($dp,$start_at,$end_at){
  652. $analytics=self::getInstance($dp);
  653. $dimensionArr=[
  654. // 'campaign'=>'ga:campaign'
  655. ];
  656. $metricArr=[
  657. '销量'=>"ga:itemQuantity",
  658. '订单量'=>"ga:transactions",
  659. '订单金额'=>"ga:transactionRevenue",
  660. '广告点击次数'=>"ga:adClicks",//点击次数
  661. '广告花费'=>"ga:adCost",//成本
  662. 'CTR'=>"ga:CTR",//点击率
  663. 'ROAS'=>"ga:ROAS",//回报率
  664. ];
  665. $VIEW_ID = $this->getViewId($dp);//
  666. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  667. $dateRange->setStartDate($start_at);
  668. $dateRange->setEndDate($end_at);
  669. $metrics=[];
  670. $dimensions=[];
  671. foreach($metricArr as $k=>$v){
  672. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  673. $Metric->setExpression($v);
  674. $Metric->setAlias($k);
  675. array_push($metrics,$Metric);
  676. }
  677. foreach($dimensionArr as $k=>$v){
  678. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  679. $Dimension->setName($v);
  680. array_push($dimensions,$Dimension);
  681. }
  682. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  683. $request->setViewId($VIEW_ID);
  684. $request->setDateRanges($dateRange);
  685. $request->setMetrics($metrics);
  686. $request->setDimensions($dimensions);
  687. // $request->setOrderBys($orderBy);
  688. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  689. $body->setReportRequests( array( $request) );
  690. $reports= $analytics->reports->batchGet( $body );
  691. $result=$this->getResults($reports);
  692. return $result[0]??[];
  693. }
  694. public function storeSellData($dp,$start_at,$end_at,$type="day"){
  695. $analytics=self::getInstance($dp);
  696. switch($type){
  697. case "day":
  698. $dimensionArr=[
  699. 'date'=>'ga:date',
  700. ];
  701. break;
  702. case "hour":
  703. $dimensionArr=[
  704. 'date'=>'ga:date',
  705. 'hour'=>'ga:hour'
  706. ];
  707. break;
  708. case "week":
  709. $dimensionArr=[
  710. 'year'=>'ga:isoYear',
  711. 'week'=>'ga:isoWeek',
  712. ];
  713. break;
  714. case "month":
  715. $dimensionArr=[
  716. 'year'=>'ga:year',
  717. 'month'=>'ga:month',
  718. ];
  719. break;
  720. }
  721. $metricArr=[
  722. 'itemQuantity'=>"ga:itemQuantity",
  723. ];
  724. $VIEW_ID = $this->getViewId($dp);//
  725. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  726. $dateRange->setStartDate($start_at);
  727. $dateRange->setEndDate($end_at);
  728. $metrics=[];
  729. $dimensions=[];
  730. foreach($metricArr as $k=>$v){
  731. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  732. $Metric->setExpression($v);
  733. $Metric->setAlias($k);
  734. array_push($metrics,$Metric);
  735. }
  736. foreach($dimensionArr as $k=>$v){
  737. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  738. $Dimension->setName($v);
  739. array_push($dimensions,$Dimension);
  740. }
  741. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  742. $request->setViewId($VIEW_ID);
  743. $request->setDateRanges($dateRange);
  744. $request->setMetrics($metrics);
  745. $request->setDimensions($dimensions);
  746. // $request->setOrderBys($orderBy);
  747. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  748. $body->setReportRequests( array( $request) );
  749. $reports= $analytics->reports->batchGet( $body );
  750. $result=$this->getResults($reports);
  751. return $result;
  752. }
  753. public function trafficsource_overview($dp,$start_at,$end_at){
  754. $analytics=self::getInstance($dp);
  755. $dimensionArr=[
  756. 'channelGrouping'=>'ga:channelGrouping',
  757. ];
  758. $metricArr=[
  759. 'users'=>"ga:users",
  760. 'newUsers'=>"ga:newUsers",
  761. 'sessions'=>"ga:sessions",
  762. 'bounceRate'=>"ga:bounceRate",
  763. 'transactionsPerSession'=>"ga:transactionsPerSession",
  764. 'transactionRevenue'=>"ga:transactionRevenue",
  765. 'transactions'=>"ga:transactions",
  766. ];
  767. $VIEW_ID = $this->getViewId($dp);//
  768. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  769. $dateRange->setStartDate($start_at);
  770. $dateRange->setEndDate($end_at);
  771. $metrics=[];
  772. $dimensions=[];
  773. foreach($metricArr as $k=>$v){
  774. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  775. $Metric->setExpression($v);
  776. $Metric->setAlias($k);
  777. array_push($metrics,$Metric);
  778. }
  779. foreach($dimensionArr as $k=>$v){
  780. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  781. $Dimension->setName($v);
  782. array_push($dimensions,$Dimension);
  783. }
  784. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  785. $request->setViewId($VIEW_ID);
  786. $request->setDateRanges($dateRange);
  787. $request->setMetrics($metrics);
  788. $request->setDimensions($dimensions);
  789. // $request->setOrderBys($orderBy);
  790. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  791. $body->setReportRequests( array( $request) );
  792. $reports= $analytics->reports->batchGet( $body );
  793. $result=$this->getResults($reports);
  794. return $result;
  795. }
  796. public function googleAds(){
  797. $analytics=self::getInstance($dp);
  798. $dimensionArr=[
  799. 'adwordsCampaignID'=>'ga:adwordsCampaignID',
  800. ];
  801. $metricArr=[
  802. 'adClicks'=>"ga:adClicks",
  803. 'adCost'=>"ga:adCost",
  804. 'CPC'=>"ga:CPC",
  805. 'users'=>"ga:users",
  806. 'sessions'=>"ga:sessions",
  807. 'bounceRate'=>"ga:bounceRate",
  808. 'transactionsPerSession'=>"ga:transactionsPerSession",
  809. 'transactionRevenue'=>"ga:transactionRevenue",
  810. 'transactions'=>"ga:transactions",
  811. ];
  812. $VIEW_ID = $this->getViewId($dp);//
  813. $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  814. $dateRange->setStartDate($start_at);
  815. $dateRange->setEndDate($end_at);
  816. $metrics=[];
  817. $dimensions=[];
  818. foreach($metricArr as $k=>$v){
  819. $Metric = new \Google_Service_AnalyticsReporting_Metric();
  820. $Metric->setExpression($v);
  821. $Metric->setAlias($k);
  822. array_push($metrics,$Metric);
  823. }
  824. foreach($dimensionArr as $k=>$v){
  825. $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
  826. $Dimension->setName($v);
  827. array_push($dimensions,$Dimension);
  828. }
  829. $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  830. $request->setViewId($VIEW_ID);
  831. $request->setDateRanges($dateRange);
  832. $request->setMetrics($metrics);
  833. $request->setDimensions($dimensions);
  834. // $request->setOrderBys($orderBy);
  835. $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  836. $body->setReportRequests( array( $request) );
  837. $reports= $analytics->reports->batchGet( $body );
  838. $result=$this->getResults($reports);
  839. return $result;
  840. }
  841. function getResults($reports) {
  842. $data=[];
  843. for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
  844. $item=[];
  845. $report = $reports[ $reportIndex ];
  846. $header = $report->getColumnHeader();
  847. $dimensionHeaders = $header->getDimensions();
  848. $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
  849. $rows = $report->getData()->getRows();
  850. for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
  851. $row = $rows[ $rowIndex ];
  852. $dimensions = $row->getDimensions();
  853. $metrics = $row->getMetrics();
  854. if($dimensionHeaders&&$dimensions){
  855. for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
  856. $header = $dimensionHeaders[$i];
  857. $header=str_replace('ga:','',$header);
  858. $item[$header]=$dimensions[$i];
  859. // print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n\r");
  860. // echo"<br/>";
  861. }
  862. // $date=$dimensions[0];
  863. // $date=date('Y-m-d',strtotime($date));
  864. }
  865. if($metricHeaders&&$metrics){
  866. for ($j = 0; $j < count($metrics); $j++) {
  867. $values = $metrics[$j]->getValues();
  868. for ($k = 0; $k < count($values); $k++) {
  869. $entry = $metricHeaders[$k];
  870. $item[$entry->getName()]=$values[$k];
  871. // print($entry->getName() . ": " . $values[$k] . "\n\r");
  872. // echo"<br/>";
  873. }
  874. }
  875. }
  876. $data[]=$item;
  877. }
  878. }
  879. return $data;
  880. }
  881. }