Google Analytics 嵌入 API 服务器端授权未使用 C# 呈现图表

Posted

技术标签:

【中文标题】Google Analytics 嵌入 API 服务器端授权未使用 C# 呈现图表【英文标题】:Google Analytics Embed API Server Side Authorization not rendering the charts with C# 【发布时间】:2017-06-13 18:58:05 【问题描述】:

我正在尝试使用 C# 中的服务器端授权来呈现图表,但我无法做到。

Google 有一个示例,但基于 Python,我需要基于 C# MVC 构建: https://ga-dev-tools.appspot.com/embed-api/server-side-authorization/

我已经创建了服务帐号并下载了 JSON 文件:

控制器

public class StatsController : Controller

    // GET: Stats
    public async Task<ActionResult> Index()
    
        var json = "C:\\temp\\client_secrets.json";

        string[] scopes = new string[]  AnalyticsReportingService.Scope.AnalyticsReadonly ; // Put your scopes here

        var stream = new FileStream(json, FileMode.Open, FileAccess.Read);

        var credential = GoogleCredential.FromStream(stream);
        credential = credential.CreateScoped(scopes);

        try
        
            Task<string> task = ((ITokenAccess)credential).GetAccessTokenForRequestAsync();
            task.Wait();
            var bearer = task.Result;

            ViewBag.Token = bearer;
        
        catch (AggregateException ex)
        
            throw ex.InnerException;
        

        return View();
    

查看

<script>
(function(w,d,s,g,js,fs)
  g=w.gapi||(w.gapi=);g.analytics=q:[],ready:function(f)this.q.push(f);;
  js=d.createElement(s);fs=d.getElementsByTagName(s)[0];
  js.src='https://apis.google.com/js/platform.js';
  fs.parentNode.insertBefore(js,fs);js.onload=function()g.load('analytics');;
(window,document,'script'));
</script>

<div id="chart-1-container"></div>

<script>

gapi.analytics.ready(function() 

  /**
   * Authorize the user with an access token obtained server side.
   */
  gapi.analytics.auth.authorize(
    'serverAuth': 
      'access_token': ' @ViewBag.Token '
    
  );


  /**
   * Creates a new DataChart instance showing sessions over the past 30 days.
   * It will be rendered inside an element with the id "chart-1-container".
   */
  var dataChart1 = new gapi.analytics.googleCharts.DataChart(
    query: 
      'ids': 'ga:XXXX', // <-- Replace with the ids value for your view.
      'start-date': '30daysAgo',
      'end-date': 'yesterday',
      'metrics': 'ga:sessions,ga:users',
      'dimensions': 'ga:date'
    ,
    chart: 
      'container': 'chart-1-container',
      'type': 'LINE',
      'options': 
        'width': '100%'
      
    
  );
  dataChart1.execute();

);
</script>

没有渲染,每次刷新视图时我都会得到一个不同的令牌,并且控制台中的所有这些错误:

详情

【问题讨论】:

我不会担心令牌不同。你能发布完整的 401 错误吗 您好,谢谢!请详细检查更新后的问题 @DaImTo printscreen 对你有帮助吗? 实际上并不是完整的错误消息。尝试获取访问令牌并在浏览器中使用 Http 获取测试它尝试 MetaData api 只需添加 access_token=yourtoken 抱歉,我该怎么做? 【参考方案1】:

我终于让它运行起来了,唯一要做的事情(经过数小时的研究)就是从 access_token: 属性中删除 :

    gapi.analytics.ready(function () 

        gapi.analytics.auth.authorize(
            serverAuth: 
                access_token: '@ViewBag.Token'
            
        );
    );

我现在可以得到一个完全没有用户登录的 Google Analytics 图表:

并且没有任何控制台错误。

【讨论】:

我需要你的帮助。我正在尝试做同样的事情。但我总是有登录所需的错误。 谢谢你..我该死的东西工作了..2天后..google讨厌.net。我一直在尝试使用与您完全相同的代码来执行此操作。我的问题是服务帐户的电子邮件未添加到分析帐户中。 是的,先生。我不知道为什么它没有给我正确的令牌。我的代码和你几乎一样。然后我复制了你的代码,我发现分析需要服务帐户电子邮件。

以上是关于Google Analytics 嵌入 API 服务器端授权未使用 C# 呈现图表的主要内容,如果未能解决你的问题,请参考以下文章

html Google Analytics为Kickoff嵌入了代码。 http://trykickoff.com

html 嵌入式Google Analytics:修复Nginx上的“利用浏览器缓存”警告

每天可以对 Google AdWords 和 Analytics 进行多少 API 调用?

导入错误:Google Analytics API 授权

Google Analytics Metadata API 识别有效组合

Google Analytics 报告 API - 权限不足 403