ASP ile Google Analytics API verileri çekme

Son zamanlarda Google sağladığı API servisleriyle webmasterların başını döndürüyor. Bu API servislerinin bence en yararlılarından birisi Analytics servisi, Google API Help dökümanlarına baktığınızda birçok programlama kod örneği verilmiş fakat miladı çoktandır dolmuş olan ASP örnekleri hiçbir yerde yok.  Sizde benim gibi bir ASP aşığıysanız ve ASP kodlamaktan zevk alıyorsanız bu API servislerini kullanamadığınız için ciddi moral bozukluğu yaşıyorsunuz demektir. PHP de biliyorum fakat benim ASP kodlarken aldığım zevki başka programlama dillerinden alamıyorum 🙂

Neyse konumuza gelelim. Birkaç kod birleştirerek Google’un API kodlarını ASP kullanarak çekmeyi başardım ve bunu sizlerle paylaşmak istedim. Sistem WinHTTP bileşeniyle çalışıyor. Çektiğiniz verileri ne şekle sokmak istiyorsanız sokabilirsiniz (XML veya JavaScript). Aşağıdaki kodda test.url kısmını data feed query explorer kullanarak istediğiniz gibi düzenleyip farklı veriler çekebilirsiniz.

Ben bunu Google’un Analytics verilerini müşteriler direk panellerinde görmeleri için sadece toplam tekil hit, sayfa görüntüleme seçeneklerini kullandım.

kodun hazır halini buraya tıklayarak indirebilirsiniz.

[asp smarttabs=”false”]
<!–#include file="httpyardim.asp"–>
<%
Function padnum(num)
padnum = num
If len(num) = 1 Then
padnum = "0" & num
End If
End Function

Private Function Analytics(ByRef Cesit, ByRef BaslangicTarih, ByRef BitisTarih)
Set test = New HttpHelper
test.url = "https://www.google.com/accounts/ClientLogin"
test.addpostval "accountType","GOOGLE"
test.addpostval "Email","user@gmail.com"
test.addpostval "Passwd","pass"
test.addpostval "service","analytics" ‘/// Servis \\\\
test.addpostval "source","CCdotCom-spamtrap-1"
test.setformdata
test.send
myauth = Split(test.Responsetext,"Auth=")(1)
Set test = Nothing
Set test = New HttpHelper
test.url = "https://www.google.com/analytics/feeds/data?ids=ga%3A53826624&dimensions=ga%3AreferralPath%2Cga%3Asource&metrics=ga%3Apageviews%2Cga%3Avisits&segment=gaid%3A%3A-1&sort=-ga%3Apageviews&start-date=" & BaslangicTarih & "&end-date=" & BitisTarih & "&max-results=50"
test.open
test.setheader "Authorization", "GoogleLogin auth=" & myauth
test.send
Set xmlDOM = Server.CreateObject("MSXML2.DomDocument.3.0")
xmlDOM.async = false
xmlDOM.LoadXml(test.Responsetext)

Set entitys = xmlDOM.getElementsByTagName("entry") ‘ rss dönüştür
totalhits = 0
For i = 0 To entitys.length – 1
If Not (entitys(i).getElementsByTagName("dxp:dimension")(1).getAttribute("value") = "(Not set)") Then

End If
strTekilHit = strTekilHit + cint(entitys(i).getElementsByTagName("dxp:metric")(1).getAttribute("value"))
totalhits = totalhits + cint(entitys(i).getElementsByTagName("dxp:metric")(0).getAttribute("value"))
Next
Set xmlDOM = Nothing ‘ XML Temizle
Set test = Nothing

if Cesit = "tekil" then
Analytics = strTekilHit
else
Analytics = totalhits
End If
End Function

BugunTarih = year(Now) & "-" & padnum(month(Now)) & "-" & padnum(day(Now))
BaslangicTarih = "2009-11-15"

