我们对Google Analytics核心报告API中不同页面的统计数据感兴趣。我发现同时查询多个页面统计信息的唯一方法是创建一个过滤器,如下所示:
ga:pagePath==page?id=a,ga:pagePath==page?id=b,ga:pagePath==page?id=c
这个get在get查询的filter参数中进行了转义。
然而,当GET查询超过2000个字符时,我会得到以下响应:
414. That’s an error.
The requested URL /analytics/v3/data/ga... is too large to process. That’s all we know.
注意,就像在示例调用中一样,每页唯一不同的部分是pagePath
中的GET参数,但我们必须对指定度量(pagePath
)和始终相同的路径部分的新过滤器进行OR运算。
有没有任何方法可以指定大量不同的页面进行查询,而不会在GET查询中达到这个限制(我找不到任何用于执行POST请求的文档)?或者,除了创建每个查询最多X个不同页面的批次并在我端将其相加之外,还有其他选择吗?
与其将ga:pagePath用作过滤器的一部分,不如将其用作维度。通过这种方式,每个查询最多可以获得10000行,并分页以获得所有结果。然后在客户端解析结果以获得所需内容。此外,如果可能的话,可以根据您的网站结构或页面名称使用筛选器来缩小结果范围。
我正在分享一个示例代码,您可以通过Items PerPage 的帮助获取超过10000条记录数据
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多个字符