| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 |
- <?php
- /**
- * Zend Framework
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://framework.zend.com/license/new-bsd
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@zend.com so we can send you a copy immediately.
- *
- * @category Zend
- * @package Zend_Gdata
- * @subpackage Analytics
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- * @version $Id$
- */
- /**
- * @see Zend_Gdata_Query
- */
- require_once 'Zend/Gdata/Query.php';
- /**
- * @category Zend
- * @package Zend_Gdata
- * @subpackage Analytics
- */
- class Zend_Gdata_Analytics_DataQuery extends Zend_Gdata_Query
- {
- const ANALYTICS_FEED_URI = 'https://www.googleapis.com/analytics/v2.4/data';
- /**
- * The default URI used for feeds.
- */
- protected $_defaultFeedUri = self::ANALYTICS_FEED_URI;
- // D1. Visitor
- const DIMENSION_BROWSER = 'ga:browser';
- const DIMENSION_BROWSER_VERSION = 'ga:browserVersion';
- const DIMENSION_CITY = 'ga:city';
- const DIMENSION_CONNECTIONSPEED = 'ga:connectionSpeed';
- const DIMENSION_CONTINENT = 'ga:continent';
- const DIMENSION_COUNTRY = 'ga:country';
- const DIMENSION_DATE = 'ga:date';
- const DIMENSION_DAY = 'ga:day';
- const DIMENSION_DAYS_SINCE_LAST_VISIT= 'ga:daysSinceLastVisit';
- const DIMENSION_FLASH_VERSION = 'ga:flashVersion';
- const DIMENSION_HOSTNAME = 'ga:hostname';
- const DIMENSION_HOUR = 'ga:hour';
- const DIMENSION_JAVA_ENABLED= 'ga:javaEnabled';
- const DIMENSION_LANGUAGE= 'ga:language';
- const DIMENSION_LATITUDE = 'ga:latitude';
- const DIMENSION_LONGITUDE = 'ga:longitude';
- const DIMENSION_MONTH = 'ga:month';
- const DIMENSION_NETWORK_DOMAIN = 'ga:networkDomain';
- const DIMENSION_NETWORK_LOCATION = 'ga:networkLocation';
- const DIMENSION_OPERATING_SYSTEM = 'ga:operatingSystem';
- const DIMENSION_OPERATING_SYSTEM_VERSION = 'ga:operatingSystemVersion';
- const DIMENSION_PAGE_DEPTH = 'ga:pageDepth';
- const DIMENSION_REGION = 'ga:region';
- const DIMENSION_SCREEN_COLORS= 'ga:screenColors';
- const DIMENSION_SCREEN_RESOLUTION = 'ga:screenResolution';
- const DIMENSION_SUB_CONTINENT = 'ga:subContinent';
- const DIMENSION_USER_DEFINED_VALUE = 'ga:userDefinedValue';
- const DIMENSION_VISIT_COUNT = 'ga:visitCount';
- const DIMENSION_VISIT_LENGTH = 'ga:visitLength';
- const DIMENSION_VISITOR_TYPE = 'ga:visitorType';
- const DIMENSION_WEEK = 'ga:week';
- const DIMENSION_YEAR = 'ga:year';
- // D2. Campaign
- const DIMENSION_AD_CONTENT = 'ga:adContent';
- const DIMENSION_AD_GROUP = 'ga:adGroup';
- const DIMENSION_AD_SLOT = 'ga:adSlot';
- const DIMENSION_AD_SLOT_POSITION = 'ga:adSlotPosition';
- const DIMENSION_CAMPAIGN = 'ga:campaign';
- const DIMENSION_KEYWORD = 'ga:keyword';
- const DIMENSION_MEDIUM = 'ga:medium';
- const DIMENSION_REFERRAL_PATH = 'ga:referralPath';
- const DIMENSION_SOURCE = 'ga:source';
- // D3. Content
- const DIMENSION_EXIT_PAGE_PATH = 'ga:exitPagePath';
- const DIMENSION_LANDING_PAGE_PATH = 'ga:landingPagePath';
- const DIMENSION_PAGE_PATH = 'ga:pagePath';
- const DIMENSION_PAGE_TITLE = 'ga:pageTitle';
- const DIMENSION_SECOND_PAGE_PATH = 'ga:secondPagePath';
- // D4. Ecommerce
- const DIMENSION_AFFILIATION = 'ga:affiliation';
- const DIMENSION_DAYS_TO_TRANSACTION = 'ga:daysToTransaction';
- const DIMENSION_PRODUCT_CATEGORY = 'ga:productCategory';
- const DIMENSION_PRODUCT_NAME = 'ga:productName';
- const DIMENSION_PRODUCT_SKU = 'ga:productSku';
- const DIMENSION_TRANSACTION_ID = 'ga:transactionId';
- const DIMENSION_VISITS_TO_TRANSACTION = 'ga:visitsToTransaction';
- // D5. Internal Search
- const DIMENSION_SEARCH_CATEGORY = 'ga:searchCategory';
- const DIMENSION_SEARCH_DESTINATION_PAGE = 'ga:searchDestinationPage';
- const DIMENSION_SEARCH_KEYWORD = 'ga:searchKeyword';
- const DIMENSION_SEARCH_KEYWORD_REFINEMENT = 'ga:searchKeywordRefinement';
- const DIMENSION_SEARCH_START_PAGE = 'ga:searchStartPage';
- const DIMENSION_SEARCH_USED = 'ga:searchUsed';
- // D6. Navigation
- const DIMENSION_NEXT_PAGE_PATH = 'ga:nextPagePath';
- const DIMENSION_PREV_PAGE_PATH= 'ga:previousPagePath';
- // D7. Events
- const DIMENSION_EVENT_CATEGORY = 'ga:eventCategory';
- const DIMENSION_EVENT_ACTION = 'ga:eventAction';
- const DIMENSION_EVENT_LABEL = 'ga:eventLabel';
- // D8. Custon Variables
- const DIMENSION_CUSTOM_VAR_NAME_1 = 'ga:customVarName1';
- const DIMENSION_CUSTOM_VAR_NAME_2 = 'ga:customVarName2';
- const DIMENSION_CUSTOM_VAR_NAME_3 = 'ga:customVarName3';
- const DIMENSION_CUSTOM_VAR_NAME_4 = 'ga:customVarName4';
- const DIMENSION_CUSTOM_VAR_NAME_5 = 'ga:customVarName5';
- const DIMENSION_CUSTOM_VAR_VALUE_1 = 'ga:customVarValue1';
- const DIMENSION_CUSTOM_VAR_VALUE_2 = 'ga:customVarValue2';
- const DIMENSION_CUSTOM_VAR_VALUE_3 = 'ga:customVarValue3';
- const DIMENSION_CUSTOM_VAR_VALUE_4 = 'ga:customVarValue4';
- const DIMENSION_CUSTOM_VAR_VALUE_5 = 'ga:customVarValue5';
- // M1. Visitor
- const METRIC_BOUNCES = 'ga:bounces';
- const METRIC_ENTRANCES = 'ga:entrances';
- const METRIC_EXITS = 'ga:exits';
- const METRIC_NEW_VISITS = 'ga:newVisits';
- const METRIC_PAGEVIEWS = 'ga:pageviews';
- const METRIC_TIME_ON_PAGE = 'ga:timeOnPage';
- const METRIC_TIME_ON_SITE = 'ga:timeOnSite';
- const METRIC_VISITORS = 'ga:visitors';
- const METRIC_VISITS = 'ga:visits';
- // M2. Campaign
- const METRIC_AD_CLICKS = 'ga:adClicks';
- const METRIC_AD_COST = 'ga:adCost';
- const METRIC_CPC = 'ga:CPC';
- const METRIC_CPM = 'ga:CPM';
- const METRIC_CTR = 'ga:CTR';
- const METRIC_IMPRESSIONS = 'ga:impressions';
- // M3. Content
- const METRIC_UNIQUE_PAGEVIEWS = 'ga:uniquePageviews';
- // M4. Ecommerce
- const METRIC_ITEM_REVENUE = 'ga:itemRevenue';
- const METRIC_ITEM_QUANTITY = 'ga:itemQuantity';
- const METRIC_TRANSACTIONS = 'ga:transactions';
- const METRIC_TRANSACTION_REVENUE = 'ga:transactionRevenue';
- const METRIC_TRANSACTION_SHIPPING = 'ga:transactionShipping';
- const METRIC_TRANSACTION_TAX = 'ga:transactionTax';
- const METRIC_UNIQUE_PURCHASES = 'ga:uniquePurchases';
- // M5. Internal Search
- const METRIC_SEARCH_DEPTH = 'ga:searchDepth';
- const METRIC_SEARCH_DURATION = 'ga:searchDuration';
- const METRIC_SEARCH_EXITS = 'ga:searchExits';
- const METRIC_SEARCH_REFINEMENTS = 'ga:searchRefinements';
- const METRIC_SEARCH_UNIQUES = 'ga:searchUniques';
- const METRIC_SEARCH_VISIT = 'ga:searchVisits';
- // M6. Goals
- const METRIC_GOAL_COMPLETIONS_ALL = 'ga:goalCompletionsAll';
- const METRIC_GOAL_STARTS_ALL = 'ga:goalStartsAll';
- const METRIC_GOAL_VALUE_ALL = 'ga:goalValueAll';
- // TODO goals 1-20
- const METRIC_GOAL_1_COMPLETION = 'ga:goal1Completions';
- const METRIC_GOAL_1_STARTS = 'ga:goal1Starts';
- const METRIC_GOAL_1_VALUE = 'ga:goal1Value';
- // M7. Events
- const METRIC_TOTAL_EVENTS = 'ga:totalEvents';
- const METRIC_UNIQUE_EVENTS = 'ga:uniqueEvents';
- const METRIC_EVENT_VALUE = 'ga:eventValue';
-
- // suported filter operators
- const EQUALS = "==";
- const EQUALS_NOT = "!=";
- const GREATER = ">";
- const LESS = ">";
- const GREATER_EQUAL = ">=";
- const LESS_EQUAL = "<=";
- const CONTAINS = "=@";
- const CONTAINS_NOT ="!@";
- const REGULAR ="=~";
- const REGULAR_NOT ="!~";
-
- /**
- * @var string
- */
- protected $_profileId;
- /**
- * @var array
- */
- protected $_dimensions = array();
- /**
- * @var array
- */
- protected $_metrics = array();
- /**
- * @var array
- */
- protected $_sort = array();
- /**
- * @var array
- */
- protected $_filters = array();
-
- /**
- * @param string $id
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function setProfileId($id)
- {
- $this->_profileId = $id;
- return $this;
- }
- /**
- * @return string
- */
- public function getProfileId()
- {
- return $this->_profileId;
- }
- /**
- * @param string $dimension
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function addDimension($dimension)
- {
- $this->_dimensions[$dimension] = true;
- return $this;
- }
- /**
- * @param string $metric
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function addMetric($metric)
- {
- $this->_metrics[$metric] = true;
- return $this;
- }
- /**
- * @return array
- */
- public function getDimensions()
- {
- return $this->_dimensions;
- }
- /**
- * @return array
- */
- public function getMetrics()
- {
- return $this->_metrics;
- }
- /**
- * @param string $dimension
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function removeDimension($dimension)
- {
- unset($this->_dimensions[$dimension]);
- return $this;
- }
- /**
- * @param string $metric
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function removeMetric($metric)
- {
- unset($this->_metrics[$metric]);
- return $this;
- }
- /**
- * @param string $value
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function setStartDate($date)
- {
- $this->setParam("start-date", $date);
- return $this;
- }
- /**
- * @param string $value
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function setEndDate($date)
- {
- $this->setParam("end-date", $date);
- return $this;
- }
-
- /**
- * @param string $filter
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function addFilter($filter)
- {
- $this->_filters[] = array($filter, true);
- return $this;
- }
-
- /**
- * @param string $filter
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function addOrFilter($filter)
- {
- $this->_filters[] = array($filter, false);
- return $this;
- }
-
- /**
- * @param string $sort
- * @param boolean[optional] $descending
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function addSort($sort, $descending=false)
- {
- // add to sort storage
- $this->_sort[] = ($descending?'-':'').$sort;
- return $this;
- }
-
- /**
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function clearSort()
- {
- $this->_sort = array();
- return $this;
- }
-
- /**
- * @param string $segment
- * @return Zend_Gdata_Analytics_DataQuery
- */
- public function setSegment($segment)
- {
- $this->setParam('segment', $segment);
- return $this;
- }
- /**
- * @return string url
- */
- public function getQueryUrl()
- {
- $uri = $this->_defaultFeedUri;
- if (isset($this->_url)) {
- $uri = $this->_url;
- }
-
- $dimensions = $this->getDimensions();
- if (!empty($dimensions)) {
- $this->setParam('dimensions', implode(",", array_keys($dimensions)));
- }
-
- $metrics = $this->getMetrics();
- if (!empty($metrics)) {
- $this->setParam('metrics', implode(",", array_keys($metrics)));
- }
-
- // profile id (ga:tableId)
- if ($this->getProfileId() != null) {
- $this->setParam('ids', 'ga:'.ltrim($this->getProfileId(), "ga:"));
- }
-
- // sorting
- if ($this->_sort) {
- $this->setParam('sort', implode(",", $this->_sort));
- }
-
- // filtering
- $filters = "";
- foreach ($this->_filters as $filter) {
- $filters.=($filter[1]===true?';':',').$filter[0];
- }
-
- if ($filters!="") {
- $this->setParam('filters', ltrim($filters, ",;"));
- }
-
- $uri .= $this->getQueryString();
- return $uri;
- }
- }
|