[Django] Trigger GA event on server side
1. install requirements
pip install django-google-analytics pip install pyga==2.4.2 pip install mock==1.0.1
2. utility code
from django.contrib.sites.models import Site from pyga.requests import Tracker, Visitor, Session, Event def ga_event(category, action): visitor = Visitor() session = Session() event = Event(category=category, action=action) site = Site.objects.get_current() code_set = site.googleanalytics_set.all() if code_set: analytics_code = code_set[0].web_property_id tracker = Tracker(analytics_code.replace('UA', 'MO'), site.domain) tracker.track_event(event, session, visitor)
3. test for utility
from django.contrib.sites.models import Site from django.test import TestCase from google_analytics.models import GoogleAnalytics from mock import patch from pyga import requests from .utils import ga_event class UtilsTestCase(TestCase): @patch('pyga.requests.Tracker') def test_ga_event(self, TrackerMock): """ Check that pyga.requests.Track cals with right arguments """ analytics_code = 'UA-77777777-7' mobile_analytics_code = analytics_code.replace('UA', 'MO') sites = Site.objects.all() self.assertEqual(sites.count(), 1) site = sites[0] analytics = GoogleAnalytics.objects.create( site=site, web_property_id=analytics_code) tracker_value = requests.Tracker(mobile_analytics_code, site.domain) ga_event('a', 'b') TrackerMock.assert_called_once_with(mobile_analytics_code, site.domain)
The beautiful thing here is that while no Google Analytics objects added, tracking will be disabled. So, events shouldn't trigger while testing app.
4. add google analytics id to /admin/sites/site/1/
(web property id, starts from UA-
)
5. call ga_event('somecategory', 'someaction')
when You need to trigger an event
Licensed under CC BY-SA 3.0