执行身份验证请求会返回意外结果:404

时间:2015-06-02 05:07:28

标签: c# .net google-api google-analytics-api google-client-login

我一直在使用Google.GData.AnalyticsGoogle.GData.Client 通过我的网络应用程序中的Google AnalyticsAPI v2检索一些Google Analytics数据。

代码如下:

string username = "abc@gmail.com";
        string password = "myPasswordHere";
        string profileId = "ga:88376970";
        string _from = Convert.ToDateTime(dtpFrom.SelectedDate.Value.ToString()).ToString("yyyy-MM-dd");
       string _to = Convert.ToDateTime(dtpTo.SelectedDate.Value.ToString()).ToString("yyyy-MM-dd");
        AccountQuery AccountsQuery = new AccountQuery();
        service = new AnalyticsService("DoogalAnalytics");
        service.setUserCredentials(username, password);
        try
        {
            DataFeedUrl = "https://www.google.com/analytics/feeds/data";
            DataQuery PageViewQuery = new DataQuery(DataFeedUrl)
            {
                Ids = profileId ,
                Metrics = "ga:pageviews",
                Dimensions = "ga:date",
                Sort = "ga:date",
                GAStartDate = _from,
                GAEndDate = _to
            };
            StringBuilder strData = new StringBuilder();
            int maxValue = 0;
            int today = 0;
            List<int> gList = new List<int>();                
            foreach (DataEntry entry in service.Query(PageViewQuery).Entries)
            {
                var value = entry.Metrics.First().IntegerValue;
                gList.Add(value);
                maxValue = value > maxValue ? value : maxValue;
                today = entry.Metrics.Last().IntegerValue;
                strData.AppendFormat("{0},", value);
            }

        }
        catch (Exception ex)
        {
            Response.Write(ex.Message.ToString());
        }

这个代码工作得非常好,直到大约5天前我在过去7或8个月内一直使用此代码,但现在我突然面临错误

  

执行身份验证请求会返回意外结果:404。

当我搜索谷歌时。 我搜索了很多,但找不到任何解决方案。 任何帮助或指导将不胜感激。

1 个答案:

答案 0 :(得分:1)

已停止/关闭的客户端登录已于April 20 2015开始,可能于2015年5月26日左右完成。您无法再使用Google AnalyticsAPI的客户端登录(登录名和密码),需要切换到Oauth2。您需要更改代码才能使用Oauth2或服务帐户。

最好使用最新版本的客户端库,该库使用的是使用V2的Google Analytics V3。

  

PM> Install-Package Google.Apis.Analytics.v3

如果这是您已拥有的数据,您可能需要考虑服务帐户。通过服务帐户,您可以设置对Google Analytics(分析)帐户的访问权限,并且不需要用户对您的代码进行身份验证。如果这不是您的Google Analytics帐户,但实际上是另一个用户拥有的帐户,则您需要使用Oauth2并请求用户进行身份验证。

我的教程:Google Analytics API Authentication with C#

从本教程上面的教程中删除的代码保持最新,此代码可能不是:

    string[] scopes = new string[] {
            AnalyticsService.Scope.Analytics,  // view and manage your Google Analytics data
            AnalyticsService.Scope.AnalyticsEdit,  // Edit and manage Google Analytics Account
            AnalyticsService.Scope.AnalyticsManageUsers,   // Edit and manage Google Analytics Users
            AnalyticsService.Scope.AnalyticsReadonly};     // View Google Analytics Data

    String CLIENT_ID = "6.apps.googleusercontent.com"; // found in Developer console
    String CLIENT_SECRET = "xxx";// found in Developer console
    // here is where we Request the user to give us access, or use the Refresh Token that was previously stored in %AppData%
    UserCredential credential = 
            GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets { 
                                                           ClientId = CLIENT_ID
                                                           , ClientSecret = CLIENT_SECRET 
                                                           }
                                                        , scopes
                                                        , Environment.UserName
                                                        , CancellationToken.None
                                                        , new FileDataStore("Daimto.GoogleAnalytics.Auth.Store")).Result;

AnalyticsService service = new AnalyticsService(new BaseClientService.Initializer()
            {
             HttpClientInitializer = credential,
             ApplicationName = "Analytics API Sample",
            });

DataResource.GaResource.GetRequest request = service.Data.Ga.Get("ga:8903098", "2014-01-01", "2014-01-01", "ga:sessions");
request.MaxResults = 1000;
GaData result = request.Execute();