strBugunTekil = Analytics("tekil", BugunTarih, BugunTarih)
strBugunCogul = Analytics("cogul", BugunTarih, BugunTarih)
strToplamTekil = Analytics("tekil", BaslangicTarih, BugunTarih)
strToplamCogul = Analytics("cogul", BaslangicTarih, BugunTarih)
%>
$(‘#BugunTekilHit’).html(‘<%=strBugunTekil%>’);
$(‘#BugunCogulHit’).html(‘<%=strBugunCogul%>’);
$(‘#ToplamCogulHit’).html(‘<%=strToplamCogul%>’);
$(‘#ToplamTekilHit’).html(‘<%=strToplamTekil%>’);
[/asp]

httpyardim.asp kodları ise:

[asp title=”httpyardim.asp”]
<%
Const HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0
Const HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 1

Class HttpHelper
Public verb
Public url
Public postdata
Public responseText
Private HttpHelperWinHTTP
Private HttpHelperDictionary
Private Sub Class_Initialize()
Set HttpHelperWinHTTP = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
Set HttpHelperDictionary = Server.CreateObject("Scripting.Dictionary")
verb = "GET"
End Sub
Private Sub Class_Terminate()
Set HttpHelperWinHTTP = Nothing
Set HttpHelperDictionary = Nothing
End Sub
Public Sub SetAuth(euser, epasswd)
HttpHelperWinHTTP.SetCredentials euser, epasswd, _
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER
End Sub
Public Sub SetHeader(ekey, evalue)
HttpHelperWinHTTP.setRequestHeader ekey, evalue
End Sub
Public Sub SetFormdata
verb = "POST"
open
HttpHelperWinHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded "
End Sub
Public Sub Close
HttpHelperWinHTTP.Close
End Sub
Public Sub open
HttpHelperWinHTTP.Open UCase(verb), url, False
End Sub
Public Sub AddPostVal(ekey, evalue)
HttpHelperDictionary.Add ekey, evalue
End Sub
Public Sub send
If (LCase(verb) = "post") Then
a = HttpHelperDictionary.Keys
b = HttpHelperDictionary.items
postdata = Server.UrlEncode(a(0)) & "=" & Server.UrlEncode(b(0)) & "&"
For i = 1 To (HttpHelperDictionary.Count – 1)
postdata = postdata & Server.UrlEncode(a(i)) & "=" & Server.UrlEncode(b(i)) & "&"
Next
End If
sendRequest
End Sub
Public Sub sendPostData
sendRequest
End Sub
Private Sub sendRequest
If (LCase(verb) = "post") Then
HttpHelperWinHTTP.send postdata
Else
HttpHelperWinHTTP.send
End If
If HttpHelperWinHTTP.status = 200 Then
responseText = HttpHelperWinHTTP.responseText
Else
Err.Raise 2, "HttpHelper","WinHttp İşlem başarısız oldu Hata: " & HttpHelperWinHTTP.status & " : " & HttpHelperWinHTTP.statustext
End If
End Sub
End Class
%>
[/asp]

Tabi bu kodlar sadece analytics için değil service bölümünü aşağıdaki değerlerle değiştirerek diğer API servislerine ulaşabilirsiniz fakat doğru hizmet urlsi bulmak zor.

Google API Servis Kodu
Google Analytics Data APIs analytics
Google Apps Provisioning APIs apps
Google Base Data API gbase
Google Sites Data API jotspot
Blogger Data API blogger
Book Search Data API print
Calendar Data API cl
Google Code Search Data API codesearch
Contacts Data API cp
Documents List Data API writely
Finance Data API finance
Gmail Atom feed mail
Health Data API health weaver
Maps Data APIs local
Picasa Web Albums Data API lh2
Sidewiki Data API annotateweb
Spreadsheets Data API wise
Webmaster Tools API sitemaps
YouTube Data API youtube

kodlar açık kaynak istediğiniz gibi değiştirebilirsiniz 🙂

Direk sayfaya yüklemek yavaşlamaya neden olur bu yüzden ben JavaScript olarak kullanıyorum sayfa açılıyor sonrasında veriler geliyor. Bunun için verileri göstereceğiniz sayfaya ufak bir jQuery koduyla bu işi halledebiliriz.

[code lang=”js”]jQuery.ajax({type:’GET’, url:’http://www.fatihaytekin.com/analyticsapi/fatihanalytics.asp’, cache:false, dataType:’script’});[/code]

Kolay gelsin…

“ASP ile Google Analytics API verileri çekme” üzerine 6 yorum

    1. asLında Windows Server 2003, XP SP1 ve Windows 2000 SP 3 olan bütün serverlerde bileşen bulunuyor fakat özellikle kaldırılmışsa başka bir fonksiyon bu işi görmüyor malesef (yada ben bilmiyorum)

  1. Merhaba Fatih. Yazıya Ceviz’de verdiğin linkten ulaştım. Madem ki biraz özelleştirmişsin tamamına erdirmen için bir iki nacizane önerim olacak.
    Toplama işlemleri yaparken CInt kullanma, çünkü VBScript’in Integer alt türünü aşacak boyutta sayılar (> 32767) gelebilir ve hataya sebep olacaktır. Bu gibi durumları önceden önlemek için CLng kullanmaya çalış.
    Bu özelleştirdiğin örneğin aslını hızlıca bir yerden bulup eklemiştim foruma. Ama yazan her kimse WinHttp.WinHttpRequest.5.1’i kullanmasının bu örnekte özel bir artısı yok. Pek ala da yerine MSXML2.ServerXMLHTTP kullanılabilir ki Server tarafında çalışması için tasarlandığından tavsiye edilendir. Analytics’deki sitemize ait ID’yi URL’de elle değiştirtmek yerine onu da Analytics() fonksiyonuna ek bir parametre olarak tanımlarsan daha iyi olabilir. Son olarak, Data Feed API şu an JSON çıktı destekler vaziyette. Bu da yanıtı JSON formatında aldıktan sonra kontrolleri tamamen istemci tarafta JS ile yapabilirsin demek ki performans konusunda işe yarayabilir. Veya tam detaylı bir rapor alınmak istendiğinde imdada yetişebilir (XML Dökümanını işlemekten daha kolay olur). JSON çıktı istemek için URL’e “alt=json” şeklinde ek bir parametre eklemen gerekiyor (http://goo.gl/VGaOZ). Kolay gelsin.

  2. ASP ile ilgili böyle güzel kaynaklar bulabilmek gerçekten çok mutlu etti beni 🙂 Hazır portal projemiz olan iyibu!Portal’da bu kodlarınızı kullanacağım. Ha unutmadan madem siz de bizim gibi ASP aşığıysanız ve hala bu güzel dilden kopamıyorsanız web sitemize bekleriz 🙂
    İyi Günler

  3. Peki üstadım burada anladığım kadarı ile tekil günlük ve toplam hitleri alabiliyoruz buna ek olarak diğer istatistikleri nasıl alabiliriz örneğin tarayıcı işletim sistemi vb.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir