從this answer廣泛借鑑,我想出瞭解決的辦法是這樣的:
Imports System.Security.Cryptography.X509Certificates
Imports Google.Apis.Analytics.v3
Imports Google.Apis.Analytics.v3.Data
Imports Google.Apis.Authentication.OAuth2
Imports Google.Apis.Authentication.OAuth2.DotNetOpenAuth
Imports System.Security.Cryptography
Public Class GoogleAnalytics
Private _profileId As String
Private _service As AnalyticsService
''' <summary>
''' Creates an instance of the Google Analytics interface
''' </summary>
''' <param name="profileId">The Google Analytics profile ID, in the form "ga:123456789". This is *not* the same as the ID number used in the GA JavaScript to initialize the tracking! The number you want is in Google Analytics > Admin > (your profile) > Profile Settings.</param>
''' <param name="serviceAccountId">The e-mail address of the Service Account that will access the API. These accounts can be generated from the Google API Console and then authorized by adding the e-mail address to the list of authorized users in Google Analytics.</param>
''' <param name="privateKeyPath">The path to the private-key (.p12) file from Google.</param>
''' <param name="certificatePassword">The password for the private key. Probably "notasecret".</param>
''' <remarks>Once created, this GoogleAnalytics object can be used to make an arbitrary number of requests.</remarks>
Public Sub New(profileId As String, serviceAccountId As String, privateKeyPath As String, certificatePassword As String)
Dim cert As X509Certificate2 = New X509Certificate2(privateKeyPath, certificatePassword, X509KeyStorageFlags.Exportable Or X509KeyStorageFlags.MachineKeySet)
Dim client As AssertionFlowClient = New AssertionFlowClient(GoogleAuthenticationServer.Description, cert) With {.Scope = "https://www.googleapis.com/auth/analytics.readonly",
.ServiceAccountId = serviceAccountId}
Dim authenticator As OAuth2Authenticator(Of AssertionFlowClient) = New OAuth2Authenticator(Of AssertionFlowClient)(client, AddressOf AssertionFlowClient.GetState)
_service = New AnalyticsService(authenticator)
_profileId = profileId
End Sub
Public Function GetData(startDate As String, endDate As String, metrics As String, dimensions As String, Optional filters As String = Nothing) As GaData
Dim request As DataResource.GaResource.GetRequest = _service.Data.Ga.Get(_profileId, startDate, endDate, metrics)
request.Dimensions = dimensions
If filters IsNot Nothing Then
request.Filters = filters
End If
Return request.Fetch()
End Function
End Class
這是一個獨立的類,可以使用,如下所示:
Dim analytics As New GoogleAnalytics("ga:12345678", "[email protected]", "C:\privatekey.p12", "notasecret")
Dim data as GaData = analytics.GetData(DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd"),
DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"),
"ga:totalEvents",
"ga:eventCategory,ga:eventAction")
我發現這個窪最大的困惑是配置文件ID。這是而不是您傳遞給Google的Javascript跟蹤代碼的ID號;相反,這是您在Google Analytics>管理>(您的個人資料)>配置文件設置中找到的號碼。希望這可以幫助別人!