谷歌域名共享联系人appscript,使用listAllContacts

时间:2015-12-15 18:46:48

标签: google-apps-script oauth-2.0

我正在使用 oauth2.0 库 (Google开源OAuth2库MswhXl8fVhTFUH_Q3UOJbXvxhMjh3Sh48

我也在使用SharedContactsApp library
(开源库MLbRKmnCytdiSBOmoaGe1DOVJ5jnXUK_T

我可以添加共享联系人也添加电话号码。 我也可以使用

SharedContactsApp.getContacts();

但是当我这样做时,我注意到我只收到了25个联系人,但我没有添加任何联系人,这些联系人也在域中并显示在联系人的“目录”选项中。 我创造了超过25个但是当我使用getContacts()时,我只得到25个。 所以我决定使用getContactsForPaging

但是在使用SharedContactsApp.getContactsForPaging(Token);时出现错误。

这就是我设置它的方式:

function listAllContacts() {
   var sharedContactsService = getSharedContactsService();
   var Token = sharedContactsService.getAccessToken();
   SharedContactsApp.setOAuth2AccessToken(Token);

  do {
    var result = SharedContactsApp.getContactsForPaging(Token);
    contacts = result.getContacts();
    Token = result.getToken();
    for (var i = 0; i < contacts.length; i++) {
      Logger.log(contacts[i].getFullName());
    }
  } while (Token != null);
}

我做错了吗?

这是我的错误:

Exception: Request failed for https://www.google.com/m8/feeds/contacts/dev.whitestratus.com/full/ returned code 401. 
  Truncated server response: <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
  <title>Error 401 (Client Error)!!1</title> <style type="text/css"> ... (use muteHttpExceptions option to examine full response) 
  (line 239, file "Code", project "SharedContactsApp")

2 个答案:

答案 0 :(得分:0)

您正在使用Token来完成两件事。 OAuth2令牌和分页令牌有两个令牌。这应该解决它。

function listAllContacts() {
var sharedContactsService = getSharedContactsService();
var oaToken = sharedContactsService.getAccessToken();
SharedContactsApp.setOAuth2AccessToken(oaToken);
var Token = null;
var contacts = null;


do { 
var result = SharedContactsApp.getContactsForPaging(Token);
contacts = result.getContacts();
Token = result.getToken();
for (var i = 0; i < contacts.length; i++) {
Logger.log(contacts[i].getFullName());
}
} while (Token != null);
}

答案 1 :(得分:0)

HTTP 401错误将与身份验证相关。我的猜测是你没有有效的OAuth访问权限。确认,

function tinyTest() {
  Logger.log('hasAccess() is: %s', getSharedContactsService().hasAccess()); 
}

应该会产生'hasAccess() is: true'。如果是false,您需要做两件事:

  1. 关注How To use OAuth 2 with SharedContactsApp。这将引导您获取一个访问令牌,这是一个手动练习,非常复杂且容易出错。仔细按照并再次检查每一步,不要做任何事情或尝试采取捷径。
  2. 使用该页面上的test()功能(此处的步骤6)确认您的设置,然后再继续使用或使用您自己的代码。如果test()不起作用,您的代码也不会。
  3. 如果您的test()失败,我建议您在此处报告步骤2,3,4,5中的详细信息(但隐藏您的“客户机密”)。

    编辑添加:

    如果您的测试通过,那么您的OAuth似乎一切正常。运行以下代码以浏览所有联系人并登录。也许你有一些关于坏数据的联系方式。查看日志,您将看到第一个失败的联系人的ID。删除该联系人,然后重试,直到您没有错误。

    function listAllContacts() {
      SharedContactsApp.setOAuth2AccessToken(getSharedContactsService().getAccessToken());
      var contacts = null;
      var token = null;
      do {
        var result = SharedContactsApp.getContactsForPaging(token);
        contacts = result.getContacts();
        token = result.getToken();
        for (var i = 0; i < contacts.length; i++) {
          Logger.log(contacts[i].getId());
          Logger.log(contacts[i].getGivenName());
          Logger.log(contacts[i].getFamilyName());
          Logger.log(contacts[i].getFullName());
        }
      } while (token != null);
    }