Top of page
Merhaba, misafir
dmoz.org - Açık Dizin Projesi

Serviste performans/kararlılık için FreeBSD Süratli istemci platformu Ubuntu *nix dökümantasyon projesi Syslogs
  1. Lighttpd web sunucusu kullanmakta mısınız ?

      Güncelleme: 26-08-2010 21:32
Aktif Dizin Çoğaltma (Replikasyon) İşlemi - 1
Yazar: M. Bora Teoman
devamı
ipsure.com ana sayfasına link ipsure.com ana sayfasına link Hizmetler sayfasına link Uygulamalar bloguna link Yaşam ve İş bloguna link İletişim sayfasına link Link to English version of ipsure.com Uygulamalar sayfasının sağ üst menü başlık resmi Hakkımızda sayfasına link Referanslar sayfasına link Kullanım Koşulları sayfasına link RSS beslemesine link
7

05/02/2010

Google Analytics API ve Google Chart API Entegrasyonu İle Dinamik İstatistik Çizelgeleri Oluşturma

Bir süre önce Google iki API servisini hizmete açtı. Bunlardan ilki olan Google Analytics API, geliştiricilerin yazdıkları client uygulamaları içerisinden mevcut Google Analytics profillerine read-only erişerek alacakları GA profil bilgilerini, rapor ve istatistik verilerini web ve mobil uygulamaları ile entegre edebilmelerine imkan tanırken, Google Chart API ise client tarafında özel olarak şekillendireceğiniz URL’ler vasıtasıyla çeşitli uygulamalarınız için PNG formatında, dinamik ve farklı türlerde (Bar, Line, Radar, Scatter plot, Venn diagram, Pie, Google-o-meter, Maps) grafik çizelgeler oluşturmanızı sağlamakta.

Gerek grafik analize meraklı oluşum, gerekse bu iki API’nin bir araya getirildiğinde uygulamalarda tamamen dinamik ve zengin bir içerik vadedeceğini düşündüğüm için her iki API ile ilgili olarak daha derinlemesine araştırma yapmaya karar verdim. Google Analytics Team tarafından desteklenen mevcut Java ve HTTP kaynak kodları ve kütüphaneler ile kullanıcılar tarafından desteklenmiş (ve ya desteklenmekte olan) Phyton, PHP ve Ruby tabanlı kütüphaneler arasından elbette kendi web uygulamama uygun olması açısından araştırmamın temelini bu API’lere yönelik PHP class’lar oluşturmaktaydı. Ayrı ayrı her ikisi için de birkaç kişinin gayet kullanışlı class’lar yazdığını ancak ikisinin birlikte entegrasyonu ile ilgili ümit ettiğim miktarda çalışma olmadığını görünce sözünü ettiğim entegrasyonu kendim yapmaya karar verdim. Ve sonucunda anasayfada ve aşağıda gördüğünüz şekilde dinamik grafik analiz çıktısı üretebilen bir entegrasyon sağlayabildim.

&chtt=Son+30+Günün+Visits/Page+Views+İstatistikleri

Denediklerim arasında kodlama titizliğini ve array çıktılarını beğenerek uygulamamda kullandığım iki örnek class içerisinden Google Analytics API PHP class çalışmasından dolayı Eldee’ye ve Google Chart API class çalışmasından dolayı Andrey Savchenko (Rarst)’a teşekkür ediyorum.

x ve y eksenlerine ilişkin ölçeklendirme, etiketleme, im pozisyonlama ve veri besleme gibi tüm detaylarının tamamen dinamik gerçekleştirilmesi sayesinde, çeşitli uygulamarımızda GA grafiksel analizlerinin el ile oluşturulması ve herhangi bir manipülasyona gerek kalmaksızın yürütülmesine olanak verecek bu çalışma, bize genel anlamda başka ne gibi avantajlar sağlamakta ?

  • Uygulamalarımıza ilişkin analizleri takip etmek için sürekli olarak GA web arayüzünde oturum açmak durumunda kalmıyoruz.
  • Çizelgeleri oluşturmak için gerekli veri akışını otomatikleştiriyor ve gerçek zamanlı veri beslemesi elde edebiliyoruz.
  • Verileri yerel sistemimizde saklamaya, yedeklemeye ve bakım operasyonlarına gerek duymuyoruz.
  • Bant genişliği kullanımı ve ilişkili servis yükünü Google sunucularına devrediyoruz.
  • Çizelgeleri, istediğimiz işlevsel ve görsel kriterler çerçevesinde hazırlatarak herhangi bir forma bağımlı kalmıyoruz.
  • Wordpress gibi blog uygulamalarımız içerisinde analiz verilerini yerel olarak saklayan eklentilere gerek kalmaksızın zengin istatistiksel sunumlar sağlayabiliyoruz.
  • Tek bir noktadan birden fazla web uygulaması ve ya blog analizi gerçekleştirebiliyor, sort  ve filters gibi ga: sorgulama parametreleri yardımıyla coğrafi ve demografik istatistikleri çizelgeler üzerinde online gerçek zamanlı yayımlayabilir hale geliyoruz.

