使用ga:browserVersion段过滤器排除流量触发GA API V4 HttpError 400
问题描述
编写Python脚本拉取Google Analytics(GA)某视图的年初至今(YTD)数据,该视图已过滤机器人流量,但2022年4月仍有大量此类流量残留。尝试通过ga:browserVersion维度的段过滤器排除该流量时,触发了HttpError 400错误。
错误信息
return (<HttpError 400 when requesting https://analyticsreporting.googleapis.com/v4/reports:batchGet?alt=json returned "Invalid JSON payload received. Unknown name "not" at 'report_requests[0].segments[0].dynamic_segment.user_segment.segment_filters[0].simple_segment.or_filters_for_segment.segment_filter_clauses[0].dimension_filter': Cannot find field.", 'description': 'Invalid JSON payload received. Unknown name "not" at 'report_requests[0].segments[0].dynamic_segment.user_segment.segment_filters[0].simple_segment.or_filters_for_segment.segment_filter_clauses[0].dimension_filter': Cannot find field.'> )
相关代码
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()
解决方案
- GA Reporting API V4的维度过滤器中不存在
not字段,要实现取反逻辑,需将not:True替换为negation:True。 - 同时,
orFiltersForSegment要求是数组(列表)类型,当前代码中它是一个字典,不符合API格式规范,需调整为数组包裹的结构。
修正后的segments部分代码如下:
'segments':[{ 'dynamicSegment': { 'name': 'Apr Bot Traffic', 'userSegment': { 'segmentFilters':[ { 'simpleSegment': { 'orFiltersForSegment': [ { 'segmentFilterClauses': [ { 'dimensionFilter': { 'dimensionName':'ga:browserVersion', 'negation': True, 'operator':'EXACT', 'expressions':'80.0.3987.163' } }] }] } }] } } }]
内容的提问来源于stack exchange,提问作者Akash Agrawal
相关产品推荐
相关产品推荐

