def make_visitor(): from pyga.requests import Visitor info = lambda x: xbmc.getInfoLabel("System.%s" % x) visitor = Visitor() visitor.user_agent = get_user_agent() visitor.locale = xbmc.getLanguage() visitor.screen_resolution = "%sx%s" % (info("ScreenWidth"), info("ScreenHeight")) return visitor
def ga_track(self, settings, event={}): _req_list = [] no_tracking = self.get_argument('no_tracking', None) is_prod = settings.ga_is_prod if not no_tracking and is_prod and settings.ga_account: _req = self.request remote_ip = _req.headers.get("X-Real-Ip", _req.headers.get("X-Forwarded-For", _req.remote_ip)) user_agent = _req.headers.get("User-Agent", None) visitor = Visitor() visitor.ip_address = remote_ip visitor.user_agent = user_agent #get visitor.locale visitor.extract_from_server_meta( {"HTTP_ACCEPT_LANGUAGE": _req.headers.get("Accept-Language", None)} ) session = Session() page = Page(_req.path) tracker = Tracker(settings.ga_account, settings.ga_tracker_url) # tracker.track_pageview(page, session, visitor) #this is non-async request pvr = PageViewRequest(config=tracker.config, tracker=tracker, visitor=visitor, session=session, page=page) r = pvr.build_http_request() _req_list.append(HTTPRequest(r.get_full_url(), "POST" if (r.data) else "GET", headers=r.headers, body=r.data)) if event: evt = Event(**event) #tracker.track_event(evt, session, visitor) #this is non-async request er = EventRequest(config=tracker.config, tracker=tracker, visitor=visitor, session=session, event=evt) r = er.build_http_request() _req_list.append(HTTPRequest(r.get_full_url(), "POST" if (r.data) else "GET", headers=r.headers, body=r.data)) #now send actual async requests http_client = AsyncHTTPClient() for _req in _req_list: http_client.fetch(_req)
def ga_track(self, event={}): _req_list = [] no_tracking = self.get_argument('no_tracking', None) is_prod = getattr(config, 'RUN_IN_PROD', False) if not no_tracking and is_prod and hasattr(config, "GA_ACCOUNT"): _req = self.request remote_ip = _req.headers.get("X-Real-Ip", _req.headers.get("X-Forwarded-For", _req.remote_ip)) user_agent = _req.headers.get("User-Agent", None) visitor = Visitor() visitor.ip_address = remote_ip visitor.user_agent = user_agent #get visitor.locale visitor.extract_from_server_meta( {"HTTP_ACCEPT_LANGUAGE": _req.headers.get("Accept-Language", None)} ) session = Session() page = Page(_req.path) tracker = Tracker(config.GA_ACCOUNT, 'MyVariant.info') # tracker.track_pageview(page, session, visitor) #this is non-async request pvr = PageViewRequest(config=tracker.config, tracker=tracker, visitor=visitor, session=session, page=page) r = pvr.build_http_request() _req_list.append(HTTPRequest(r.get_full_url(), "POST" if (r.data) else "GET", headers=r.headers, body=r.data)) if event: evt = Event(**event) #tracker.track_event(evt, session, visitor) #this is non-async request er = EventRequest(config=tracker.config, tracker=tracker, visitor=visitor, session=session, event=evt) r = er.build_http_request() _req_list.append(HTTPRequest(r.get_full_url(), "POST" if (r.data) else "GET", headers=r.headers, body=r.data)) #now send actual async requests http_client = AsyncHTTPClient() for _req in _req_list: http_client.fetch(_req)
def middleware(request): if ga_id is not False: tracker = Tracker(ga_id, request.headers['Host']) visitor = Visitor() visitor.ip_address = request.META.get('REMOTE_ADDR') if request.headers['User-Agent']: visitor.user_agent = request.headers['User-Agent'] session = Session() path = request.path if request.META.get('QUERY_STRING'): path = f"{request.path}?{request.META.get('QUERY_STRING')}" page = Page(path) page.title = request.path tracker.track_pageview(page, session, visitor) response = get_response(request) return response
def log_traffic(request): if not google_analytics: return url = urlparse(request.base_url) pyga_tracker = Tracker(google_analytics, url.hostname) pyga_visitor = Visitor() pyga_visitor.ip_address = request.access_route[0] pyga_visitor.user_agent = request.headers.get('User-Agent') user_locals = [] if 'Accept-Language' in request.headers: al = request.headers.get('Accept-Language') if al is not None: matched_locales = utils.validate_locale(al) if matched_locales: lang_lst = map((lambda x: x.replace('-', '_')), (i[1] for i in matched_locales)) quality_lst = map( (lambda x: x and x or 1), (float(i[4] and i[4] or '0') for i in matched_locales)) lang_quality_map = map((lambda x, y: (x, y)), lang_lst, quality_lst) user_locals = [ x[0] for x in sorted( lang_quality_map, key=itemgetter(1), reverse=True) ] if user_locals: pyga_visitor.locale = user_locals[0] pyga_session = Session() pyga_page = Page(url.path) pyga_page.referrer = request.headers.get('Referer') logger.info('Logging GA traffic from %s to host %s with page %s', pyga_visitor.ip_address, url.hostname, url.path) try: pyga_tracker.track_pageview(pyga_page, pyga_session, pyga_visitor) except URLError: logger.warn('Unable to connect to analytics') except: logger.error('Analytics logging failed') logger.error(sys.exc_info())
def make_visitor(): from pyga.requests import Visitor visitor = Visitor() visitor.user_agent = get_user_agent() visitor.locale = xbmc.getLanguage() return visitor
from random import randint uniq_id=random.random()*time.time() Addon.setSetting('uniq_id', str(uniq_id)) GAcookie =Addon.getSetting('GAcookie') uniq_id=Addon.getSetting('uniq_id') ses_file = xbmc.translatePath('special://temp/'+ 'session.ag') vis_file = xbmc.translatePath('special://temp/'+ 'visitor.ag') try: with open(vis_file, 'rb') as f: visitor = pickle.load(f) except: visitor = Visitor() visitor.user_agent=get_user_agent() visitor.locale = xbmc.getLanguage() info = lambda x: xbmc.getInfoLabel("System.%s" % x) visitor.screen_resolution = "%sx%s" % (info("ScreenWidth"), info("ScreenHeight")) visitor.unique_id=random.randint(0, 0x7fffffff) with open(vis_file, 'wb') as f: pickle.dump(visitor, f) try: with open(ses_file, 'rb') as f: session = pickle.load(f) except: session = Session() with open(ses_file, 'wb') as f: