24

我試圖從我們的谷歌分析實例中獲取一些數據,並且想使用.NET的Analytics Reporting API V4客戶端庫(https://developers.google.com/api-client-library/dotnet/apis/analyticsreporting/v4)以便我可以烘烤將這些數據中的一部分放入我們建立的管理網站。我無法找到使用此代碼的任何示例,並且文檔似乎非常稀疏。我想使用服務帳戶進行授權,因爲我們只需查看與我們控制的分析帳戶相關聯的數據。分析報告API V4客戶端庫用於.NET

如果有人可以提供一些示例代碼或點我的方向是正確使用.NET API來了解一些基本的報告數據,這將是極大的讚賞

+1

的[客戶端庫docuementation(https://developers.google.com/api-client-library/dotnet/get_started)適用於所有谷歌的API。至於提出特定請求,您可以使用各種語言查看[V4 API示例](https://developers.google.com/analytics/devguides/reporting/core/v4/samples),並將其映射到dot net。 – Matt

+3

我終於弄清楚如何使用.net客戶端庫發出請求,但這絕對不是直觀的。我會張貼一些示例代碼,如果我有一些額外的時間 – Ben

+0

會很好,如果你發現時間:) –

回答

43

在C中調用的谷歌Analytics(分析)報告API#是不是特別很困難,但是所有必要的步驟似乎都沒有在Google Analyics API文檔中清晰地概述。我會盡力在這裏列出他們。雖然YMMV,我相信這些步驟是正確的截至2016年7月20日。

您可以從創建一個新的C#項目開始。我們將製作一個控制檯應用程序來測試名爲GoogleAnalyticsApiConsole。項目創建完成後,我們將使用NuGet程序包管理器控制檯(可在Visual Studio 2015的「工具」菜單下找到)添加對Google Analytics Reporting API V4 Client Library for .NET的引用。在PM>迅速火起來的控制檯,併發出以下命令:

PM> Install-Package Google.Apis.AnalyticsReporting.v4

安裝該軟件包將下載到與其他一些依賴沿致電谷歌分析報告的Web服務所需的客戶端庫。

爲了調用Web服務,您需要爲應用程序設置OAuth 2.0訪問權限。此設置can be found here的文檔,但我會在下面總結:

  1. 登錄到谷歌雲平臺控制檯https://console.cloud.google.com/。請務必使用有權訪問您嘗試使用報告API查詢的Google Analytics帳戶的帳戶進行登錄。

  2. 點擊谷歌雲平臺菜單和選擇API管理器

Google Cloud Platform API Manager

  • 在左手側,單擊憑據然後創建一個名爲Google Analytics API Console新項目。給它一些時間來創建新項目。

  • 創建項目後,再次單擊證書如果沒有被選中,然後單擊右側面板上的的OAuth同意畫面鏈接。將顯示給用戶的產品名稱設置爲Google Analytics API Console,然後單擊保存。

  • 點擊憑據一遍,然後單擊創建憑證,並選擇OAuth用戶端ID。選擇其他應用型,然後輸入Google Analytics API Console名稱,然後單擊創建

  • 創建證書後,您將看到一個客戶端ID和一個客戶端密鑰。您可以關閉對話窗口。

  • 現在,在證書你應該看到下OAuth 2.0用戶端編號的條目。單擊該條目最右側的下載圖標以下載client_secret.json文件(該文件將具有更長的名稱)。一旦下載該文件並將其重命名爲client_secret.json,將該文件添加到您的項目的根級別。

  • Google Cloud Platform API Credentials

  • 既然的OAuth 2.0憑證已經被創建,就需要使其能夠調用報告API。選擇概述並確保谷歌API被選中在右側面板。在搜索框中輸入Reporting,然後從列表中選擇Analytics Reporting API V4。在下一個屏幕上,單擊啓用。一旦啓用了此API,您應該可以在右側面板的啓用API列表下看到它。
  • Google Cloud Platform Enabled Analytics Reporting

    現在,我們已經創建了項目,並創建了我們的OAuth 2.0憑證,它是時間打電話報告API V4。下面列出的代碼將使用Google API和client_secret.json文件創建一個Google.Apis.Auth.OAuth2.UserCredential來查詢報告API,以查看View的給定日期範圍之間的所有會話。代碼改編自Java example here

    之前執行的代碼,一定要在client_secret.json文件中設置的生成操作內容複製到輸出目錄設置複製如果新。還有兩個變量需要適當設置。首先,在GetCredential()方法中,將loginEmailAddress值設置爲用於創建OAuth 2.0憑據的電子郵件地址。然後,在Main方法中,請確保將變量中的ViewId設置爲您要使用報告API查詢的視圖。要找到ViewId,請登錄Google Analytics並選擇Admin選項卡。從那裏,在最右側的查看下拉列表中選擇要查詢的查看,然後選擇查看設置。該查看ID將在基本設置顯示。

    執行代碼中的第一次,它會彈出一個網頁,詢問您是否要允許Google Analytics API Console能夠訪問的API數據。選擇允許繼續。從那時起,該許可將存儲在GoogleAnalyticsApiConsoleFileDataStore中。如果該文件被刪除,則需要再次授予權限。該文件可以在%APPDATA%\GoogleAnalyicsApiConsole目錄中找到。

    Google API Permission OAuth 2.0

    請注意,我beleive此方案將滿足OP的需求。如果這個應用程序要分發給客戶,那麼最有可能需要一個不同的OAuth 2.0方案。

    下面是代碼:

    using System; 
    using System.Collections.Generic; 
    using System.IO; 
    using System.Linq; 
    using System.Threading; 
    using System.Threading.Tasks; 
    using Google.Apis.AnalyticsReporting.v4; 
    using Google.Apis.AnalyticsReporting.v4.Data; 
    using Google.Apis.Auth.OAuth2; 
    using Google.Apis.Services; 
    using Google.Apis.Util.Store; 
    
    namespace GoogleAnalyticsApiConsole 
    { 
        class Program 
        { 
         static void Main(string[] args) 
         { 
          try 
          { 
           var credential = GetCredential().Result; 
           using(var svc = new AnalyticsReportingService(
            new BaseClientService.Initializer 
            { 
             HttpClientInitializer = credential, 
             ApplicationName = "Google Analytics API Console" 
            })) 
           {  
            var dateRange = new DateRange 
            { 
             StartDate = "2016-05-01", 
             EndDate = "2016-05-31" 
            }; 
            var sessions = new Metric 
            { 
             Expression = "ga:sessions", 
             Alias = "Sessions" 
            }; 
            var date = new Dimension { Name = "ga:date" }; 
    
            var reportRequest = new ReportRequest 
            { 
             DateRanges = new List<DateRange> { dateRange }, 
             Dimensions = new List<Dimension> { date }, 
             Metrics = new List<Metric> { sessions }, 
             ViewId = "<<your view id>>" 
            }; 
            var getReportsRequest = new GetReportsRequest { 
             ReportRequests = new List<ReportRequest> { reportRequest } }; 
            var batchRequest = svc.Reports.BatchGet(getReportsRequest); 
            var response = batchRequest.Execute(); 
            foreach (var x in response.Reports.First().Data.Rows) 
            { 
             Console.WriteLine(string.Join(", ", x.Dimensions) + 
             " " + string.Join(", ", x.Metrics.First().Values)); 
            } 
           } 
          } 
          catch (Exception ex) 
          { 
           Console.WriteLine(ex.ToString()); 
          } 
         } 
    
         static async Task<UserCredential> GetCredential() 
         { 
          using (var stream = new FileStream("client_secret.json", 
           FileMode.Open, FileAccess.Read)) 
          { 
           const string loginEmailAddress = "<<your account email address>>"; 
           return await GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets, 
            new[] { AnalyticsReportingService.Scope.Analytics }, 
            loginEmailAddress, CancellationToken.None, 
            new FileDataStore("GoogleAnalyticsApiConsole")); 
          } 
         } 
        } 
    } 
    
    +2

    請注意'AnalyticsReportingService'實現了'IDisposable',並且應該封裝在一個'using'塊中。 – TrueWill

    +0

    當我用這個,一個新的標籤頁谷歌的應用程序的打開(與「開發者信息」的電子郵件一樣的我使用的是谷歌Analytics(分析)的帳戶)請求訪問我的個人Gmail帳戶(我登錄到Chrome瀏覽器as)...爲什麼會發生這種情況? – Daevin

    +0

    @Daevin希望我可以在這裏更有幫助,但我不確定你爲什麼看到這些。您是否可以使用可訪問GA數據的帳戶登錄* Google Cloud Platform Console *?您是否要求訪問除* Analytics Reporting API V4 *以外的任何API? – rsbarro

    4

    我有同樣的感受:谷歌的文檔是相當深入,但在給出如何使用.NET連接明顯的例子非常可怕的。我終於實現

    一個關鍵的事情是,你可以使用的OAuth2憑證或服務帳戶憑據進行連接。如果您擁有Google Analytics帳戶,請使用服務帳戶。如果您需要連接到其他用戶的Google Analytics帳戶,請使用OAuth2。

    似乎有相當的幾個例子在網上如何得到使用的OAuth2憑證Analytics(分析)API的數據,但我擁有我的Analytics帳戶,只是想從中提取數據。我想出瞭如何使用ServiceAccountCredential連接到Analytics Reporting API v4,並且我寫了一個類似堆棧溢出問題的an answer以及所有細節。