5 from django.conf import settings
6 from django.core.management.base import BaseCommand, CommandError
8 from panikdb.stats.models import SoundFile, DailyStat
10 class Command(BaseCommand):
11 def handle(self, verbosity, **kwargs):
12 self.verbose = (verbosity > 1)
14 piwik_api_href = settings.PIWIK_API_HREF
15 piwik_token_auth = settings.PIWIK_TOKEN_AUTH
16 piwik_site_id = settings.PIWIK_SITE_ID
17 url = '%(piwik_api_href)s?module=API&method=Events.getAction&'\
18 'secondaryDimension=eventName&idSite=%(piwik_site_id)s&'\
19 'period=day&date=last2&format=json&'\
20 'token_auth=%(piwik_token_auth)s&expanded=1' % locals()
22 print('calling piwik')
23 response = requests.get(url, headers={'Accept': 'application/json'})
24 result = response.json()
26 print('collecting results')
28 day_datetime = datetime.datetime.strptime(day, '%Y-%m-%d')
29 for stat_segment in result.get(day):
30 if stat_segment.get('segment') != 'eventAction==Play':
32 for entry in stat_segment.get('subtable'):
33 sound_id = entry.get('label').split(':')[0]
35 soundfile = SoundFile.objects.get(id=sound_id)
36 except (SoundFile.DoesNotExist, ValueError):
38 print('failed to process', entry.get('label'))
41 stat = DailyStat.objects.get(soundfile=soundfile,
43 except DailyStat.DoesNotExist:
44 stat = DailyStat(soundfile=soundfile, day=day_datetime)
45 for attribute in ('nb_events', 'nb_visits'):
46 setattr(stat, attribute, entry.get(attribute))