使用API​​密钥分析报告v4

我需要在我使用asp.net Web表单(C#)构建的CMS Web应用程序的仪表板页面中集成来自Google Analytics的非常基本的报告。

我记得我能够在2015年使用API​​ V3进行的测试中做到这一点,但是现在,使用V4,我总是会收到一条错误消息,即validation需要OAuth2。

我需要访问我拥有的特定分析帐户,而不是在CMS中导航的用户帐户!

因此,我使用Google API Manager提供的API KEY。 我已经给了API Key所有权限。 API密钥类似于:“d471c3ce04612f143ff0Be319aac2e17d0159add”

这是代码

using Google.Apis.AnalyticsReporting.v4; using Google.Apis.Services; using System; using Google.Apis.AnalyticsReporting.v4.Data; using System.Collections.Generic; using System.Threading.Tasks; using System.IO; using Google.Apis.Auth.OAuth2; using System.Threading; using Google.Apis.Util.Store; using System.Web; public static class GoogleAnalyticsAPI { static string vmcApiKey = "<>"; public static void Test() { AnalyticsReportingService ars = GetService(vmcApiKey); // Create the DateRange object. DateRange dateRange = new DateRange() { StartDate = "2017-01-01", EndDate = "2017-04-28" }; // Create the Metrics object. Metric sessions = new Metric { Expression = "ga:sessions", Alias = "Sessions" }; //Create the Dimensions object. Dimension browser = new Dimension { Name = "ga:browser" }; // Create the ReportRequest object. // Create the ReportRequest object. ReportRequest reportRequest = new ReportRequest { ViewId = "<>", DateRanges = new List() { dateRange }, Dimensions = new List() { browser }, Metrics = new List() { sessions } }; List requests = new List(); requests.Add(reportRequest); // Create the GetReportsRequest object. GetReportsRequest getReport = new GetReportsRequest() { ReportRequests = requests }; // Call the batchGet method. GetReportsResponse response = ars.Reports.BatchGet(getReport).Execute(); } public static AnalyticsReportingService GetService(string apiKey) { try { if(string.IsNullOrEmpty(apiKey)) throw new ArgumentNullException("api Key"); return new AnalyticsReportingService(new BaseClientService.Initializer() { ApiKey = apiKey, ApplicationName = "AnalyticsReporting API key example", }); } catch(Exception ex) { throw new Exception("Failed to create new AnalyticsReporting Service", ex); } } 

在Test()方法的最后一行, ars.Reports.BatchGet(getReport).Execute(); 我收到错误:

Google.Apis.Requests.RequestError请求缺少必需的身份validation凭据。 预期的OAuth 2访问令牌,登录cookie或其他有效的身份validation凭据。

但是再次使用OAUTH2身份validation我访问用户数据并不是我想要的。 我需要访问我拥有的特定帐户 ,由浏览CMS的用户独立访问

API密钥仅用于访问公共数据,这意味着您只能将其与元数据api一起使用 。

Google Analytics数据是用户拥有的私人数据。 由于这是您尝试访问的自己的数据,因此您应该创建一个服务帐户。 服务帐户是预先授权的。 转到Google开发人员控制台并创建服务帐户凭据 。 然后获取服务帐户电子邮件地址,并将其作为用户添加到Google Analytics分析网站管理部分的ACCOUNT级别。 它必须是ACCOUNT级别。 您现在已授权服务帐户访问该帐户的数据。

服务帐户validation

 // Copyright 2017 DAIMTO : www.daimto.com // // Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on // an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the // specific language governing permissions and limitations under the License. //------------------------------------------------------------------------------ //  // This code was generated by DAIMTO-Google-apis-Sample-generator 1.0.0 // Template File Name: ServiceAccount.tt // Build date: 01/02/2017 22:31:50 // C# generater version: 1.0.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. //  //------------------------------------------------------------------------------ // About // // Unoffical sample for the AnalyticsReporting v4 API for C#. // This sample is designed to be used with the Google .Net client library. (https://github.com/google/google-api-dotnet-client) // // API Description: Accesses Analytics report data. // API Documentation Link https://developers.google.com/analytics/devguides/reporting/core/v4/ // // Discovery Doc https://www.googleapis.com/discovery/v1/apis/AnalyticsReporting/v4/rest // //------------------------------------------------------------------------------ // Installation // // This sample code uses the Google .Net client library // // NuGet package: // // Location: https://www.nuget.org/packages/Google.Apis.AnalyticsReporting.v4/ // Install Command: PM> Install-Package Google.Apis.AnalyticsReporting.v4 // //------------------------------------------------------------------------------ using Google.Apis.AnalyticsReporting.v4 using Google.Apis.Auth.OAuth2; using Google.Apis.Services; using System; using System.IO; using System.Security.Cryptography.X509Certificates; namespace GoogleSamplecSharpSample.AnalyticsReportingv4.Auth { public class static ServiceAccountExample { ///  /// Authenticating to Google using a Service account /// Documentation: https://developers.google.com/accounts/docs/OAuth2#serviceaccount ///  /// From Google Developer console https://console.developers.google.com /// Location of the .p12 or Json Service account key file downloaded from Google Developer console https://console.developers.google.com /// AnalyticsService used to make requests against the Analytics API public static AnalyticsReportingService AuthenticateServiceAccount(string serviceAccountEmail, string serviceAccountCredentialFilePath) { try { if (string.IsNullOrEmpty(serviceAccountCredentialFilePath)) throw new Exception("Path to the service account credentials file is required."); if (!File.Exists(serviceAccountCredentialFilePath)) throw new Exception("The service account credentials file does not exist at: " + serviceAccountCredentialFilePath); if (string.IsNullOrEmpty(serviceAccountEmail)) throw new Exception("ServiceAccountEmail is required."); // These are the scopes of permissions you need. It is best to request only what you need and not all of them string[] scopes = new string[] { AnalyticsReportingService.Scope.Analytics }; // View your Google Analytics data // For Json file if (Path.GetExtension(serviceAccountCredentialFilePath).ToLower() == ".json") { GoogleCredential credential; using (var stream = new FileStream(serviceAccountCredentialFilePath, FileMode.Open, FileAccess.Read)) { credential = GoogleCredential.FromStream(stream) .CreateScoped(scopes); } // Create the Analytics service. return new AnalyticsReportingService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = "AnalyticsReporting Service account Authentication Sample", }); } else if (Path.GetExtension(serviceAccountCredentialFilePath).ToLower() == ".p12") { // If its a P12 file var certificate = new X509Certificate2(serviceAccountCredentialFilePath, "notasecret", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable); var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail) { Scopes = scopes }.FromCertificate(certificate)); // Create the AnalyticsReporting service. return new AnalyticsReportingService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = "AnalyticsReporting Authentication Sample", }); } else { throw new Exception("Unsupported Service accounts credentials."); } } catch (Exception ex) { Console.WriteLine("Create service account AnalyticsReportingService failed" + ex.Message); throw new Exception("CreateServiceAccountAnalyticsReportingFailed", ex); } } } } 

从我的Google API 报告API API示例项目中删除了代码

创建服务后,您应该可以使用C#的示例页面上的代码

我有一个关于V3的服务帐户的旧教程。 Google Analytics身份validation