0

我们对来自 Google Analytics 核心报告 API 的不同页面的统计数据感兴趣。我发现同时查询多个页面的统计信息的唯一方法是创建一个过滤器,如下所示:

ga:pagePath==page?id=a,ga:pagePath==page?id=b,ga:pagePath==page?id=c

这会在 GET 查询的过滤器参数中转义。

但是,当 GET 查询超过 2000 个字符时,我得到以下响应:

414. That’s an error.

The requested URL /analytics/v3/data/ga... is too large to process. That’s all we know.

请注意,就像在示例调用中一样,每页唯一不同的部分是 GET 参数pagePath,但我们必须 OR 一个新的过滤器,指定度量 ( pagePath) 以及始终相同的路径部分。

有没有办法指定大量不同的页面进行查询,而不会在 GET 查询中达到这个限制(我找不到任何用于执行 POST 请求的文档)?或者是否有替代方法可以为每个查询创建最多 X 个不同页面的批次并将它们添加到我的端?

4

2 回答 2

2

而不是使用 ga:pagePath 作为过滤器的一部分,您应该将其用作维度。通过这种方式,每个查询最多可以获得 10,000 行,并分页以获取所有结果。然后解析结果客户端以获得您需要的内容。此外,如果可能,请根据您的站点结构或页面名称使用过滤器来缩小结果范围。

于 2013-08-14T18:01:38.333 回答
0

我正在分享一个示例代码,您可以在其中通过 Items PerPage 的帮助获取超过 10,000 条记录数据

private void GetDataofPpcInfo(DateTime dtStartDate, DateTime dtEndDate, AnalyticsService gas, List<PpcReportData> lstPpcReportData, string strProfileID)
        {
            int intStartIndex = 1;
            int intIndexCnt = 0;
            int intMaxRecords = 10000;

            var metrics = "ga:impressions,ga:adClicks,ga:adCost,ga:goalCompletionsAll,ga:CPC,ga:visits";
            var r = gas.Data.Ga.Get("ga:" + strProfileID, dtStartDate.ToString("yyyy-MM-dd"), dtEndDate.ToString("yyyy-MM-dd"),
                                    metrics);
            r.Dimensions = "ga:campaign,ga:keyword,ga:adGroup,ga:source,ga:isMobile,ga:date";
            r.MaxResults = 10000;            
            r.Filters = "ga:medium==cpc;ga:campaign!=(not set)";

            while (true)
            {
                r.StartIndex = intStartIndex;
                var dimensionOneData = r.Fetch();
                dimensionOneData.ItemsPerPage = intMaxRecords;

                if (dimensionOneData != null && dimensionOneData.Rows != null)
                {
                    var enUS = new CultureInfo("en-US");
                    intIndexCnt++;

                    foreach (var lstFirst in dimensionOneData.Rows)
                    {
                        var objPPCReportData = new PpcReportData();

                        objPPCReportData.Campaign = lstFirst[dimensionOneData.ColumnHeaders.IndexOf(dimensionOneData.ColumnHeaders.FirstOrDefault(h => h.Name == "ga:campaign"))];
                        objPPCReportData.Keywords = lstFirst[dimensionOneData.ColumnHeaders.IndexOf(dimensionOneData.ColumnHeaders.FirstOrDefault(h => h.Name == "ga:keyword"))];                       

                        lstPpcReportData.Add(objPPCReportData);
                    }
                    intStartIndex = intIndexCnt * intMaxRecords + 1;
                }
                else break;
            }
        }

只有一件事是您的查询长度不应超过大约 2000 个奇数字符

于 2013-08-16T13:31:43.403 回答