Aşağıdaki kodu, ihtiyaçlarınız doğrultusunda düzenleyerek farklı şekil ve formlarda dinamik çizelgeler oluşturmak için kullanabilirsiniz ancak kodun çalışması için include etmeniz gereken class’ları yukarıda linklerini verdiğim ilgili sitelerden indirmeyi unutmayın.  Kodu kullanır ve memnun kalırsanız tarafıma link vermeniz beni memnun edecektir.

<?php
// PHP Integration of "Google Analytics API" with "Google Chart API" for creating realtime dynamic statistics chart.
//
// Sezgin Bayrak, ipsure.com (2010)

require 'google_chart.php'; // By Andrey Savchenko (Rarst), http://www.rarst.net/script/google-chart/
include "googleanalytics.class.php"; // By Eldee, http://www.askaboutphp.com/63/google-analytics-api-class-for-php.html

// Set first date you want your GA stats begin to be collected
$lastMonth = date("Y-m-d", $_SERVER['REQUEST_TIME'] - 2592000);
$today = date("Y-m-d");

try {
 // Create an instance of the GoogleAnalytics class using your own Google {email} and {password}
 $ga = new GoogleAnalytics('your_account@gmail.com','your_password');

 // Set the Google Analytics profile you want to access - format is 'ga:123456';
 $ga->setProfile('ga:xxxxxxxx');

 // Setting date range with pre-defined variables
 $ga->setDateRange($lastMonth,$today);

 // Generating report arrays for the date range, consisting of pageviews and visits
 $report = $ga->getReport(
 array('dimensions'=>urlencode('ga:date'),
 'metrics'=>urlencode('ga:pageviews,ga:visits,ga:newVisits'),
 )
 );
// Arrange "page views" as a new array
$pviews = array();
foreach($report as $dimension => $metrics) {
array_push($pviews, $metrics['ga:pageviews']);
}
// Arrange "visists" as a new array
$visits = array();
foreach($report as $dimension => $metrics) {
array_push($visits, $metrics['ga:visits']);
}
// Extract various dates from the report array keys in order to use them as variables for x-axis labels
$days = array_keys($report);
list($d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $d8, $d9, $d10, $d11, $d12, $d13,
$d14, $d15, $d16, $d17, $d18, $d19, $d20, $d21) = $days;

} catch (Exception $e) {
 print 'Error: ' . $e->getMessage();
}

// Get the keys for max. values of page views and visits
function max_key($array) {
 foreach ($array as $key => $val) {
 if ($val == max($array)) return $key;
 }
}
$array = $pviews;
$precord = max_key($array);
$array = $visits;
$vrecord = max_key($array);

// Always use max. value recorded in array for y-axis
$ymax = 1*(max($pviews));
// Devide it by six and round up to nearest whole number to set appropriate y-axis ticks
$ytick = ceil((max($pviews))/6);

// Chart settings
$traffic = new GoogleChart;
$traffic->type='lc';
$traffic->SetImageSize(600,200);
$traffic->SetChartMargins(0,30,0,0);
$traffic->SetEncode('simple');
$traffic->AddData($visits);
$traffic->AddData($pviews);
$traffic->AddChartColor('FF9900');
$traffic->AddChartColor('0077CC');
$traffic->AddLineStyle(3);
$traffic->AddLineStyle(2,5,5);
$traffic->AddDataLineStyle('0077CC',1,'0:30',3);
$traffic->AddFillArea('B','FF99007F',0);
$traffic->AddFillArea('b','E6F2FA7F',0,1);
$traffic->AddShapeMarker('o','666666',0,30,8);
$traffic->AddShapeMarker('o','FF9900',0,30,6);
$traffic->AddShapeMarker('o','555555',1,30,8);
$traffic->AddShapeMarker('o','0077CC',1,30,6);
$traffic->AddShapeMarker('o','666666',0,$vrecord,6);
$traffic->AddShapeMarker('o','900C0C',0,$vrecord,4);
$traffic->AddShapeMarker('o','666666',1,$precord,6);
$traffic->AddShapeMarker('o','900C0C',1,$precord,4);
$traffic->AddAxis('y,x');
$traffic->AddAxisRange(0,$ymax,$ytick);
$traffic->AddAxisLabel(array($d0,$d7,$d14,$d21,'Now'),1);
$traffic->SetGrid(round(100/4,2),0,1,3);
$traffic->AddAxisStyle('0000DD',1,0);
$traffic->AddAxisTickLength(-600,0);
$traffic->SetTitle('Visits/Page Views of Last 30 Days');
$traffic->AddLegend('visits');
$traffic->AddLegend('page views');
$traffic->SetLegendPosition('b');
$traffic->AddDataPointLabel('f',($visits[30]),'000000',0,30,12);
$traffic->AddDataPointLabel('f',($pviews[30]),'000000',1,30,12);
$traffic->AddDataPointLabel('t',(max($visits)).' max','900C0C',0,$vrecord,12);
$traffic->AddDataPointLabel('t',(max($pviews)).' max','900C0C',1,$precord,12);
// Generate chart URL
echo $traffic->GetImg();
?>

