登录用户在 Meteor 项目中访问 YouTube API

Accessing YouTube API in Meteor project for logged in user

我正在开发一个新的 Meteor 项目,该项目涉及用户使用他们的 Google 帐户通过 OAuth 登录网站(为此我使用 Meteor accounts-google 包)和登录时,我需要他们能够从 YouTube 分析 API 中查看他们 YouTube 频道的一些数据。截至目前,我正在尝试获取的数据是他们的每日总浏览量,然后我希望在指定时间段内将其显示在图表上。

我已将以下范围添加到我的帐户-google 登录系统:

    Meteor.loginWithGoogle({
        requestPermissions: ['https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/yt-analytics.readonly', 'https://www.googleapis.com/auth/youtube.readonly'],
        requestOfflineToken: true,
        forceApprovalPrompt: true,
        loginStyle: "popup"
    });

这一切似乎都运行良好,一旦用户登录站点并授予站点访问权限,我就可以在我的 MongoDB 数据库中看到必要的信息。在user.services.google下我现在可以看到它有accessToken、idToken、expiresAt、refreshToken等

我还决定使用 google api nodejs client by implementing it through the meteorhacks:npm package for Meteor. I am using this to refresh tokens (as seen in this SO answer 我觉得有用的。

使用 YouTube 分析 API 文档页面上的 "Try It" API 资源管理器,我可以通过此请求获取我要查找的数据类型:

GET https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date=2015-10-01&end-date=2015-10-31&metrics=views&dimensions=day&sort=-day&key={YOUR_API_KEY}

现在我完全被困住了,真的不确定从这里去哪里。我怎样才能将其应用到我的网站中?我已经尝试了很长一段时间来完成这项工作,但我尝试的一切都没有奏效,而且没有真正的方向。如果有人愿意帮忙,我将不胜感激。我是 Meteor/JS/APIs 的新手,所以非常感谢任何 information/examples,尤其是新手友好的东西! ;)

一种方法是使用方法和 http 包:https://atmospherejs.com/meteor/http

查看您提供的文档,您可以尝试这样的操作:

在服务器端定义你的方法

// server-side
Meteor.methods({
  getYoutubeReports: function(channelId, accessToken, params) {
    params.ids = "channel=="+ channelId;
    params.key = accessToken;
    return HTTP.get("https://www.googleapis.com/youtube/analytics/v1/reports", {
      params: params
    });
  }
});

然后您可以使用从身份验证中获得的数据在客户端调用它(即 CHANNEL_ID_OF_MY_USER & ACCESS_TOKEN_OF_MY_USER

// client-side
var reports,
    myParams = {
      "start-date": "2015-10-01",
      "end-date": "2015-10-31",
      "metrics": "views",
      "dimensions": "day",
      "sort": "-day"
    };

Meteor.call('getYoutubeReports', CHANNEL_ID_OF_MY_USER, ACCESS_TOKEN_OF_MY_USER, params, function(error, result) {
  // store or do stuff with the result of the HTTP request here
  console.log(result);
});

根据您的用户需要随意定制 myParams

如果您想了解更多有关如何使用 HTTP 请求的技巧(调用外部非常有用 API),Meteor Chef 写了一篇非常好的文章:https://themeteorchef.com/snippets/using-the-http-package/

希望对您有所帮助!

我最终使用 percolate:google-api 包来处理我的 API 电话。