""" # ----------------------------------------------------------------------------------------------------- # TOTAL NUMBER OF MEETINGS = total_number_of_meetings # STACKED BAR """ def GetTotalNumberOfMeetings(self, parameters): service, profile_id = self.auth() d = {} customers = [ "Delegate", "Urologist", "GP", "Nurse", "Junior Doctor" ] try: datetime.strptime(parameters['start_date'], '%Y-%m-%d') datetime.strptime(parameters['end_date'], '%Y-%m-%d') except ValueError: raise ValueError("Incorrect data format, should be YYYY-MM-DD") if 'country' in parameters.keys(): result = service.data_ga_get_cached( ids='ga:' + profile_id, start_date=parameters['start_date'], end_date=parameters['end_date'], metrics='ga:sessions, ga:sessionDuration, ga:percentNewSessions', dimensions='ga:dimension1, ga:date, ga:userType, ga:dimension2, ga:countryIsoCode', filters='ga:countryIsoCode=='+parameters['country'] ) else: result = service.data_ga_get_cached( ids='ga:' + profile_id, start_date=parameters['start_date'], end_date=parameters['end_date'], metrics='ga:sessions, ga:sessionDuration, ga:percentNewSessions', dimensions='ga:dimension1, ga:date, ga:userType, ga:dimension2, ga:countryIsoCode' ) _output = {} aList = [] if result['totalResults'] > 0: arr_dates = [] for _coll in result.get('rows'): if _coll[3] in customers: if _coll[1] in arr_dates: for _list in aList: if _list['date'] == _coll[1]: meeting_data = {} meeting_data['numberUniqueSessions'] = _coll[0] meeting_data['userType'] = _coll[2] meeting_data['customerType'] = _coll[3] meeting_data['events'] = _coll[5] meeting_data['durationOfSession'] = _coll[6] meeting_data['percentNewSessions'] = _coll[7] meeting_data['country'] = _coll[4] _list['data'].append(meeting_data) else: meeting = {} date = datetime.strptime(_coll[1], '%Y%m%d') meeting['date'] = "{:%d/%m/%Y}".format(date) meeting_data = {} meeting_data['numberUniqueSessions'] = _coll[0] meeting_data['userType'] = _coll[2] meeting_data['customerType'] = _coll[3] meeting_data['events'] = _coll[5] meeting_data['durationOfSession'] = _coll[6] meeting_data['percentNewSessions'] = _coll[7] meeting_data['country'] = _coll[4] meeting['data'] = [] meeting['data'].append(meeting_data) aList.append(meeting) arr_dates.append("{:%d/%m/%Y}".format(date)) _output['results'] = aList else: _output['results'] = aList #print(_output) dt = datetime.strptime(parameters['start_date'], '%Y-%m-%d') start = dt - timedelta(days=dt.weekday()) end = start + timedelta(days=6) count_weeks = 0 is_over_end_date = 0 while is_over_end_date == 0: start = end + timedelta(days=1) end = start + timedelta(days=6) count_weeks += 1 if start > datetime.strptime(parameters['end_date'], '%Y-%m-%d'): break if count_weeks > 12: dt = datetime.strptime(parameters['start_date'], '%Y-%m-%d') start = dt.replace(day = 1) end = dt.replace(day = calendar.monthrange(dt.year, dt.month)[1]) else: dt = datetime.strptime(parameters['start_date'], '%Y-%m-%d') start = dt - timedelta(dt.weekday()) end = start + timedelta(days=1) _true_output = [] is_over_end_date = 0 while is_over_end_date == 0: _week_in = 0 count_this_week =0 for _list in _output['results']: if start <= datetime.strptime(_list['date'], '%d/%m/%Y') <= end: count_this_week = 1 if _week_in == 0: _out = {} _out['date_start'] = "{:%d/%m/%Y}".format(start) _out['date_end'] = "{:%d/%m/%Y}".format(end) _out['data'] = [] for _inside_data in _list['data']: _data = {} _data['numberUniqueSessions'] = int(_inside_data['numberUniqueSessions']) _data['userType'] = _inside_data['userType'] _data['customerType'] = _inside_data['customerType'] _data['value'] = int(_inside_data['events']) _data['users'] = 0 _data['percentNewSessions'] = float(_inside_data['percentNewSessions']) _data['country'] = _inside_data['country'] _out['data'].append(_data) _true_output.append(_out) _week_in = 1 else: for _dates in _true_output: if _dates['date_start'] == "{:%d/%m/%Y}".format(start) and _dates['date_end'] == "{:%d/%m/%Y}".format(end): _exsist_same_customer_type = 0 for _inside_data_new in _dates['data']: for _inside_data in _list['data']: if _inside_data_new['customerType'] == _inside_data['customerType']: _exsist_same_customer_type = 1 numerOfSession = int(_inside_data['numberUniqueSessions']) _inside_data_new['numberUniqueSessions'] = int(_inside_data_new['numberUniqueSessions']) + numerOfSession durationOfSession = int(_inside_data['events']) _inside_data_new['value'] = int(_inside_data_new['value']) + durationOfSession break if _exsist_same_customer_type == 0: _data = {} _data['numberUniqueSessions'] = int(_inside_data['numberUniqueSessions']) _data['userType'] = _inside_data['userType'] _data['customerType'] = _inside_data['customerType'] _data['users'] = 0 _data['value'] = int(_inside_data['events']) _data['percentNewSessions'] = float(_inside_data['percentNewSessions']) _data['country'] = _inside_data['country'] _dates['data'].append(_data) exsist_insert = False for _data in _true_output: if count_weeks > 12: _data['range'] = "m"; else: _data['range'] = "w"; if _data['date_start'] == "{:%d/%m/%Y}".format(start): exsist_insert = True for customer in customers: if not any(d['customerType'] == customer for d in _data['data']): _new_data = {} _new_data['numberUniqueSessions'] = 0.0 _new_data['userType'] = "" _new_data['customerType'] = customer _new_data['users'] = 0 _new_data['value'] = 0 _new_data['percentNewSessions'] = 0.0 _new_data['country'] = "" _data['data'].append(_new_data) if not exsist_insert: _out = {} if count_weeks > 12: _out['range'] = "m"; else: _out['range'] = "w"; _out['date_start'] = "{:%d/%m/%Y}".format(start) _out['date_end'] = "{:%d/%m/%Y}".format(end) _out['data'] = [] for customer in customers: if not any(d['customerType'] == customer for d in _out['data']): _new_data = {} _new_data['numberUniqueSessions'] = 0.0 _new_data['userType'] = "" _new_data['customerType'] = customer _new_data['users'] = 0 _new_data['value'] = 0 _new_data['percentNewSessions'] = 0.0 _new_data['country'] = "" _out['data'].append(_new_data) _true_output.append(_out) if count_weeks > 12: dt = datetime.strptime(parameters['start_date'], '%Y-%m-%d') start = end + timedelta(days=1) end = start.replace(day=calendar.monthrange(start.year, start.month)[1]) else: start = end + timedelta(days=1) end = start + timedelta(days=6) if start > datetime.strptime(parameters['end_date'], '%Y-%m-%d'): break _output2 = {} _output2['results'] = _true_output return _output2
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question