我一直在编写一个Python脚本,为YTD的特定视图提取GA数据。在这段时间里,我有一个机器人流量,在视图中被过滤掉了,但在2022年4月,仍然有很大一部分流量。我想在ga:browserVersion中使用一个分段过滤器,并排除该流量。不幸的是,我得到了以下错误:
<请求时出现HttpError 400https://analyticsreporting.googleapis.com/v4/reports:batchGet?alt=json返回";收到无效的JSON负载。未知名称"而不是";位于"report_requests[0]。segments[0]。dynamic_segment.user_segment.segment_filters[0]。simple_segment.or_filters_for_segment_filter_clauses[0]。dimension_filter":找不到字段",'description":"收到无效的JSON负载。未知名称"而不是";位于"report_requests[0]。segments[0]。dynamic_segment.user_segment.segment_filters[0]。simple_segment.or_filters_for_segment_filter_clauses[0]。dimension_filter":找不到字段>
下面是相关代码:
def get_report(analytics, start_date, end_date_delta, pageToken = None):
"""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': [
{
'viewId': VIEW_ID,
'pageSize': 10000,
'pageToken': pageToken,
'dateRanges': [{'startDate': start_date.strftime("%Y-%m-%d") , 'endDate': (start_date+end_date_delta).strftime("%Y-%m-%d")}],
'metrics': [{'expression': 'ga:pageviews'}, {'expression': 'ga:sessions'}, {'expression': 'ga:pageviewsPerSession'}, {'expression': 'ga:totalEvents'}, {'expression': 'ga:uniqueEvents'}, {'expression': 'ga:timeOnPage'}, {'expression': 'ga:users'}, {'expression': 'ga:newUsers'}],
'dimensions': [{'name':'ga:date'}, {'name':'ga:sourceMedium'}, {'name':'ga:pageTitle'}, {'name':'ga:eventLabel'}, {'name':'ga:eventCategory'}, {'name':'ga:adContent'}, {'name':'ga:segment'}, {'name':'ga:campaign'}, {'name':'ga:dimension8'} ],
'segments':[{
'dynamicSegment':
{
'name': 'Apr Bot Traffic',
'userSegment':
{
'segmentFilters':[
{
'simpleSegment':
{
'orFiltersForSegment':
{
'segmentFilterClauses': [
{
'dimensionFilter':
{
'dimensionName':'ga:browserVersion',
'not':True,
'operator':'EXACT',
'expressions':'80.0.3987.163'
}
}]
}
}
}]
}
}
}]
}]
}
).execute()
看起来SegmentDimensionFilter
不支持not
字段,只有DimensionFilter
支持。
不过,您可以在SegmentFilter
子句中使用not
字段,在这种情况下应该具有相同的效果。