通过Python中的Google AnalyticsAPI中的自定义维度进行正则表达式过滤

时间:2017-12-06 20:26:52

标签: python api google-analytics google-analytics-api

我在Python 2.7中查询Google Analytic API。以下是两个代码示例。第一个工作,但不涉及我想要做的过滤。第二块代码不起作用,但表示我尝试根据自定义GA维度的内容过滤我的结果,在这种情况下,页面是否包含自定义GA标记。

这是我查询GA API的方法,但它不涉及我需要的过滤:

import datetime
import time
from datetime import timedelta

# get start and end dates in correct format
start_date = d1.strftime('%Y-%m-%d')
end_date   = d2.strftime('%Y-%m-%d')

# Create ReportRequest object
response = service.reports().batchGet(
    body={
        'reportRequests': [
            {
                'viewId': 'ga:32981293',

                'dateRanges': [{'startDate': start_date, 'endDate': end_date}],

                'metrics': [{'expression': 'ga:sessions'},
                            {'expression': 'ga:pageviews'},
                            {'expression': 'ga:users'},
                            {'expression': 'ga:exits'},
                            {'expression': 'ga:avgSessionDuration'},
                            {'expression': 'ga:avgTimeonPage'},
                            {'expression': 'ga:sessionsPerUser'},
                            {'expression': 'ga:percentNewSessions'},
                            {'expression': 'ga:bounceRate'}],

                'dimensions': [{"name": "ga:pagePath"}],

                'orderBys': [{"fieldName": "ga:pageviews", "sortOrder": "DESCENDING"}],

                'pageSize': 500

            }]
    }
).execute()

所以,上面的内容可以给我一个对象,我的页面路径根据浏览量进行排序,我得到了我要求的相关指标。

我想要做的是添加一个过滤器,以便我只获取包含特定标记的页面路径的此信息。在这种情况下,我有一个名为“新闻页面标签”的自定义GA维度,我想仅获取具有特定新闻页面标记的页面路径的信息。

这是对此的一次尝试,但不起作用。我希望有某种语法问题,有人可以帮助我清理。

import datetime
import time
from datetime import timedelta

# get start and end dates in correct format
start_date = d1.strftime('%Y-%m-%d')
end_date   = d2.strftime('%Y-%m-%d')

cur_tag = 'example string'

# Create ReportRequest object
response = service.reports().batchGet(
    body={
        'reportRequests': [
            {
                'viewId': 'ga:32981293',

                'dateRanges': [{'startDate': start_date, 'endDate': end_date}],

                'metrics': [{'expression': 'ga:sessions'},
                            {'expression': 'ga:pageviews'},
                            {'expression': 'ga:users'},
                            {'expression': 'ga:exits'},
                            {'expression': 'ga:avgSessionDuration'},
                            {'expression': 'ga:avgTimeonPage'},
                            {'expression': 'ga:sessionsPerUser'},
                            {'expression': 'ga:percentNewSessions'},
                            {'expression': 'ga:bounceRate'}],

                'dimensions': [{"name": "ga:pagePath"},
                               {"name": "ga:newsPageTags"}],

                'orderBys': [{"fieldName": "ga:pageviews", "sortOrder": "DESCENDING"}],

                'dimensionFilterClauses': [
                            {"filters": [{"dimensionName": "ga:newsPageTags",
                                          "operator": "REGEXP",
                                          "expressions": [cur_tag]}]
                            }
                                        ],  

                'pageSize': 500

            }]
    }
).execute()

因此,在上文中,我添加了“ga:newsPageTags”作为第二个维度,旨在过滤页面,以便我只获得将“cur_tag”作为其新闻页面标记之一的页面的指标。

使用过滤器运行第二块代码会产生以下错误:

追踪(最近一次通话):   文件“”,第31行,in   在positional_wrapper中输入第133行的文件“build / bdist.macosx-10.7-x86_64 / egg / oauth2client / _helpers.py”   文件“build / bdist.macosx-10.7-x86_64 / egg / googleapiclient / http.py”,第842行,执行 googleapiclient.errors.HttpError:https://analyticsreporting.googleapis.com/v4/reports:batgetGet?val = json返回“Unknown dimension(s):ga:newsPageTags 有关详细信息,请参阅https://developers.google.com/analytics/devguides/reporting/core/dimsmets。“>

显然我没有正确指定我的自定义维度,我希望有一种方法可以根据自定义标记查询GA API进行过滤,虽然我没有运气找到好的文档来帮助我解决这个问题。

谢谢!

1 个答案:

答案 0 :(得分:2)

API中的自定义维度由数字而不是名称指定。例如,您可以按ga:dimension15而不是ga:newsPageTags

进行过滤

https://developers.google.com/analytics/devguides/reporting/core/dimsmets#view=detail&group=custom_variables_or_columns