我需要在Google+中获取用户的活动列表。我的编码平台是node.js Express框架,我正在使用google-api-nodejs-client软件包。
var googleapis = require('googleapis');
var auth = new googleapis.OAuth2Client();
var accessToken="XXXXXX......";
googleapis
.discover('plus', 'v1')
.execute(function (err, client) {
if (err) {
console.log('Problem during the client discovery.', err);
return;
}
auth.setCredentials({
access_token: accessToken
});
client
.plus.people.get({ userId: 'me' })
.withAuthClient(auth)
.execute(function (err, response) {
console.log('My profile details------>', response);
});
client
.plus.activities.list({
userId: 'me',
collection: 'public',
maxResults: 100
})
.withAuthClient(auth)
.execute(function (err, response) {
console.log('err----------------------------->',err);//EDIT
console.log('activities---------------------->', response.items);
});
});
我收到了个人资料详情。但是活动返回值:null
。我查看了我的Google+信息页,以确保我有公开信息。另外,我自己也分享了一些“公开”的帖子。请帮我在代码中找到错误。
修改
实际上,有一个错误。我通过Ryan Seys建议在控制台中记录错误对象的值来找到它。
ERR --------------->
{
"error": {
"errors": [
{
"domain": "global",
"reason": "insufficientPermissions",
"message": "Insufficient Permission"
}
],
"code": 403,
"message": "Insufficient Permission"
}
}
答案 0 :(得分:1)
我认为问题在于您要为client.plus.activities.list()
指定一个空字段参数,而不是根本不提供字段参数。这告诉它不返回结果的字段。由于 fields 参数是可选的,因此您可以完全省略它。
尝试类似:
client
.plus.activities.list({
userId: 'me',
collection: 'public',
maxResults: 100
})
答案 1 :(得分:1)
如果你提供err
对象的价值会有所帮助,但这里有一些想法:
您的项目是否启用了Google+ API?请参阅https://console.developers.google.com/以及项目的API和auth部分以启用API。
您是否正在为用户个人资料数据请求合适的范围。请参阅https://developers.google.com/apis-explorer/#p/plus/v1/plus.activities.list以试用该请求。单击该页面上的OAuth按钮,查看您可能尝试从用户请求的不同类型的范围。我现在看到的一些范围是:
https://www.googleapis.com/auth/plus.login(了解您的基本个人资料信息和圈子中的人员列表)。
https://www.googleapis.com/auth/plus.me(了解您在Google上的身份)
https://www.googleapis.com/auth/userinfo.email(查看您的电子邮件地址)
https://www.googleapis.com/auth/userinfo.profile(查看有关您帐户的基本信息)
尝试在API请求中添加一个空体字段。这是当前API客户端的警告,有些请求要求您在参数对象后输入默认的空{}
。
client
.plus.activities.list({
userId: 'me',
collection: 'public',
maxResults: 100
}, {}) // <--- see the extra {} here!
.withAuthClient(auth)
.execute(function (err, response) {
console.log('activities---------------------->', response.items);
});