Reputation: 21
Because Google is still changing their api's for ga4, I get mismatches in function names and parameter lists. I tried api v.11 that chatGPT uses, I also tries the latest version .16. Right now, I get a runtime error " File "d:\workspaceGA\ga4export\ga4base.py", line 49, in sample_run_report one_of=DimensionValue.OneOf( AttributeError: type object 'DimensionValue' has no attribute 'OneOf'" Any ideas? It becomes a shell game, I would fix one problem like this, then something else errors out elsewhere, a function, class or variable name errors out.
import sys
sys.path.append('./')
from globals import *
from datetime import datetime, timedelta
SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
KEY_FILE_LOCATION = GLOBAL_KEY_FILE_LOCATION
MEASUREMENT_ID = GLOBAL_MEASUREMENT_ID
from google.oauth2 import service_account
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import (
DateRange,
Dimension,
Metric,
RunReportRequest,
CohortSpec,
Cohort,
DimensionValue,
CohortsRange,
CohortReportSettings,
)
def sample_run_report(start_date_day, end_date):
credentials = service_account.Credentials.from_service_account_file(KEY_FILE_LOCATION, scopes=SCOPES)
client = BetaAnalyticsDataClient(credentials=credentials)
start_date = datetime.strptime(start_date_day, '%Y-%m-%d')
end_date = datetime.strptime(end_date, '%Y-%m-%d')
while start_date <= end_date:
# set the end_date for the current day
current_end_date = (start_date + timedelta(days=1)).strftime('%Y-%m-%d')
request = RunReportRequest(
property=f"properties/{MEASUREMENT_ID}",
dimensions=[
Dimension(name="customEvent:n20_page_url"),
Dimension(name="customDimension:n20_nick_name")
],
metrics=[Metric(name="eventCount")],
date_ranges=[DateRange(start_date=start_date.strftime('%Y-%m-%d'), end_date=current_end_date)],
cohort_spec=CohortSpec(
cohorts=[
Cohort(
dimension=DimensionValue(
value="",
one_of=DimensionValue.OneOf(
value=DimensionValue.StringValue(
value="customDimension:n20_nick_name"
)
)
),
name="",
)
],
cohorts_range=CohortsRange(start_offset=0, end_offset=0),
cohort_report_settings=CohortReportSettings(),
)
)
response = client.run_report(request)
print(f"Report result for {start_date.strftime('%Y-%m-%d')}:")
for row in response.rows:
print(row.dimension_values[0].value, row.dimension_values[1].value, row.metric_values[0].value)
# set the start_date for the next day
start_date += timedelta(days=1)
def main():
start_date_day = '2023-01-01'
end_date = '2023-03-10'
sample_run_report(start_date_day, end_date)
if __name__ == '__main__':
main()
Upvotes: 1
Views: 221