Laravel Yardımcı Sınıf Ekleme ve Google Analytics Verilerini Sitenize Ekleme
18 Haziran 2015 Yorum 0 1150 Görüntüleme

Laravel Yardımcı Sınıf Ekleme ve Google Analytics Verilerini Sitenize Ekleme

Laravel ile yapılmış projelerinizde kullanabilmeniz açısından sizlere yardımcı sınıf eklemeyi videolu olarak detaylı bir şekilde anlattım.Ek olarak dahil ettiğimiz sınıf Google Analytics sınıfı olup projenizdeki görüntüleme kısmıda ayarlanmıştır.Çok basit iki üç kod eklemesi ile projelerinizde rahatlıkla kullanabilirsiniz.

Projenize dahil edeceğiniz kodların indirme linklerinide vereceğim.

Analytics sınıfı

 

<?php namespace App;

/**
 * Google Analytics PHP API
 *
 * This class can be used to retrieve data from the Google Analytics API with PHP
 * It fetches data as array for use in applications or scripts
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Credits: http://www.alexc.me/
 * parsing the profile XML to a PHP array
 *
 *
 * @link http://www.swis.nl/ga
 * @copyright 2009 SWIS BV
 * @author Vincent Kleijnendorst - SWIS BV (vkleijnendorst [AT] swis [DOT] nl)
 *
 * @version 0.1
 */

  class analytics{

    private $_sUser;
    private $_sPass;
    private $_sAuth;
    private $_sProfileId;

    private $_sStartDate;
    private $_sEndDate;

    private $_bUseCache;
    private $_iCacheAge;

    /**
    * public constructor
    *
    * @param string $sUser
    * @param string $sPass
    * @return analytics
    */
    public function __construct($sUser, $sPass){
        $this->_sUser = $sUser;
        $this->_sPass = $sPass;

        $this->_bUseCache = false;

        $this->auth();
    }

    /**
    * Google Authentification, returns session when set
    */
    private function auth(){

        if (isset($_SESSION['auth'])){
            $this->_sAuth = $_SESSION['auth'];
            return;
        }

        $aPost = array ( 'accountType'   => 'GOOGLE',
                         'Email'         => $this->_sUser,
                         'Passwd'        => $this->_sPass,
                         'service'       => 'analytics',
                         'source'        => 'SWIS-Webbeheer-4.0');

        $sResponse = $this->getUrl('https://www.google.com/accounts/ClientLogin', $aPost);

        $_SESSION['auth'] = '';
        if (strpos($sResponse, "\n") !== false){
            $aResponse = explode("\n", $sResponse);
            foreach ($aResponse as $sResponse){
                if (substr($sResponse, 0, 4) == 'Auth'){
                    $_SESSION['auth'] = trim(substr($sResponse, 5));
                }
            }
        }
        if ($_SESSION['auth'] == ''){
            unset($_SESSION['auth']);
            throw new \Exception('Retrieving Auth hash failed!');
        }
        $this->_sAuth = $_SESSION['auth'];
    }

    /**
    * Use caching (bool)
    * Whether or not to store GA data in a session for a given period
    *
    * @param bool $bCaching (true/false)
    * @param int $iCacheAge seconds (default: 10 minutes)
    */
    public function useCache($bCaching = true, $iCacheAge = 600){
        $this->_bUseCache = $bCaching;
        $this->_iCacheAge = $iCacheAge;
        if ($bCaching && !isset($_SESSION['cache'])){
            $_SESSION['cache'] = array();
        }
    }

    /**
    * Get GA XML with auth key
    *
    * @param string $sUrl
    * @return string XML
    */
    private function getXml($sUrl){

        return $this->getUrl($sUrl, array(), array('Authorization: GoogleLogin auth=' . $this->_sAuth));
    }

    /**
    * Sets GA Profile ID  (Example: ga:12345)
    */
    public function setProfileById($sProfileId){

            $this->_sProfileId = $sProfileId;
    }

    /**
    * Sets Profile ID by a given accountname
    *
    */
    public function setProfileByName($sAccountName){

        if (isset($_SESSION['profile'])){
            $this->_sProfileId = $_SESSION['profile'];
            return;
        }

        $this->_sProfileId = '';
        $sXml = $this->getXml('https://www.google.com/analytics/feeds/accounts/default');
        $aAccounts = $this->parseAccountList($sXml);

        foreach($aAccounts as $aAccount){
            if (isset($aAccount['accountName']) && $aAccount['accountName'] == $sAccountName){
                if (isset($aAccount['tableId'])){
                    $this->_sProfileId =  $aAccount['tableId'];
                }
            }
        }
        if ($this->_sProfileId == ''){
            throw new \Exception('No profile ID found!');
        }

        $_SESSION['profile'] = $this->_sProfileId;
    }

    /**
    * Returns an array with profileID => accountName
    *
    */
    public function getProfileList(){

        $sXml = $this->getXml('https://www.google.com/analytics/feeds/accounts/default');
        $aAccounts = $this->parseAccountList($sXml);
        $aReturn = array();
        foreach($aAccounts as $aAccount){
            $aReturn[$aAccount['tableId']] =  $aAccount['title'];
        }
        return $aReturn;
    }

    /**
    * get resulsts from cache if set and not older then cacheAge
    *
    * @param string $sKey
    * @return mixed cached data
    */
    private function getCache($sKey){

        if ($this->_bUseCache === false){
            return false;
        }

        if (!isset($_SESSION['cache'][$this->_sProfileId])){
            $_SESSION['cache'][$this->_sProfileId] = array();
        }
        if (isset($_SESSION['cache'][$this->_sProfileId][$sKey])){
            if (time() - $_SESSION['cache'][$this->_sProfileId][$sKey]['time'] < $this->_iCacheAge){
                return $_SESSION['cache'][$this->_sProfileId][$sKey]['data'];
            }
        }
        return false;
    }

    /**
    * Cache data in session
    *
    * @param string $sKey
    * @param mixed $mData Te cachen data
    */
    private function setCache($sKey, $mData){

        if ($this->_bUseCache === false){
            return false;
        }

        if (!isset($_SESSION['cache'][$this->_sProfileId])){
            $_SESSION['cache'][$this->_sProfileId] = array();
        }
        $_SESSION['cache'][$this->_sProfileId][$sKey] = array(  'time'  => time(),
                                                                'data'  => $mData);
    }

    /**
    * Parses GA XML to an array (dimension => metric)
    * Check http://code.google.com/intl/nl/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html
    * for usage of dimensions and metrics
    *
    * @param array  $aProperties  (GA properties: metrics & dimensions)
    *
    * @return array result
    */
    public function getData($aProperties = array()){
        $aParams = array();
        foreach($aProperties as $sKey => $sProperty){
            $aParams[] = $sKey . '=' . $sProperty;
        }

        $sUrl = 'https://www.google.com/analytics/feeds/data?ids=' . $this->_sProfileId .
                                                        '&start-date=' . $this->_sStartDate .
                                                        '&end-date=' . $this->_sEndDate . '&' .
                                                        implode('&', $aParams);
        $aCache = $this->getCache($sUrl);
        if ($aCache !== false){
            return $aCache;
        }

        $sXml = $this->getXml($sUrl);

        $aResult = array();

        $oDoc = new \DOMDocument();
        $oDoc->loadXML($sXml);
        $oEntries = $oDoc->getElementsByTagName('entry');
        foreach($oEntries as $oEntry){
            $oTitle = $oEntry->getElementsByTagName('title');
            $sTitle = $oTitle->item(0)->nodeValue;

            $oMetric = $oEntry->getElementsByTagName('metric'); 

            // Fix the array key when multiple dimensions are given
            if (strpos($sTitle, ' | ') !== false && strpos($aProperties['dimensions'], ',') !== false){

                $aDimensions = explode(',', $aProperties['dimensions']);
                $aDimensions[] = '|';
                $aDimensions[] = '=';
                $sTitle = preg_replace('/\s\s+/', ' ', trim(str_replace($aDimensions, '', $sTitle)));  

            }
            $sTitle = str_replace($aProperties['dimensions'] . '=', '', $sTitle);

            $aResult[$sTitle] = $oMetric->item(0)->getAttribute('value');
        }
        // cache the results (if caching is true)
        $this->setCache($sUrl, $aResult);

        return $aResult;
    }

    /**
    * Parse XML from account list
    *
    * @param string $sXml
    */
    private function parseAccountList($sXml){

        $oDoc = new DOMDocument();
        $oDoc->loadXML($sXml);
        $oEntries = $oDoc->getElementsByTagName('entry');
        $i = 0;
        $aProfiles = array();
        foreach($oEntries as $oEntry){

            $aProfiles[$i] = array();

            $oTitle = $oEntry->getElementsByTagName('title');
            $aProfiles[$i]["title"] = $oTitle->item(0)->nodeValue;

            $oEntryId = $oEntry->getElementsByTagName('id');
            $aProfiles[$i]["entryid"] = $oEntryId->item(0)->nodeValue;

            $oProperties = $oEntry->getElementsByTagName('property');
            foreach($oProperties as $oProperty){
                if (strcmp($oProperty->getAttribute('name'), 'ga:accountId') == 0){
                    $aProfiles[$i]["accountId"] = $oProperty->getAttribute('value');
                }
                if (strcmp($oProperty->getAttribute('name'), 'ga:accountName') == 0){
                    $aProfiles[$i]["accountName"] = $oProperty->getAttribute('value');
                }
                if (strcmp($oProperty->getAttribute('name'), 'ga:profileId') == 0){
                    $aProfiles[$i]["profileId"] = $oProperty->getAttribute('value');
                }
                if (strcmp($oProperty->getAttribute('name'), 'ga:webPropertyId') == 0){
                    $aProfiles[$i]["webPropertyId"] = $oProperty->getAttribute('value');
                }
            }

            $oTableId = $oEntry->getElementsByTagName('tableId');
            $aProfiles[$i]["tableId"] = $oTableId->item(0)->nodeValue;

            $i++;
        }
        return $aProfiles;
    }

    /**
    * Get data from given URL
    * Uses Curl if installed, falls back to file_get_contents if not
    *
    * @param string $sUrl
    * @param array $aPost
    * @param array $aHeader
    * @return string Response
    */
    private function getUrl($sUrl, $aPost = array(), $aHeader = array()){

        if (count($aPost) > 0){
            // build POST query
            $sMethod = 'POST';
            $sPost = http_build_query($aPost);
            $aHeader[] = 'Content-type: application/x-www-form-urlencoded';
            $aHeader[] = 'Content-Length: ' . strlen($sPost);
            $sContent = $aPost;
        } else {
            $sMethod = 'GET';
            $sContent = null;
        }

        if (function_exists('curl_init')){

            // If Curl is installed, use it!
            $rRequest = curl_init();
            curl_setopt($rRequest, CURLOPT_URL, $sUrl);
            curl_setopt($rRequest, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($rRequest, CURLOPT_SSL_VERIFYPEER, 0);

            if ($sMethod == 'POST'){
                curl_setopt($rRequest, CURLOPT_POST, 1);
                curl_setopt($rRequest, CURLOPT_POSTFIELDS, $aPost);
                curl_setopt($rRequest, CURLOPT_SSL_VERIFYPEER, 0);
            } else {
                curl_setopt($rRequest, CURLOPT_HTTPHEADER, $aHeader);
                curl_setopt($rRequest, CURLOPT_SSL_VERIFYPEER, 0);
            }

            $sOutput = curl_exec($rRequest);
            if ($sOutput === false){
                throw new \Exception('Curl error (' . curl_error($rRequest) . ')');
            }

            $aInfo = curl_getinfo($rRequest);

            if ($aInfo['http_code'] != 200){
                // not a valid response from GA
                if ($aInfo['http_code'] == 400){
                    throw new \Exception('Bad request (' . $aInfo['http_code'] . ') url: ' . $sUrl);
                }
                if ($aInfo['http_code'] == 403){
                    throw new \Exception('Access denied (' . $aInfo['http_code'] . ') url: ' . $sUrl);
                }
                throw new \Exception('Not a valid response (' . $aInfo['http_code'] . ') url: ' . $sUrl);
            }

            curl_close($rRequest);

        } else {
            // Curl is not installed, use file_get_contents

            // create headers and post
            $aContext = array('http' => array ( 'method' => $sMethod,
                                                'header'=> implode("\r\n", $aHeader) . "\r\n",
                                                'content' => $sContent));
            $rContext = stream_context_create($aContext);

            $sOutput = @file_get_contents($sUrl, 0, $rContext);
            if (strpos($http_response_header[0], '200') === false){
                // not a valid response from GA
                throw new \Exception('Not a valid response (' . $http_response_header[0] . ') url: ' . $sUrl);
            }
        }
        return $sOutput;
    }   

    /**
    * Sets the date range for GA data
    *
    * @param string $sStartDate (YYY-MM-DD)
    * @param string $sEndDate   (YYY-MM-DD)
    */
    public function setDateRange($sStartDate, $sEndDate){

        $this->_sStartDate = $sStartDate;
        $this->_sEndDate   = $sEndDate;

    }

    /**
    * Sets de data range to a given month
    *
    * @param int $iMonth
    * @param int $iYear
    */
    public function setMonth($iMonth, $iYear){  

        $this->_sStartDate = date('Y-m-d', strtotime($iYear . '-' . $iMonth . '-01'));
        $this->_sEndDate   = date('Y-m-d', strtotime($iYear . '-' . $iMonth . '-' . date('t', strtotime($iYear . '-' . $iMonth . '-01'))));
    }

    /**
    * Get visitors for given period
    *
    */
    public function getVisitors(){

        return $this->getData(array( 'dimensions' => 'ga:day',
                                     'metrics'    => 'ga:visits',
                                     'sort'       => 'ga:day'));
    }

    /**
    * Get pageviews for given period
    *
    */
    public function getPageviews(){

        return $this->getData(array( 'dimensions' => 'ga:day',
                                     'metrics'    => 'ga:pageviews',
                                     'sort'       => 'ga:day'));
    }

    /**
    * Get visitors per hour for given period
    *
    */
    public function getVisitsPerHour(){

        return $this->getData(array( 'dimensions' => 'ga:hour',
                                     'metrics'    => 'ga:visits',
                                     'sort'       => 'ga:hour'));
    }

    /**
    * Get Browsers for given period
    *
    */
    public function getBrowsers(){

        $aData = $this->getData(array(  'dimensions' => 'ga:browser,ga:browserVersion',
                                        'metrics'    => 'ga:visits',
                                        'sort'       => 'ga:visits'));
        arsort($aData);
        return $aData;
    }

    /**
    * Get Operating System for given period
    *
    */
    public function getOperatingSystem(){

        $aData = $this->getData(array(   'dimensions' => 'ga:operatingSystem',
                                         'metrics'    => 'ga:visits',
                                         'sort'       => 'ga:visits'));
        // sort descending by number of visits
        arsort($aData);
        return $aData;
    }

    /**
    * Get screen resolution for given period
    *
    */
    public function getScreenResolution(){

        $aData = $this->getData(array(   'dimensions' => 'ga:screenResolution',
                                         'metrics'    => 'ga:visits',
                                         'sort'       => 'ga:visits'));

        // sort descending by number of visits
        arsort($aData);
        return $aData;
    }

    /**
    * Get referrers for given period
    *
    */
    public function getReferrers(){

        $aData = $this->getData(array(   'dimensions' => 'ga:source',
                                         'metrics'    => 'ga:visits',
                                         'sort'       => 'ga:source'));

        // sort descending by number of visits
        arsort($aData);
        return $aData;
    }

    /**
    * Get search words for given period
    *
    */
    public function getSearchWords(){
        $aData = $this->getData(array(   'dimensions' => 'ga:keyword',
                                         'metrics'    => 'ga:visits',
                                         'sort'       => 'ga:keyword'));
        // sort descending by number of visits
        arsort($aData);
        return $aData;
    }
}

Controller kodları

use App\analytics;

    try {

            $analytics = new analytics("k3ykubad@gmail.com", "şifreniz");
            $analytics->useCache();

            # Profil id'sini ayarlayalım
            $analytics->setProfileById('ga:70275722');

            # Tarih Aralığını Belirtelim
            $analytics->setMonth(date("m"), date("Y"));

            # Tekil ve Çoğul Hitleri Alalım
            $tekil = $analytics->getVisitors();
            $cogul = $analytics->getPageviews();

        } catch (Exception $hata){
            echo "Hata: ".$hata->getMessage();
        }
        return view('admin.anakisim',compact('tekil','cogul','analytics'));

Blade dosyanıza eklenecek kodlar;

 <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
        <script src="http://code.highcharts.com/highcharts.js"></script>
        <script src="http://code.highcharts.com/modules/exporting.js"></script>
        <div id="container"></div>
        <script type="text/javascript">
            $(function () {
                var chart;
                $(document).ready(function() {
                    chart = new Highcharts.Chart({
                        chart: {
                            renderTo: 'container',
                            type: 'area'
                        },
                        title: {
                            text: 'Tekil ve Çoğul Hit'
                        },
                        xAxis: {
                            tickInterval: 1
                        },
                        yAxis: {
                            title: {
                                text: 'Google Analytics Verileri'
                            },
                            labels: {
                                formatter: function() {
                                    return this.value / 1000 +'k';
                                }
                            }
                        },
                        tooltip: {
                            formatter: function() {
                                return this.series.name +': <b>'+
                                        Highcharts.numberFormat(this.y, 0) +'</b><br />{{ date("Y.d")}}.'+ this.x;
                            }
                        },
                        plotOptions: {
                            area: {
                                pointStart: 1,
                                marker: {
                                    enabled: false,
                                    symbol: 'circle',
                                    radius: 2,
                                    states: {
                                        hover: {
                                            enabled: true
                                        }
                                    }
                                }
                            }
                        },
                        series: [{
                            name: 'Tekil Hit',
                            data: [{{ implode(",", $tekil) }}]
                        }, {
                            name: 'Çoğul Hit',
                            data: [{{ implode(",", $cogul) }}]
                        }]
                    });
                });

            });
        </script>

İndirme linki : https://drive.google.com/file/d/0B4uEPI-PSWa5eFBOUXR0LWg2Q1k/view?usp=sharing

Önceki Linux Varnish Cache Php Hızlandırıcı Kurulumu Cpanel
Sonraki Postfix ile Gelen ve Giden Maillerin Kopyasını Aldırmak

Yazar hakkında

keykubad
keykubad 126 Gönderiler

2012 yılında yeni kimliği ve yeni bilgilerle sizlere teknoloji,web programlama,tasarim,güvenlik,internet ve programlar hakkında detaylı bilgiler vermek amaçlı kurulmuş kişisel web sayfamdır.

Yazara ait tüm yazılar

Diğer yazılarımız

Web Programlama 0 Yorum

PHP ile Güvenlik Kodu Uygulaması Yapmak

Arkadaşlar bu yazımda php ile basit bir güvenlik kodu uygulaması yapacağız. İlk önce guvenlik.php dosyası yapalım. şimdi satır satır açıklayalım…. function olustur () { bu satırda olustur(); fonksiyonumuzu tanımlıyoruz $sifre

Web Programlama 29 Yorum

Vizra Teması 2013 WHMCS Temasından Entegre

Merhaba arkadaşlar whmcs için kodlanmış güzel bir temayı entegre yaptım altta görüntüleri var bakabilirsiniz istediğiniz whmcs temayı entegre edebilirim.Özel mesaj yada maille ulaşıp istekte bulunabilirsiniz. Piyasada entegre yapanlar çok ama

PHP ve MYSQL 0 Yorum

Laravel 5 Authentication Giriş Çıkış İşlemleri

Merhaba öncelikle Laravel 5 sürümü yayınlandıktan sonra inceleme imkanı buldum ve şuan ufak bir proje yapmaktayım.Laravel 5 sürümünde session ve giriş çıkış işlemlerinde Taylor Otwel bayağı kolaylık getirmiş durumda.Aslında ilk

0 Yorum

Herhangi bir yorum yapılmamış!

İlk yazan olabilirsin bu yazıyı yorumlamak istermisin?

Cevap bırakın