Я написал скрипт на python, который извлекает некоторые данные из Google Analytics API, а затем записывает эти значения в файл JSON в папке webroot. Мой скрипт работает нормально и записывает JSON-файл, когда я выполняю его напрямую или через ./analytics.py. Я на Ubuntu 18.04.
Я сделал его исполняемым через:
chmod +x analytics.py
и добавил Шебанг в начале моего кода:
#!/usr/bin/env python3
Моя запись в crontab -e выглядит так:
45 17 * * * /root/dashboard_scripts/analytics.py
Вывод tail -f / var / log / syslog выглядит следующим образом:
Apr 17 15:44:01 gs-kpi cron[62390]: (root) RELOAD (crontabs/root)
Apr 17 15:45:01 gs-kpi CRON[63978]: (root) CMD (/root/dashboard_scripts/analytics.py)
Я также проверил с помощью образца cron, работает ли cron под пользователем root.
Мой скрипт на Python такой:
#!/usr/bin/env python3
import argparse
import json
import re
import os
import pprint
from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
import httplib2
from oauth2client import client
from oauth2client import file
from oauth2client import tools
save_path = '/var/www/html/'
filename = 'googleanalytics_data.json'
data = []
SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
DISCOVERY_URI = ('https://analyticsreporting.googleapis.com/$discovery/rest')
KEY_FILE_LOCATION = '543671d681ee.p12'
SERVICE_ACCOUNT_EMAIL = 'data-gserviceaccount.com'
VIEW_ID = '10'
def initialize_analyticsreporting():
"""Initializes an analyticsreporting service object.
Returns:
analytics an authorized analyticsreporting service object.
"""
credentials = ServiceAccountCredentials.from_p12_keyfile(
SERVICE_ACCOUNT_EMAIL, KEY_FILE_LOCATION, scopes=SCOPES)
http = credentials.authorize(httplib2.Http())
# Build the service object.
analytics = build('analytics', 'v4', http=http, discoveryServiceUrl=DISCOVERY_URI)
return analytics
def get_report(analytics):
# Use the Analytics Service Object to query the Analytics Reporting API V4.
return analytics.reports().batchGet(
body={
'reportRequests': [
{
'viewId': VIEW_ID,
'dateRanges': [
{'startDate': '7daysAgo', 'endDate': 'yesterday'},
{'startDate': '14daysAgo', 'endDate': '8daysAgo'},
],
'metrics': [
{'expression': 'ga:pageviews'},
{'expression': 'ga:sessions'},
{'expression': 'ga:pageviewsPerSession'},
{'expression': 'ga:bounces'},
{'expression': 'ga:users'},
{'expression': 'ga:newUsers'},
{'expression': 'ga:goal7Starts'},
{'expression': 'ga:avgPageLoadTime'}
],
"orderBys": [
{"fieldName": "ga:pageviews", "sortOrder": "DESCENDING"}
]
}
]
}
).execute()
def print_response(response):
"""Parses and prints the Analytics Reporting API V4 response"""
for report in response.get('reports', []):
columnHeader = report.get('columnHeader', {})
dimensionHeaders = columnHeader.get('dimensions', [])
metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])
rows = report.get('data', {}).get('rows', [])
for row in rows:
dimensions = row.get('dimensions', [])
dateRangeValues = row.get('metrics', [])
for header, dimension in zip(dimensionHeaders, dimensions):
data.append ( header + ': ' + dimension )
for i, values in enumerate(dateRangeValues):
data.append ('Date range (' + str(i) + ')' )
for metricHeader, value in zip(metricHeaders, values.get('values')):
data.append ( metricHeader.get('name') + ': ' + value )
def main():
analytics = initialize_analyticsreporting()
response = get_report(analytics)
print_response(response)
keys = []
values = []
counter = 0
for item in data:
try:
key = re.search(r'ga:(.*?):', item).group()
value = re.search(r'\d{4,5}', item).group()
counter +=1
if counter > 7:
keys.append(key + '_7days')
else:
keys.append(key + '_14days')
values.append(value)
except:
pass
ga_dict = dict(zip(keys, values))
# print(ga_dict)
with open(os.path.join(save_path, filename), mode='w') as f:
f.write(json.dumps(ga_dict, indent=2))
if __name__ == '__main__':
main()