从节点中的Google api获取联系人

时间:2018-01-13 16:36:40

标签: node.js rest api google-oauth google-contacts

我想在nodejs中使用google contacts api获取联系人,但nodejs的developer.google页面上没有任何快速入门。 我在github https://github.com/hamdipro/google-contacts-api上找到了这个包装器,但我不明白它,我不知道如何使用它。

谁能告诉我我该怎么做?

2 个答案:

答案 0 :(得分:1)

很遗憾,Google的NodeJS官方API不支持Contacts API。他们改用People API。如果需要访问“其他联系人”,则需要联系人API。

如果您已经将official googleapis library用于Contacts API,则可以通过创建身份验证客户端后向Contacts API发送请求来将其用于其他目的。

鉴于您已经具有用户的访问令牌(例如,如果您是使用Passport生成的,则代码如下:

const {google} = require("googleapis");
const authObj = new google.auth.OAuth2({
    access_type: 'offline',
    clientId: process.env.GOOGLE_ID,
    clientSecret: process.env.GOOGLE_SECRET,
});

在访问令牌过期之前自动刷新访问令牌

authObj.on('tokens', (tokens) => {
    const access_token = tokens.access_token
    if (tokens.refresh_token){
        this.myTokens.refreshToken = tokens.refresh_token
        // save refresh token in the database if it exists
    }
        this.myTokens.accessToken = tokens.access_token       
        // save new access token (tokens.access_token)
}
authObj.setCredentials({
    access_token:this.myTokens.accessToken,
    refresh_token:this.myTokens.refreshToken,
});

向Contacts API发出请求:

authObj.request({
    headers:{
        "GData-Version":3.0
    },
    params:{
        "alt":"json",
        //"q":"OPTIONAL SEARCH QUERY",
        //"startindex":0
        "orderby":"lastmodified",
        "sortorder":"descending",
    },
    url: "https://www.google.com/m8/feeds/contacts/default/full"
}).then( response => {
    console.log(response); // extracted contacts
});

答案 1 :(得分:0)

首先,不要使用上面提到的非官方包,你应该更喜欢使用官方软件包,因为它们维护得很好,每个引擎盖下的更改都得到妥善处理并且还考虑了所创建的问题。

相同的官方包裹是here

现在步骤使用上面的包来获取用户的联系人: -

  1. 使用npm install googleapis --save
  2. 包含googleapis
  3. 创建服务客户端

    • var google = require('googleapis');
    • var contacts = google.people('v1');
  4. 授权客户提出请求 {Link for authentication docs}

  5. 进行经过身份验证的请求

    contacts.people.connections.list({ auth: oauth2Client //authetication object generated in step-3 }, function (err, response) { // handle err and response });

  6. 这应该足以获取用户的联系人数据。除了 gmail 之外,如果您使用域名进行身份验证并具有管理员权限,您可以使用domain wide delegation获取所有用户的联系人,否则您必须手动允许每个用户访问。

    希望它有所帮助。如果有任何疑问,请在评论中告诉我。