Bu ilk örneğimin ardından iki API’nin PHP ile farklı şekillerde kullanımı üzerine araştırma ve  çalışmalarımı sürdürmeyi düşünüyorum. Konu ile ilgili yeni bir  kod üzerinde çalıştığımda sizlerle burada paylaşacağım. Sizlerinde konuya ilişkin farklı fikir ve çalışmalarınız olduğunda bildirirseniz, burada paylaşabiliriz.

Related Posts with Thumbnails

İlgili Makaleler

  İlgili makale bulunamadı.

7 Yorum »

Geri İzlemeler

Henüz bir geri izleme linki bulunmamakta.

Okuyucu Yorumları

Hakan19/03/2010 00:35

Merhaba, eline sağlık ama ben bu kodu çalıştıramadım. Eklentileri indirip dizine attım ve ga:12345 yerine kendi ID’mi girdim; sonuç boş sayfa. Biraz daha detaylı bilgi aktarabilir misiniz ?

Sezgin Bayrak19/03/2010 02:10

Merhaba, google_chart.php ve googleanalytics.class.php API’lerini kod ile aynı dizine attıysanız ve $ga->setProfile(‘ga:xxxxxxxx’); satırında aktif Google Analytics hesabınızın ana sayfasında yer alan Account ismine tıkladığınızda karşılaştığımız UA- ile başlayan ID’yi değil de bu hesaba bağlı Profile Settings altında yer alan Profile ID ‘yi girdiğinizden eminseniz (bazen bu ikisinin karıştırıldığına rastlıyoruz…) geriye sanırım bir üst satırda Google email hesap ve şifrenizi hatalı girmiş olabileceğiniz ihtimali kalıyor.
Ayrıca API dosyalarının owner/group ve izinlerinin web sunucusu tarafından okunabilecek şekilde olduğundan ve kodu çalıştırdığınız sunucunun tarih formatlarında problem çıkartmadığından emin olmanızı da tavsiye edebilirim.
Web servisine ilişkin log dosyasında herhangi bir hata mesajı ile karşılaştınız mı ?

Hakan02/04/2010 07:03

Sezgin Hocam, Google Analytics kullanımı hakkında detaylı bilgi sahibiyim. Ben sizin örneğinizi test etmek için uyguladım ama yukarıda yazdıklarınızı aynen yapmama rağmen boş sayfa döndü karşıma. Geçi ben bunu win hostingte denedim, linux üzerinde denemek kısmet olmadı. En kısa sürede linux üzerinde de deneyeceğim ayrıca asp formatında nasıl kullanabilirim ?

Sezgin Bayrak03/04/2010 13:13

Herhangi bir php parsing hatası boş sayfa ile sonuçlanır ki çoğunlukla require ve ya include ile çağırdığımız class dosyalarının bulunmaları gereken dizinde olmayışları buna sebep olur. Kod içerisinden çağırdığımız google_chart.php ve googleanalytics.class.php dosyalarının kodu insert ettiğiniz sayfa ile aynı dizinde olduğuna ve bu dosyaların isim ya da uzantılarında hata olmadığına emin olunuz. Bu dosyalar başka bir dizindelerse kod içerisindeki require ve include satırlarını değiştirerek dosyaların bulunduğu dizini gösteriniz.

Sorununuzun kaynağının Windows tabanlı hosting ve IIS tabanlı olup olmadığını merak ettiğim için elimde hazır PHP entegrasyonu yapılmış bir Windows sunucu olmamasına rağmen bir tanesinde PHP kurulumunu gerçekleştirdim ve kodu orada denedim. Aşağıdaki kurulum ve basit yapılandırmanın ardından test için oluşturduğum söz konusu IIS sistemde chart sorunsuz görüntülendi.

