diff options
Diffstat (limited to 'zend/library/Zend/Gdata/Analytics/DataQuery.php')
| -rw-r--r-- | zend/library/Zend/Gdata/Analytics/DataQuery.php | 403 |
1 files changed, 403 insertions, 0 deletions
diff --git a/zend/library/Zend/Gdata/Analytics/DataQuery.php b/zend/library/Zend/Gdata/Analytics/DataQuery.php new file mode 100644 index 0000000..51c9e5c --- /dev/null +++ b/zend/library/Zend/Gdata/Analytics/DataQuery.php @@ -0,0 +1,403 @@ +<?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-2012 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; + } +} |
