服务帐户Google Analytics OAuth AccessType =离线C#

我已获得可访问Google Analytics帐户的凭据,

我打算使用Analytics Core Reporting API http://code.google.com/apis/analytics/docs/gdata/home.html

我找到了使用用户名/密码调用setUserCredentials的示例,但看到这些注释不太安全/请求限制较低(并且在最新客户端中不存在)。

此外,我似乎使用oauth的示例,但需要用户交互并授予用户谷歌帐户的访问权限。

但是,我希望运行一项不需要任何用户交互的服务,并连接到预定义的谷歌帐户(与查看它的用户无关)。

然后,我可以将结果存储在数据库中,最终用户可以从数据库中查询结果。

我第一次登录时看到过有关使用AccessType = Offline的信息,然后返回访问令牌和refreshtoken。 http://code.google.com/apis/accounts/docs/OAuth2WebServer.html#offline

但在我的示例中,最终用户永远不会登录到该应用程序。 我可以有一个单独的管理应用程序获取刷新令牌,并将刷新令牌存储在配置/查找表中吗? 然后,主应用程序可以使用从配置/查找表中提取的刷新令牌,并获取访问令牌以便能够查询Google Analytics帐户。

我正在寻找一个使用AccessType = Offline的C#示例,并分离获取刷新令牌并使用刷新令牌获取访问令牌以查询Google Analytics(分析)帐户。

创建您的应用https://code.google.com/apis/console/

对于您的应用,请启用对Google Analytics的访问权限,并为您的网站创建OAuth 2.0客户端ID。

浏览到:

https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=YOUR_APP_ID.apps.googleusercontent.com&access_type=offline&scope=https://www.googleapis.com/auth/analytics.readonly&redirect_uri=HTTP://YOUR_CALL_BACK_URL 

已将YOUR_APP_IDYOUR_CALL_BACK_URL更改为相关值。

重要的是包括access_type = offline

按Grant Access,这将重定向到HTTP://YOUR_CALL_BACK_URL?code=THIS_IS_YOUR_CODE 。 复制URL中的代码。

使用代码,使用CMD提示请求刷新令牌。

 curl -d "code=THIS_IS_YOUR_CODE&client_id=YOUR_APP_ID.apps.googleusercontent.com&client_secret=YOUR_APPS_SECRET_CODE&redirect_uri=HTTP://YOUR_CALL_BACK_URL&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token 

已将 THIS_IS_YOUR_CODEYOUR_APP_IDYOUR_APPS_SECRET_CODEYOUR_CALL_BACK_URL更改为相关值。

记录返回的refresh_token

下载最新版本的Core Reporting V3.0 .net库http://code.google.com/p/google-api-dotnet-client/wiki/Downloads

当前版本的Google.Apis.Analytics.v3.cs中存在一个错误,要将此文件中的代码复制到您的本地解决方案(并且不要引用Google.Apis.Analytics.v3.bin) http: //code.google.com/p/google-api-dotnet-client/source/browse/Services/Google.Apis.Analytics.v3.cs?repo=samples&name=20111123-1.1.4344-beta

并将属性Dimensions从List更改为string

或者你会得到像我这样的错误,这个人做了http://www.evolutiadesign.co.uk/blog/using-the-google-analytics-api-with-c-shar/

然后,您可以使用刷新令牌,在无需用户交互的情况下为您生成访问令牌,并使用访问令牌针对Google Analytics运行报告。

 using System; using DotNetOpenAuth.OAuth2; using Google.Apis.Authentication.OAuth2; using AnalyticsService = Google.Apis.Analytics.v3.AnalyticsService; class Program { public static void Main() { var client = new WebServerClient(GoogleAuthenticationServer.Description, "YOUR_APP_ID.apps.googleusercontent.com", "YOUR_APPS_SECRET_CODE"); var auth = new OAuth2Authenticator(client, Authenticate); var asv = new AnalyticsService(auth); var request = asv.Report.Get("2012-02-20", "2012-01-01", "ga:visitors", "ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID"); request.Dimensions = "ga:pagePath"; request.Sort = "-ga:visitors"; request.MaxResults = 5; var report = request.Fetch(); Console.ReadLine(); } private static IAuthorizationState Authenticate(WebServerClient client) { IAuthorizationState state = new AuthorizationState(new string[]{}) { RefreshToken = "REFRESH_TOKEN" }; client.RefreshToken(state); return state; } } 

伟大的答案伊恩,它帮助我走向正确的方向比我在网上找到的任何其他答案更多。 必须在AnalyticsService对象中更改某些内容,因为该行:

 var request = asv.Report.Get("2012-02-20", "2012-01-01", "ga:visitors", "ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID"); 

不适合我,我不得不使用以下内容:

 var request = asv.Data.Ga.Get("ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID", "2012-01-01", "2012-02-20", "ga:visitors"); 

希望这会帮助其他人,比如你的回答对我有帮助。 谢谢!

Ian的回答帮了我很多,但是我一直在运行curl命令时出错。 进行了一些调查,发现通过访问https://code.google.com/oauthplayground/并检查oAuth配置设置,可以更轻松地获取访问代码和刷新令牌的步骤。 页面右上角有一个设置按钮。 选择“使用您自己的OAuth凭据”。 您可以从此处获取访问代码并请求刷新令牌。

希望这可以帮助。

您可以从OAuth Playground手动获取刷新令牌。 如果您需要像我一样的服务帐户刷新令牌,请确保您

  1. 单击右侧的设置。
  2. 选中使用您自己的OAuth凭据
  3. 填写您的客户ID和密码
  4. 关闭设置
  5. 单击步骤2中的“ 刷新”按钮
  6. 然后保存刷新令牌以在您的应用中使用