Блог Рагимова Романа

 

Google Analytics + gdata + Django = ранжируем посты по популярности

Когда я переписывал движок блога на django, мне захотелось получить список популярных постов за последний месяц. Причем список должен был строиться не по каким-то там эфемерным «плюсикам» к посту, а по количеству просмотров. На помощь пришел Google Analytics с его мощным API и обертка gdata для Python.

Итоговый код выглядит примерно так:

from django.core.urlresolvers import resolve, Resolver404
from datetime import date, timedelta
from blog.models import Entry # модель отвечающая за записи в блоге. Содержит поле popularity для хранения количества просмотров.
import gdata.analytics.service
import blog.views

client = gdata.analytics.service.AnalyticsDataService()
client.ClientLogin("user@gmail.com", "password")
# далее мы строим таблицу просмотров страниц по пути до данной страницы
data = client.GetData("ga:profileId", dimensions="ga:pagePath", metrics="ga:pageviews", start_date=(date.today() - timedelta(30)), end_date = date.today(), sort="-ga:pageviews")

for de in data.entry:
    try:
        view, args, kwargs = resolve(str(de.pagePath))
        if view == blog.views.entry:
            try:
                e = Entry.objects.get(slug = kwargs["slug"])
                e.popularity = int(str(de.pageviews))
                e.save()
            except Entry.DoesNotExist:
                pass
    except Resolver404:
        pass

Если в не знаете своего ga:profileId, то можете получить его, выполнив следующий код:

import gdata.analytics.service
client = gdata.analytics.service.AccountsService()
client.ClientLogin('user@gmail.com', 'mypassword')
accounts = client.GetAccountList()
for account in accounts.entry:
    print '%s profileId: %s' % (account.title.text, account.profileId)