Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为登录用户访问Meteor项目中的YouTube API_Meteor_Google Api_Youtube Api_Google Api Nodejs Client_Youtube Analytics Api - Fatal编程技术网

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

为登录用户访问Meteor项目中的YouTube API,meteor,google-api,youtube-api,google-api-nodejs-client,youtube-analytics-api,Meteor,Google Api,Youtube Api,Google Api Nodejs Client,Youtube Analytics Api,我正在进行一个新的Meteor项目,该项目涉及用户通过OAuth使用他们的Google帐户登录该网站(我使用Meteor帐户Google软件包进行此操作),登录时,我需要他们能够看到YouTube频道的YouTube分析API中的一些数据。到目前为止,我试图获取的数据是他们的每日总视图,我希望在指定的时间段内将其显示在图表上 我已将以下范围添加到我的帐户google登录系统: Meteor.loginWithGoogle({ requestPermissions: ['h

我正在进行一个新的Meteor项目,该项目涉及用户通过OAuth使用他们的Google帐户登录该网站(我使用Meteor帐户Google软件包进行此操作),登录时,我需要他们能够看到YouTube频道的YouTube分析API中的一些数据。到目前为止,我试图获取的数据是他们的每日总视图,我希望在指定的时间段内将其显示在图表上

我已将以下范围添加到我的帐户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、ExpireSet、refreshToken等

我还决定通过meteorhacks:npm Meteor包实现它来使用。我使用它来刷新令牌(如本文所示,我发现它很有用)

使用YouTube Analytics API Documentation页面上的API Explorer,我可以通过以下请求获取我要查找的数据类型:

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/API相当陌生,因此非常感谢您提供任何信息/示例,尤其是对noob友好的内容!)

一种方法是使用方法和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\u ID\u OF_MY\u USER
&
ACCESS\u TOKEN\u OF_MY\u USER

您可以根据用户需要自由定制
myParams

如果您想了解更多关于如何使用HTTP请求的技巧(调用外部API非常有用),Meteor Chef写了一篇非常好的文章:


我希望有帮助

我最终使用该软件包来处理API调用。

非常感谢您的回复,我肯定会尝试一下,希望我能让它正常工作!我只有一个问题,让它输入“我的用户的频道ID”和“我的用户的访问令牌”的最佳方式是什么?现在我看到访问令牌存储在services.google.accessToken中。频道ID似乎没有存储在“用户”中的任何位置,但我猜我也可以以某种方式将其保存到用户配置文件中。我只是不确定如何让它在Meteor.call中输入这些数据?我曾尝试使用发布/订阅,但似乎无法让它工作。。我在server.js:Meteor.publish(“access_token”,function(){return Meteor.users.find(this.userId,{fields:{'services.google.accessToken':1}}});//然后我通过以下方式在客户机中订阅:Meteor.Subscribe(“访问令牌”);//然后我试着用“ACCESS\u TOKEN”替换“ACCESS\u TOKEN\u OF_MY\u USER”,但它似乎根本不起作用。。你知道我哪里做错了,或者我怎么能做到这一点吗?嗨@U54!订阅使您有权访问发布的数据。因此,您必须这样做
让user=Meteor.users.findOne({u id:Meteor.userId()})
在您想要获取数据和访问令牌的地方使用以下变量:
user.services.google.accessToken
,并回答您的第一个问题,当用户注册到您的应用时,您的访问令牌存储在用户集合中。考虑到通道id,您应该创建一个带有表单的en事件处理程序,要求它们键入通道id,然后使用输入值调用该方法!这是一个非常好的教程,可以帮助您了解流星的基本知识:
// 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);
});