Eminim ki siz Windows hosting üzerinde hali hazırda PHP run etmekte olduğunuza göre ilgili yapılandırmanız zaten mevcuttur. Ancak ben hazır konu açılmışken bu vesileyle yeni başlayan veya IIS üzerinde PHP çalıştırma konusunu merak edenlere ek bilgi aktarmak adına yaptıklarımı çok kısa bir şekilde aşağıya özetleyeceğim:

IIS 6.0 için, Windows 2003 Server SP2 üzerinde phptest isminde bir klasör yaratarak içerisine yukarıdaki makalemde linklerini vermiş olduğum
googleanalytics.class.php
google_chart.php
iki API class dosyasını upload ettikten sonra yukarıda yer alan kodu da bu klasöre chart.php olarak kaydettim ve kod içerisinde ilgili yerlere Google hesap detaylarını yerleştirdim.

Microsoft 2008 C++ Runtime (x86) adresinden Microsoft Visual C++ 2008 Redistributable Package (x86) (vcredist_x86.exe) download ederek kurdum.

http://www.iis.net/expand/FastCGI adresinde bulunan FastCGI 1.5 for IIS 6 and 5.1 için x86 versiyonunu http://go.microsoft.com/?linkid=9707432 adresinden indirerek kurdum.

http://windows.php.net/download/ adresinden PHP For Windows (PHP 5.3.2) için VC9 x86 Non Thread Safe kurulum paketini indirerek kurulumu başlattım, Web Server Setup bölümünde IIS FastCGI işaretleyerek kurulumu tamamladım.

IIS üzerinde phptest isminde yeni bir website yaratarak Home Directory tab menüsünde phptest klasörümüzü ana dizin olarak gösterdikten sonra “Configuration” butonundan yararlanarak Add/Edit Application Extension Mapping penceresinde “Add” butonunu kullanarak Browse ile WINDOWS\system32\inetsrv\ altında yer alan fcgiext.dll ISAPI dll dosyasını Executable olarak ekledim ve Extension olarak .php uzantısını belirttikten sonra bir alt alanda GET,HEAD,POST verblerini limitledim, “Script Engine” ve “Verify that file exists” opsiyonları seçili şekilde kaydettim. Execute permissions ayarını “Scripts only” olarak ayarlayarak yeni website tanımını IIS Manager’da stop/start ettikten ve phptest.com test domaini ile ilgili gerekli tanımı C:\WINDOWS\system32\drivers\etc\hosts dosyasına (veya DNS sunucusuna) girdikten sonra IIS’imiz php scriptlerini çalıştırmaya hazır hale gelecektir. En azından temel anlamda…

IIS FastCGI konusunda daha detaylı bilgi için: http://learn.iis.net/page.aspx/248/configure-the-fastcgi-extension-for-iis-60/

64bit OS, IIS7 FastCGI ve ya apache binary leri ile entegrasyon gibi farklı uygulamalara ilişkin dökümantasyona yine yukarıda verdiğim linklerden ulaşılabilir.

Chart API çalışmasını ASP ile bizzat denemedim ancak internette çeşitli örneklerin bulunduğuna inanıyorum.

Hakan07/04/2010 08:03

Elinize emeğinize aklınıza sağlık vallahi üşenmemiş konuyu detaylarına girerek anlatmışsınız. Sizi yürekten tebrik eder, başarılarınızın devamını dilerim.
Ben şimdi yukarda anlattıklarınızı tekrar uygulayıp sonucu buraya yazacağım, umarım sorunsuz çalışır. Saygılarımla.

sinan28/08/2010 20:12

Merhaba, ben hata alıyorum.
Parse error: syntax error, unexpected ‘{‘ in …
Bu iki dosya ve kodunuzu aldım, ftp ye attım ancak yukarıdaki hatayı verdi. Wordpress’de değil, direk kullanmak istiyorum.

Sezgin Bayrak29/08/2010 17:58

Merhaba,
Sayfada görmekte olduğunuz grafik, yine bu sayfada yayımlanmakta olan ve sizin de edinmiş olduğunuz kodu kullanarak PHP5 sistemde sorunsuz elde edilmektedir.
Siz sisteminizde PHP4 kullanıyor olabilir misiniz? Daha zayıf olmakla birlikte bir diğer ihtimal ise kodu sisteminize taşırken yanlışlıkla bir karakter silmiş olmanız olabilir.
Söz konusu çalışma ve ilişkili kod, Wordpress bağımlı değildir.

RSS feed for comments RSS feed for comments on this post. Geri İzleme URL'si.

Yorum yapın