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

时间:2012-02-20 18:24:58

标签: c# asp.net oauth google-analytics-api

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

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

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

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:16)

制作您的应用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_ID YOUR_CALL_BACK_URL 更改为相关值。

重要的是包含 access_type =离线

按“授予访问权限”,这将重定向到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_CODE YOUR_APP_ID YOUR_APPS_SECRET_CODE YOUR_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

并将属性维度从List<system.string>更改为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<WebServerClient>(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;
        }
    }

答案 1 :(得分:4)

伟大的答案伊恩,它帮助我走向正确的方向比我在网上找到的任何其他答案更多。必须在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");

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

答案 2 :(得分:1)

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

希望这有帮助。

答案 3 :(得分:0)

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

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