Implement oauth2 for accessing google analytics
[ckanext-ga-report.git] / ckanext / ga_report / download_analytics.py
blob:a/ckanext/ga_report/download_analytics.py -> blob:b/ckanext/ga_report/download_analytics.py
--- a/ckanext/ga_report/download_analytics.py
+++ b/ckanext/ga_report/download_analytics.py
@@ -4,7 +4,8 @@
 from pylons import config
 
 import ga_model
-from ga_client import GA
+
+#from ga_client import GA
 
 log = logging.getLogger('ckanext.ga-report')
 
@@ -12,12 +13,16 @@
 
 class DownloadAnalytics(object):
     '''Downloads and stores analytics info'''
-    def __init__(self):
+
+    def __init__(self, service=None, profile_id=None):
         self.period = config['ga-report.period']
-    
+        self.service = service
+        self.profile_id = profile_id
+
+
     def all_(self):
-        pass
-    
+        self.since_date(datetime.datetime(2010, 1, 1))
+
     def latest(self):
         if self.period == 'monthly':
             # from first of this month to today
@@ -49,8 +54,8 @@
                     break
                 elif first_of_the_month < first_of_this_month:
                     in_the_next_month = first_of_the_month + datetime.timedelta(40)
-                    last_of_the_month == datetime.datetime(in_the_next_month.year,
-                                                           in_the_next_month.month, a)\
+                    last_of_the_month = datetime.datetime(in_the_next_month.year,
+                                                           in_the_next_month.month, 1)\
                                                            - datetime.timedelta(1)
                     periods.append((now.strftime(FORMAT_MONTH), 0,
                                     first_of_the_month, last_of_the_month))
@@ -71,7 +76,7 @@
             return period_name + ' (up to %ith)' % period_complete_day
         else:
             return period_name
-        
+
 
     def download_and_store(self, periods):
         for period_name, period_complete_day, start_date, end_date in periods:
@@ -84,8 +89,8 @@
                      self.get_full_period_name(period_name, period_complete_day))
             self.store(period_name, period_complete_day, data)
 
-    @classmethod
-    def download(cls, start_date, end_date):
+
+    def download(self, start_date, end_date):
         '''Get data from GA for a given time period'''
         start_date = start_date.strftime('%Y-%m-%d')
         end_date = end_date.strftime('%Y-%m-%d')
@@ -93,22 +98,45 @@
         #query = 'ga:pagePath=~^%s,ga:pagePath=~^%s' % \
         #        (PACKAGE_URL, self.resource_url_tag)
         query = 'ga:pagePath=~^/dataset/'
+        #query = 'ga:pagePath=~^/User/'
         metrics = 'ga:uniquePageviews'
         sort = '-ga:uniquePageviews'
-        for entry in GA.ga_query(query_filter=query,
-                                 from_date=start_date,
+
+        # Supported query params at
+        # https://developers.google.com/analytics/devguides/reporting/core/v3/reference
+        results = self.service.data().ga().get(
+                                 ids='ga:' + self.profile_id,
+                                 filters=query,
+                                 start_date=start_date,
                                  metrics=metrics,
                                  sort=sort,
-                                 to_date=end_date):
-            print entry
-            import pdb; pdb.set_trace()
-            for dim in entry.dimension:
-                if dim.name == "ga:pagePath":
-                    package = dim.value
-                    count = entry.get_metric(
-                        'ga:uniquePageviews').value or 0
-                    packages[package] = int(count)
-        return packages
+                                 end_date=end_date).execute()
+        self.print_results(results)
+
+#        for entry in GA.ga_query(query_filter=query,
+#                                 from_date=start_date,
+#                                 metrics=metrics,
+#                                 sort=sort,
+#                                 to_date=end_date):
+#            print entry, type(entry)
+#            import pdb; pdb.set_trace()
+#            for dim in entry.dimension:
+#                if dim.name == "ga:pagePath":
+#                    package = dim.value
+#                    count = entry.get_metric(
+#                        'ga:uniquePageviews').value or 0
+#                    packages[package] = int(count)
+        return []
+
+    def print_results(self, results):
+        import pprint
+        pprint.pprint(results)
+        if results:
+            print 'Profile: %s' % results.get('profileInfo').get('profileName')
+            print 'Total results: %s' % results.get('totalResults')
+            print 'Total Visits: %s' % results.get('rows', [[-1]])[0][0]
+        else:
+            print 'No results found'
 
     def store(self, period_name, period_complete_day, data):
         if 'url' in data: