【问题标题】:How to use Google Analytics API with 2-legged OAuth (Google Apps for business)?如何将 Google Analytics API 与 2-legged OAuth(Google Apps for business)一起使用?
【发布时间】:2011-09-23 20:30:41
【问题描述】:

我想为我工作的企业开发一个应用程序。我们正在使用 Google Apps,并希望从 Google Analytics 获取数据并将其显示在我们的一个网络应用程序中。我不希望客户看到任何授权应用程序的请求。我想使用像 http://www.google.com/support/a/bin/answer.py?hl=en&answer=162105 这样的 2-legged OAuth,但 Google Analytics 不在列表中。我还能用吗? .NET Google Data API libraryGoogle API .NET Client 是否支持它?

编辑 1

使用Google API .NET Client,我想出了一些对我来说应该有用的东西:

var auth = new Google.Apis.Authentication.OAuth2LeggedAuthenticator(DOMAIN_CONSUMER_KEY, DOMAIN_CONSUMER_SECRET, USER_TO_IMPERSONATE, DOMAIN);

var service = new Google.Apis.Analytics.v3.AnalyticsService(auth);

service.Key = DEV_KEY_FROM_API_CONSOLE;

var _request = service.Management.Accounts.List();

foreach (var item in _request.Fetch().Items)
{
    Console.WriteLine(item.Name);
}

...但我收到此错误:

Google.Apis.Requests.RequestError 
InvalidCredentials [401]
Errors [
    Message[Invalid Credentials] 
    Location[Authorization - header] 
    Reason[authError] 
    Domain[global]
    ]

谢谢

【问题讨论】:

  • 说真的!?!??!没有人!?!??!
  • 老实说我不知道​​,但是 WordPress 插件 Google Analyticator 做了类似的事情(在你的 WordPress 仪表板中显示数据),它是 PHP 但也许看看它的代码可能会对此有所了解?
  • 好的,我会检查一下。谢谢保罗。

标签: .net oauth google-analytics google-api 2-legged


【解决方案1】:

这篇博文逐步解释了如何使用 Google API .Net 客户端实现 2 腿身份验证。

http://bittwiddlers.org/?p=212#awp::?p=212

但是,作者以这条评论结束了他的帖子:

上述特定于 google-api-dotnet-client 项目的信息是相关的,但是如果您尝试执行任何异步工作或使用 2LO(代表多个用户),该库会像筛子一样泄漏内存并且会降低您的性能)。

祝你好运,如果你找到更好的解决方案,请告诉我,我有点厌烦这个问题......

【讨论】:

    【解决方案2】:

    我已经回答了一个类似的问题here。这回答了如何解决将导致401 Invalid Credentials 的几个问题,并且可以帮助您使 .Net API 的 v3 版本正常工作。我只是在此处添加此内容,因为您的解决方案使用已弃用的 v2 API 来规避您在身份验证方面遇到的问题。

    【讨论】:

      【解决方案3】:

      我找到了一个使用.NET library for the Google Data API 的方法。感谢this guy,我找到了this link。这是列出所有 Analytics 帐户的工作代码,考虑到 GOOGLE_APPS_DOMAIN_SECRET 是使用 this method 生成的密钥,DOMAIN 是 Google Apps 的域,用户名是前缀(例如:“firstname.lastname”)来自我们要模拟的 Google Apps 用户(例如管理员,以访问所有内容)的电子邮件:

              var requestFactory = new GOAuthRequestFactory("an", "Any app name");
              requestFactory.ConsumerKey = DOMAIN;
              requestFactory.ConsumerSecret = GOOGLE_APPS_DOMAIN_SECRET;
      
              var service = new AnalyticsService("Any app name");
              service.RequestFactory = requestFactory;
      
              var query = new AccountQuery();
              query.OAuthRequestorId = username + "@" + DOMAIN;
      
              var serviceQuery = service.Query(query);
      
              foreach (AccountEntry Entry in serviceQuery.Entries)
              {
                  WriteLine(Entry.Title.Text);
              }
      

      唯一的问题是我必须冒充用户,不能简单地访问所有内容。

      编辑:方法已弃用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-14
        • 1970-01-01
        • 2013-04-28
        • 2013-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多