Google 分析 API BatchRequest - Filtering/Callback

Google Analytics API BatchRequest - Filtering/Callback

我正在尝试提交 BatchRequest,但不确定如何应用过滤器或如何处理回调。

class Program
{
    static void Main(string[] args)
    {
        try
        {
            new Program().Run().Wait();
        }
        catch (Exception exc)
        {
            Console.WriteLine(exc.Message);
        }
        Console.Read();
    }

    private async Task Run()
    {
        var privatekey = "private key";
        var accountEmailAddress = "email address";

        var credentials = new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer(accountEmailAddress) {
                Scopes = new[] { AnalyticsService.Scope.AnalyticsReadonly }
            }.FromPrivateKey(privatekey));

        var service = new AnalyticsService(new BaseClientService.Initializer() {
            HttpClientInitializer = credentials,
            ApplicationName = "Test"
        });

        var request = new BatchRequest(service);

        request.Queue<DataResource.GaResource.GetRequest>(service.Data.Ga.Get("ga:XXXXXX", "30daysAgo", "yesterday", "ga:sessions"),
            (content, error, i, message) =>
            {
                //callback code
            });

        await request.ExecuteAsync();
    }
}

两个问题:

  1. 如何将以下过滤器应用于请求?

    ga:pagePath==/page1.html
    
  2. 如何处理回调和查看返回的数据?


更新

我相信我已经使用以下代码解决了过滤器问题:

var req = service.Data.Ga.Get("ga:XXXXXX", "30daysAgo", "yesterday", "ga:sessions");
req.Filters = "ga:pagePath==/page1.html";

request.Queue<DataResource.GaResource.GetRequest>(req,
    (content, error, i, message) =>
    {
        //callback code
    });

我仍然不确定如何处理回调。 "content" 参数作为 class 返回:Google.Apis.Analytics.v3.DataResource.GaResource.GetRequest

所以我不熟悉 C#,但我确实查看了 source code 的 get 方法。 GetRequest 对象有一个过滤器 属性 可以设置。

var request = service.Data.Ga.Get("ga:XXXXXX",
    "30daysAgo", "yesterday", "ga:sessions");
request.dimensions("ga:pagePath");
request.filters("ga:pagePath==/page1.html");

我鼓励您也查看 Core Reporting API reference 以获得完整的参数集。

我想回调方法中的内容对象将对应于 GaData response object

希望对大家有所帮助。

我终于可以正常工作了。

为了供任何人日后参考,这里有一个向 Analytics 提交 BatchRequest 的有效 .Net 示例 API。

class Program
{
    static void Main(string[] args)
    {
        try
        {
            new Program().Run().Wait();
        }
        catch (Exception exc)
        {
            Console.WriteLine(exc.Message);
        }
        Console.Read();
    }

    private async Task Run()
    {
        var privatekey = "private key";
        var accountEmailAddress = "email address";

        var credentials = new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer(accountEmailAddress)
            {
                Scopes = new[] { AnalyticsService.Scope.AnalyticsReadonly }
            }.FromPrivateKey(privatekey));

        var service = new AnalyticsService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credentials,
            ApplicationName = "Test"
        });
        var request = new BatchRequest(service);

        BatchRequest.OnResponse<GaData> callback = (content, error, i, message) =>
        {
            if (error != null)
            {
                Console.WriteLine("Error: {0}", error.Message);
            }
            else
            {
                if (content.Rows != null)
                {
                    foreach (var item in content.Rows)
                    {
                        foreach (var item1 in item)
                        {
                            Console.WriteLine(item1);
                        }
                    }
                }
                else
                {
                    Console.WriteLine("Not Found");
                }
            }
        };

        int counter = 0;
        while (counter < 5)
        {
            var req = service.Data.Ga.Get("ga:XXXXX", "30daysAgo", "yesterday", "ga:sessions");
            req.Filters = "ga:pagePath==/page" + counter + ".html";
            request.Queue<GaData>(req, callback);
            counter++;
        }

        await request.ExecuteAsync();
    }
}