C# Google Analytics API BatchRequest-筛选/回调

C# Google Analytics API BatchRequest-筛选/回调,c#,asp.net,google-analytics,google-api,google-analytics-api,C#,Asp.net,Google Analytics,Google Api,Google Analytics Api,我正在尝试提交一个BatchRequest,但不确定如何应用筛选器或如何处理回调 class Program { static void Main(string[] args) { try { new Program().Run().Wait(); } catch (Exception exc) { Console.WriteLine(exc.Messa

我正在尝试提交一个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();
    }
}
  • 如何处理回调并查看返回的数据


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

    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
        });
    
    var req=service.Data.Ga.Get(“Ga:XXXXXX”、“30daysAgo”、“昨天”、“Ga:sessions”);
    req.Filters=“ga:pagePath==/page1.html”;
    请求队列(req,
    (内容、错误、i、消息)=>
    {
    //回调代码
    });
    

    我仍然不确定如何处理回拨。“content”参数以类的形式返回:Google.api.Analytics.v3.DataResource.GaResource.GetRequest

    ,因此我对C#不熟悉,但我确实查看了get方法的。而
    GetRequest
    对象有一个filters属性,您可以设置它

    var request = service.Data.Ga.Get("ga:XXXXXX",
        "30daysAgo", "yesterday", "ga:sessions");
    request.dimensions("ga:pagePath");
    request.filters("ga:pagePath==/page1.html");
    
    我鼓励您也查看完整的参数集

    我可以想象回调方法中的content对象将与


    我希望这能有所帮助。

    我终于能够让它工作了

    以下是一个向Analytics API提交BatchRequest的工作.Net示例,供将来参考

    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();
        }
    }
    
    类程序
    {
    静态void Main(字符串[]参数)
    {
    尝试
    {
    新程序().Run().Wait();
    }
    捕获(异常exc)
    {
    控制台写入线(exc.Message);
    }
    Console.Read();
    }
    专用异步任务运行()
    {
    var privatekey=“私钥”;
    var accountEmailAddress=“电子邮件地址”;
    var credentials=新的ServiceAccountCredential(
    新ServiceAccountCredential.初始值设定项(accountEmailAddress)
    {
    Scopes=new[]{AnalyticsService.Scope.AnalyticsReadonly}
    }.来自privatekey(privatekey));
    var服务=新的AnalyticsService(新的BaseClientService.Initializer()
    {
    HttpClientInitializer=凭证,
    ApplicationName=“测试”
    });
    var请求=新批处理请求(服务);
    BatchRequest.OnResponse回调=(内容、错误、i、消息)=>
    {
    if(错误!=null)
    {
    WriteLine(“错误:{0}”,Error.Message);
    }
    其他的
    {
    如果(content.Rows!=null)
    {
    foreach(content.Rows中的变量项)
    {
    foreach(项目中的var项目1)
    {
    控制台写入线(第1项);
    }
    }
    }
    其他的
    {
    控制台。写入线(“未找到”);
    }
    }
    };
    int计数器=0;
    while(计数器<5)
    {
    var req=service.Data.Ga.Get(“Ga:XXXXX”、“30daysAgo”、“昨天”、“Ga:sessions”);
    req.Filters=“ga:pagePath==/page”+计数器+”.html”;
    队列(req,回调);
    计数器++;
    }
    等待请求。ExecuteAsync();
    }
    }
    
    这是常规get请求的正确格式,但不适用于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);
    
            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();
        }
    }