blob: 1fb1bcd79fc4fc3fbb47e0970fe61077e3083388 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# -*- coding: utf-8 -*-
# Create your views here.
from django.shortcuts import render_to_response
from django.conf import settings
from random import randint
import logging
def serve_ads(request):
sample = _weighted_random_sample(settings.ADS_STRUCT)
ads = [_trans_ad(a, request.META['HTTP_ACCEPT_LANGUAGE'].split(',')[0]) for a in sample]
return render_to_response('ads.html', {'ads': ads, 'MEDIA_URL': settings.MEDIA_URL,})
def _trans_ad(ad, lang):
for k in settings.TRANS_KEYS:
if k not in ad:
continue
if isinstance(ad[k], dict):
if lang in ad[k]:
ad[k] = ad[k][lang]
elif lang.split('-')[0] in ad[k]:
s = lang.split('-')[0]
ad[k] = ad[k][s]
else:
ad[k] = ad[k][settings.DEFAULT_ADS_LANG]
return ad
def _weighted_random_sample(ads):
ads_out = []
for i in xrange(settings.ADS_LENGTH):
indices = [a['weight'] for a in ads]
s = sum(indices)
r = randint(0, s-1)
cur_total = 0
for ad_i in xrange(len(ads)):
ad = ads[ad_i]
cur_total += ad['weight']
if r < cur_total:
ads_out.append(ad.copy())
ads = ads[:ad_i] + ads[ad_i + 1:]
break
ads_log_data_message = ','.join([a['name'] for a in ads_out])
logging.info(ads_log_data_message)
return ads_out
|