import sys
import codecs
import traceback
import requests
import re
import pandas as pd
import random
import urllib
import json
import gspread
import datetime
from gspread_pandas import Spread, Client
from oauth2client.service_account import ServiceAccountCredentials
import os
import threading
from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
import dataset
import pymysql
pymysql.install_as_MySQLdb()
from datetime import datetime
import platform

SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
KEY_FILE_LOCATION_bennis = '/Users/zooeytsai/Downloads/corded-velocity-301807-a3e3d5420aba.json'
KEY_FILE_LOCATION_inn = '/Users/zooeytsai/Downloads/corded-velocity-301807-9262189e4dd5.json'
KEY_FILE_LOCATION_hhh = '/Users/zooeytsai/Downloads/choozmo-ga-58715a47b676.json'
VIEW_ID_inn = '213054263'
VIEW_ID_hhh = '188916214'

def initialize_analyticsreporting():
    """Initializes an Analytics Reporting API V4 service object.
  
    Returns:
      An authorized Analytics Reporting API V4 service object.
    """
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        KEY_FILE_LOCATION_hhh, SCOPES)
    
    # Build the service object.
    analytics = build('analyticsreporting', 'v4', credentials=credentials)
    
    return analytics


def get_report(analytics, body):
    """Queries the Analytics Reporting API V4.
  
    Args:
      analytics: An authorized Analytics Reporting API V4 service object.
    Returns:
      The Analytics Reporting API V4 response.
    """
    return analytics.reports().batchGet(
        body={
            'reportRequests': body
        }
    ).execute()


def print_response(response):
    """Parses and prints the Analytics Reporting API V4 response.
  
    Args:
      response: An Analytics Reporting API V4 response.
    """
    result = []
    for report in response.get('reports', []):
        columnHeader = report.get('columnHeader', {})
        dimensionHeaders = columnHeader.get('dimensions', [])
        metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])
        
        for row in report.get('data', {}).get('rows', []):
            dimensions = row.get('dimensions', [])
            dateRangeValues = row.get('metrics', [])
            ga_dict = {}
            
            for header, dimension in zip(dimensionHeaders, dimensions):
                #        print(header + ': ', dimension)
                ga_dict[header] = dimension
            
            for i, values in enumerate(dateRangeValues):
                #        print('Date range:', str(i))
                for metricHeader, value in zip(metricHeaders, values.get('values')):
                    ga_dict[metricHeader.get('name')] = value
                #          print(metricHeader.get('name') + ':', value)
                result.append(ga_dict)
        return result


def main():
    analytics = initialize_analyticsreporting()
    current_time = datetime.now().strftime('%Y-%m-%d')
    body = [{ 'viewId': VIEW_ID_hhh,
      'dateRanges': [{'startDate': current_time, 'endDate': current_time}],
    
      'metrics': [{'expression': 'ga:sessions'},{'expression': 'ga:pageviews'}],
      'dimensions': [{'name': 'ga:sourceMedium'}],
    #  'orderBys':[{"fieldName": "ga:pageviews", "sortOrder": "DESCENDING"}],
      'pageSize': '100'
      }]

    response = get_report(analytics, body)
    ga_dict = print_response(response)
    result = None
    for elmt in ga_dict:
        hour = datetime.now().strftime('%H')
        if 'google' in elmt['ga:sourceMedium'] and 'organic' in elmt['ga:sourceMedium']:
            print(elmt)
            result = elmt
    return result


if __name__ == '__main__':
  main()