【问题标题】:Service Account Google Analytics OAuth AccessType = Offline C#服务帐户 Google Analytics OAuth AccessType = 离线 C#
【发布时间】:2012-03-11 02:29:06
【问题描述】:

我有一个可以访问 Google Analytics 的帐户的凭据,

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

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

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

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

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

我已经看到有关在您首次登录时使用 AccessType = Offline 的信息,然后返回访问令牌和刷新令牌。 http://code.google.com/apis/accounts/docs/OAuth2WebServer.html#offline

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

我正在寻找一个使用 AccessType = Offline 的 C# 示例,并将刷新令牌的获取和使用刷新令牌获取访问令牌以查询谷歌分析帐户分开。

【问题讨论】:

  • 您好,您在哪里可以解决您的问题?

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    Ian 的回答对我帮助很大,但我在运行 curl 命令时一直出错。做了一些研究,发现获取访问代码和刷新令牌的步骤可以通过转到https://code.google.com/oauthplayground/ 并检查您的 oAuth 配置设置来简化。页面右上角有一个设置按钮。选择“使用您自己的 OAuth 凭据”。您可以从这里获取您的访问代码并请求刷新令牌。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      Ian 的答案很好,它比我在网上找到的任何其他答案都更能帮助我朝着正确的方向前进。 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");
      

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

      【讨论】:

        【解决方案4】:

        创建您的应用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 很重要。

        按授予访问权限,这将重定向到 HTTP://YOUR_CALL_BACK_URL?code=THIS_IS_YOUR_CODE。复制网址中的代码。

        通过代码,使用 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<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;
                }
            }
        

        【讨论】:

        • 伊恩,我被困在同样的事情上。你有没有一个可行的、完整的例子?
        • 我想使用你写的代码,但是当我试图编译它时,它失败了。它给了我以下错误:错误 2 参数 1:无法从 'Google.Apis.Authentication.OAuth2.OAuth2Authenticator' 转换为 'Google.Apis.Services.BaseClientService.Initializer' H:\vs12\ ManagementAPI\ManagementAPI\Models\Value.cs 27 44 ManagementAPI
        • 它在以下行失败:var asv = new AnalyticsService(auth);身份验证是这样的: var auth = new OAuth2Authenticator(client, Authenticate); Witch 在第一个语句之前被调用(如上面的代码)
        • 这工作:var auth = new OAuth2Authenticator(client, Authenticate); var initialzr = new Google.Apis.Services.BaseClientService.Initializer(); initialzr.Authenticator = auth; var asv = new Google.Apis.Analytics.v3.AnalyticsService(initialzr);
        • 也可以使用developers.google.com/oauthplayground获取刷新令牌
        猜你喜欢
        • 1970-01-01
        • 2012-11-24
        • 2012-09-30
        • 1970-01-01
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        • 2014-06-24
        • 2013-08-30
        相关资源
        最近更新 更多