class ReferrersHandler(BaseHandler): @web.authenticated @cache(CACHE_EXPIRES) # set the cache expires @unblock def get(self): """ Returns your referrers list example: headers: [ { "name": "ga:fullReferrer", "columnType": "DIMENSION", "dataType": "STRING" }, { "name": "ga:users", "columnType": "METRIC", "dataType": "INTEGER" }, { "name": "ga:bounces", "columnType": "METRIC", "dataType": "INTEGER" } ], rows: [ [ "linkplug", "216", "273" ], [ "4webmasters.org/", "189", "194" ], [ "reddit.com/", "152", "173" ], :return: """ try: service_account = self.settings['service_account_email'] self.service = GAcess(service_account_email=service_account, key_file_location=self.settings['key_file_location']) query_result = self.service.get_referrers(profile_id=self.settings['ga_profile_id'], days=self.settings['start_days_ago']) try: data = query_result['rows'] except KeyError: self.set_status(400, reason='Failed to fetch referrers data') else: # formatting decimal values to percentage for row in data: row[2] = ("%.2f" % float(row[2])) + "%" table_title = 'Who is linking to us?' headers = ['Full referrer', 'Users', 'Bounces'] return self.render_string('webhandler/data_table.html', data=data, table_title=table_title, headers=headers) except Exception as ex: self.set_status(403) return self.render_string('error.html', error=ex)