Google apps script 使用谷歌应用程序脚本的YouTube分析和报告API

Google apps script 使用谷歌应用程序脚本的YouTube分析和报告API,google-apps-script,google-api,youtube-api,youtube-data-api,youtube-analytics-api,Google Apps Script,Google Api,Youtube Api,Youtube Data Api,Youtube Analytics Api,我正在尝试将YouTube分析和报告API与Google Apps脚本一起使用,用我拥有和管理的YouTube品牌帐户的分析数据填充Google工作表 作为前言,我曾在我拥有的YouTube频道和我管理的频道上尝试过这一点,但没有任何效果。在过去的几天里,我还查看了所有与此相关的堆栈溢出问题和回答,但没有任何结果。相信我,我说我什么都试过了。我不相信代码或我的设置方式是问题所在;我相信这与谷歌或YouTube API本身有关 以下是我采取的步骤: 在Google Apps脚本中启用YouTube

我正在尝试将YouTube分析和报告API与Google Apps脚本一起使用,用我拥有和管理的YouTube品牌帐户的分析数据填充Google工作表

作为前言,我曾在我拥有的YouTube频道和我管理的频道上尝试过这一点,但没有任何效果。在过去的几天里,我还查看了所有与此相关的堆栈溢出问题和回答,但没有任何结果。相信我,我说我什么都试过了。我不相信代码或我的设置方式是问题所在;我相信这与谷歌或YouTube API本身有关

以下是我采取的步骤:

在Google Apps脚本中启用YouTube分析API和YouTube数据API。YouTube报告API找不到,这可能是问题所在

在Google开发者控制台中启用相同的API YouTube报告API在那里可用

设置客户端ID&Secret并将我的项目链接到应用程序脚本

通过在Google开发者控制台的YouTube Analytics and Reporting API Explorer中输入相同的精确参数、度量、维度等,验证了我的代码确实有效。当我这样做时,浏览器确实导出了正确的信息。然而,在谷歌应用程序脚本中,它根本不起作用

由于代码是在浏览器中工作的,而不是在谷歌应用程序脚本中,我相信有一些简单的事情我做错了,或者是谷歌方面的错误。我希望有办法解决这个问题,因为我真的很想把我的YouTube频道的数据放到谷歌表单上

为了简单起见,谷歌应用程序脚本代码缩短了。key属性可能不是必需的,但如果没有它也无法工作

function myFunction() {
  var metrics = [
    'averageViewDuration'
  ];
  var oneMonthInMillis = 1000 * 60 * 60 * 24 * 30;
  var today = new Date();
  var lastMonth = new Date(today.getTime() - oneMonthInMillis);
  var report = YouTubeAnalytics.Reports.query({
    ids: 'channel==MINE',
    startDate: formatDateString(lastMonth),
    endDate: formatDateString(today),
    metrics: metrics.join(','),
    dimensions: 'day',
    sort: 'day',
    includeHistoricalChannelData: false,
    key: "AIzaSyAcVb-hriIydRs8iVqFZ6ZoyL8En3qLcnc",
  });

  Logger.log(report);
}
当我运行代码时,记录器的输出为零。我希望那里会有一些东西

作为提醒,当我选择除核心帐户之外的任何帐户时,都会发生这种情况。当我选择附加到没有YouTube频道的帐户的核心帐户时,它会输出以下内容:

[19-10-3017:58:19:251 PDT]{columnHeaders=[{columnType=DIMENSION, dataType=STRING,name=day},{columnType=METRIC,dataType=INTEGER, name=averageViewDuration}],kind=YouTubeAnalyticsResultable, 行=[[2019-09-30,0],[2019-10-01,0],[2019-10-02,0],[2019-10-03, 0], [2019-10-04, 0], [2019-10-05, 0], [2019-10-06, 0], [2019-10-07, [2019-10-08,0]…]}


没有理由它不起作用。您认为问题出在哪里?

抱歉,但目前您想要做的是,应用程序脚本不支持。这已经在Google Issue tracker中报道过,您可以在下面的链接中看到:

作为一种解决方法,您可以实现Oauth2.0,正如Stack Overflow的文章中所说的那样

编辑 如果在使用刷新令牌时遇到问题,请在从Oauth2.0获取访问令牌后,使用此代码直接向Youtube API发出请求

function makeRequest() {
  var response = UrlFetchApp.fetch('https://youtubeanalytics.googleapis.com/v2/reports?endDate=2019-10-10&ids=channel%3D%3DMINE&metrics=views&startDate=2019-10-09', {
    headers: {
       // you will get the access token from Oauth2.0 playground
      Authorization: 'Bearer ACCES_TOKEN'   
    }
  });
  Logger.log(response)
}
它说,从

工程团队已经决定不可能支持 这个用例。你需要使用YouTube以外的东西 访问G+页面拥有的频道的高级服务


所以,似乎没有人支持你想要的

谢谢,阿尔贝托。我已经尝试了你提到的帖子中的步骤,但我不知道如何让它工作。我必须执行步骤9并生成一个刷新令牌,但我不知道如何在应用程序脚本中使用它。这是解决了让它在应用程序脚本中正常工作的问题,还是解决了非应用程序脚本的问题?生成刷新令牌后,我不知道下一步要做什么。好的,我编辑了我的答案,以便您可以尝试直接使用访问令牌并检索您需要的数据,我给您的是一个应用程序脚本解决方案,用于做您想做的事情,感谢您的跟进。我尝试了你的代码,但得到了相同的结果:没有找到日志。当我运行您的代码,然后选择主电子邮件帐户时masteraccount@gmail.com代码工作正常,但是,当我运行代码,然后选择我想要的YouTube频道/品牌帐户时,什么都没有发生。我是做错了什么,还是这是一个更大的问题?好像我在编辑后的回答中所说的那样,这是不受支持的