Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpif(isset($_GET['source'])) {highlight_file(__FILE__);die;}/*** This script is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General public License for more details.** This copyright notice MUST APPEAR in all copies of the script!** @author CERDAN Yohann <cerdanyohann@yahoo.fr>* @copyright (c) 2009 CERDAN Yohann, All rights reserved* @ version 12:38 04/08/2009*/class GoogleAnalyticsAPI{/** Google account login (email) **/private $login;/** Google account password **/private $password;/** Google analytics website ID (avalaible on your google analytics account url) **/private $ids;/** The login token to the google analytics service **/private $loginToken;/** The XML response send by the service **/private $response;/** Begin date of the displaying datas **/private $date_begin;/** End date of the displaying datas **/private $date_end;/** Sort the results **/private $sort;/** The param to sort (metrics or dimensions) **/private $sort_param;/*** Class constructor** @param string $login the login (email)* @param string $password the password* @param string $ids the IDs of the website (find it in the google analytics gui)* @param string $date_begin the begin date* @param string $date_end the end date** @return void*/public function __construct($login,$password,$ids,$date_begin,$date_end = null){$this->login = $login;$this->password = $password;$this->ids = $ids;$this->date_begin = $date_begin;if (!$date_end) {$this->date_end = $date_begin;} else {$this->date_end = $date_end;}$this->sort = "-";$this->sort_param = "metrics";// Authentication$this->login();}/*** Set the result's sort by metrics** @param boolean $sort asc or desc sort** @return void*/public function setSortByMetrics ($sort){if ($sort==true) {$this->sort = "";} else {$this->sort = "-";}$this->sort_param = 'metrics';}/*** Set the result's sort by dimensions** @param boolean $sort asc or desc sort** @return void*/public function setSortByDimensions ($sort){if ($sort==true) {$this->sort = "";} else {$this->sort = "-";}$this->sort_param = 'dimensions';}/*** Set the IDs of the website** @param string $ids the IDs of the website (find it in the google analytics gui)** @return void*/public function setIds($ids){$this->ids = $ids;}/*** Set the date of the export** @param string $date_begin the begin date* @param string $date_end the end date** @return void*/public function setDate ($date_begin,$date_end = null){$this->date_begin = $date_begin;if (!$date_end) {$this->date_end = $date_begin;} else {$this->date_end = $date_end;}}/*** Login to the google server* See : http://google-data-api.blogspot.com/2008/05/clientlogin-with-php-curl.html** @return void*/private function login(){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin");curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);$data = array('accountType' => 'GOOGLE','Email' => $this->login,'Passwd' => $this->password,'source'=>'php_curl_analytics','service'=>'analytics');curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);$hasil = curl_exec($ch);curl_close($ch);// Get the login token// SID=DQA...oUE// LSID=DQA...bbo// Auth=DQA...Sxqif (preg_match('/Auth=(.*)$/',$hasil,$matches)>0) {$this->loginToken = $matches[1];} else {trigger_error('Authentication problem',E_USER_WARNING);return null;}}/*** Get URL content using cURL.** @param string $url the url** @return string the html code*/function getContent ($url){if (!extension_loaded('curl')) {throw new Exception('curl extension is not available');}$ch = curl_init($url);$header[] = 'Authorization: GoogleLogin auth=' . $this->loginToken;curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($ch, CURLOPT_HTTPHEADER, $header);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HEADER, false);$this->response = curl_exec($ch);$infos = curl_getinfo($ch);curl_close($ch);return $infos['http_code'];}/*** Get the google analytics datas by dimensions and metrics* See : http://code.google.com/intl/fr/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html** @param string $metrics the metrics* @param string $dimensions the dimensions** @return array*/public function getDimensionByMetric($metrics, $dimensions){$url = "https://www.google.com/analytics/feeds/data?ids=ga:" . $this->ids . "&metrics=ga:" . $metrics . "&dimensions=ga:" . $dimensions . "&start-date=" . $this->date_begin . "&end-date=" . $this->date_end ."&sort=" . $this->sort . "ga:";if ($this->sort_param=='metrics') { // sort by metrics$url .= $metrics;}if ($this->sort_param=='dimensions') { // sort by dimensions$url .= $dimensions;}if($this->getContent($url) == 200) {$XML_object = simplexml_load_string($this->response);$labels_array = array();$datas_array = array();foreach($XML_object->entry as $m) {$dxp = $m->children('http://schemas.google.com/analytics/2009');$metric_att = $dxp->metric->attributes();$dimension_att = $dxp->dimension->attributes();$labels_array []= $dimension_att['value'] . ' (' . $metric_att['value'] . ')';$datas_array []= (string)$metric_att['value'];}return array('labels' => $labels_array, 'datas' => $datas_array);} else {return null;}}/*** Get the google analytics datas by metrics* See : http://code.google.com/intl/fr/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html** @param string $metrics the metrics* @param string $uri the url of the website page (ex : /myurl/)** @return array*/public function getMetric($metric,$uri=null){$url = "https://www.google.com/analytics/feeds/data?ids=ga:" . $this->ids . "&metrics=ga:" . $metric . "&start-date=" . $this->date_begin . "&end-date=" . $this->date_end;if ($uri) {$url .= "&dimensions=ga:pagePath&filters=ga:pagePath%3D%3D" . $uri;}if($this->getContent($url) == 200) {$XML_object = simplexml_load_string($this->response);$dxp = $XML_object->entry->children('http://schemas.google.com/analytics/2009');if (@count($dxp)>0) {$metric_att = $dxp->metric->attributes();}return $metric_att['value'] ? (string)$metric_att['value'] : 0;} else {return null;}}}?>