]> git.0d.be Git - panikdb.git/commitdiff
add stats module
authorFrédéric Péters <fpeters@0d.be>
Fri, 10 Apr 2015 10:51:27 +0000 (12:51 +0200)
committerFrédéric Péters <fpeters@0d.be>
Fri, 10 Apr 2015 11:02:31 +0000 (13:02 +0200)
panikdb/settings.py
panikdb/stats/__init__.py [new file with mode: 0644]
panikdb/stats/management/__init__.py [new file with mode: 0644]
panikdb/stats/management/commands/__init__.py [new file with mode: 0644]
panikdb/stats/management/commands/load-piwik-stats.py [new file with mode: 0644]
panikdb/stats/migrations/0001_initial.py [new file with mode: 0644]
panikdb/stats/migrations/__init__.py [new file with mode: 0644]
panikdb/stats/models.py [new file with mode: 0644]

index 019f1e80e319d969de6b5c351777afc8d2f466f6..8d241363084ef9a6c56a565ea93d31f06a6f0023 100644 (file)
@@ -136,6 +136,7 @@ INSTALLED_APPS = (
     'nonstop',
     'panikdb.aa',
     'panikdb.customtags',
+    'panikdb.stats',
     'gadjo',
     'combo.data',
     'combo.manager',
diff --git a/panikdb/stats/__init__.py b/panikdb/stats/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/panikdb/stats/management/__init__.py b/panikdb/stats/management/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/panikdb/stats/management/commands/__init__.py b/panikdb/stats/management/commands/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/panikdb/stats/management/commands/load-piwik-stats.py b/panikdb/stats/management/commands/load-piwik-stats.py
new file mode 100644 (file)
index 0000000..044655d
--- /dev/null
@@ -0,0 +1,48 @@
+import datetime
+import json
+import urllib2
+
+from django.conf import settings
+from django.core.management.base import BaseCommand, CommandError
+
+from panikdb.stats.models import SoundFile, DailyStat
+
+class Command(BaseCommand):
+    def handle(self, verbosity, **kwargs):
+        self.verbose = (verbosity > 1)
+
+        piwik_api_href = settings.PIWIK_API_HREF
+        piwik_token_auth = settings.PIWIK_TOKEN_AUTH
+        piwik_site_id = settings.PIWIK_SITE_ID
+        url = '%(piwik_api_href)s?module=API&method=Events.getAction&'\
+              'secondaryDimension=eventName&idSite=%(piwik_site_id)s&'\
+              'period=day&date=last2&format=json&'\
+              'token_auth=%(piwik_token_auth)s&expanded=1' % locals()
+        request = urllib2.Request(url)
+        request.add_header('Accept', 'application/json')
+        if self.verbose:
+            print 'calling piwik'
+        result = json.load(urllib2.urlopen(request))
+        if self.verbose:
+            print 'collecting results'
+        for day in result:
+            day_datetime = datetime.datetime.strptime(day, '%Y-%m-%d')
+            for stat_segment in result.get(day):
+                if stat_segment.get('segment') != 'eventAction==Play':
+                    continue
+                for entry in stat_segment.get('subtable'):
+                    sound_id = entry.get('label').split(':')[0]
+                    try:
+                        soundfile = SoundFile.objects.get(id=sound_id)
+                    except (SoundFile.DoesNotExist, ValueError):
+                        if self.verbose:
+                            print 'failed to process', entry.get('label')
+                        continue
+                    try:
+                        stat = DailyStat.objects.get(soundfile=soundfile,
+                                day=day_datetime)
+                    except DailyStat.DoesNotExist:
+                        stat = DailyStat(soundfile=soundfile, day=day_datetime)
+                    for attribute in ('nb_events', 'nb_visits'):
+                        setattr(stat, attribute, entry.get(attribute))
+                    stat.save()
diff --git a/panikdb/stats/migrations/0001_initial.py b/panikdb/stats/migrations/0001_initial.py
new file mode 100644 (file)
index 0000000..aaed9db
--- /dev/null
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('emissions', '0003_newsitem_event_date'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='DailyStat',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('day', models.DateField()),
+                ('nb_events', models.IntegerField()),
+                ('nb_visits', models.IntegerField()),
+                ('soundfile', models.ForeignKey(to='emissions.SoundFile')),
+            ],
+            options={
+            },
+            bases=(models.Model,),
+        ),
+    ]
diff --git a/panikdb/stats/migrations/__init__.py b/panikdb/stats/migrations/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/panikdb/stats/models.py b/panikdb/stats/models.py
new file mode 100644 (file)
index 0000000..ca4a568
--- /dev/null
@@ -0,0 +1,10 @@
+from django.db import models
+
+from emissions.models import SoundFile
+
+
+class DailyStat(models.Model):
+    soundfile = models.ForeignKey(SoundFile)
+    day = models.DateField()
+    nb_events = models.IntegerField()
+    nb_visits = models.IntegerField()