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

Getting contacts from Google api in node

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

谁能告诉我该怎么办?

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

同样的官方包是 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 });

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

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

不幸的是,Google 的 NodeJS 官方 API 不支持联系人 API。他们改用人民 API。如果您需要访问 "Other Contacts",您将需要联系人 API。

如果您已经将其用于其他目的,您仍然可以使用 API 连接联系人 API,方法是在创建授权客户端后向联系人 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,
});

向联系人发出请求 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
});