javascript - 如何使用查询参数来限制 Google Contacts API 中检索到的联系人

标签 javascript google-contacts-api

我正在尝试使用 JavaScript 测试 Google Contacts API。我知道 V1 支持 JavaScript,但 V2 和 V3 没有列出。但是,我已经能够找到一种通过 AJAX 请求检索联系人的方法,因此现在获取联系人并不是真正的问题。但是,我希望能够指定我要查找的联系人的搜索条件,这样我就不必分页和搜索所有用户联系人。

现在,我的代码如下所示:

function getContact(domTarget) {
   // Get permission and a token
   auth(function(token) {

      // Create an AJAX request to get the contacts
      var ajaxContactRequest = new XMLHttpRequest(),
              url = "";

      // What to do when we get our contacts
      ajaxContactRequest.onreadystatechange = function() {
         if (ajaxContactRequest.readyState === 4 && ajaxContactRequest.status === 200) {

            // Parse our contact data as a JSON object
            var response = JSON.parse(ajaxContactRequest.responseText),
                    contactArray = response.feed.entry, i, contactDiv;

            // Print out the contacts
            if (domTarget) {
               for (i = 0; i < contactArray.length; i++) {
                  if (contactArray[i].title && contactArray[i].title.$t) {
                     contactDiv = document.createElement("div");
                     domTarget.appendChild(contactDiv);

                     // Print out the contact's name
                     contactDiv.innerHTML = contactArray[i].title.$t;
                  }
               }
            }
         }
      };

      // Construct our URL
      url += "https://www.google.com/m8/feeds/contacts/default/full/";
      // Add the access token
      url += "?access_token=" + token.access_token;
      // Get JSON format back
      url += "&alt=json";
      // Limit to 10 results
      url += "&max-results=10";

      // Open the request
      ajaxContactRequest.open("GET", url, false);

      // Send it away
      ajaxContactRequest.send();
   });
}

我知道对查询有某种支持,因为这里的 list :Retrieving Contacts Using Query Parameters提到您可以使用此处找到的参数:Contacts Query Parameters Reference其中列出了 q=term1 term2 term 3 和 `q="term1 term2 term3"是执行“对联系人数据字段进行全文查询”的方法。

我尝试了几种不同的参数组合,例如名字和姓氏以及日期和电子邮件。但是,它们都不会对结果产生任何影响。我想知道的另一件事是这是否真的很重要。我仅根据名称限制我的查询以尝试减少响应的大小。但是,如果更好的做法是只获取整个联系人集,然后收集您需要的信息,我想我可以改为这样做。

我认为如果联系人数量大于 max-results 大小,您必须执行多个请求。

最佳答案

您需要切换到第 3 版的 Google Contacts API。

v1 和 v2 不支持“搜索词”(q) 参数,因此您只能使用“最后更新”和“排序依据”等查询参数。

所以。首先,他们暗示您的所有 header 都需要“GData-Version:3.0”参数。 https://developers.google.com/google-apps/contacts/v3/#specifying_a_version

如果您使用的是 jQuery,那将非常简单。这是一个例子:Set Request Header jQuery Ajax

但是在您已有的代码中,您可以将它添加到所有请求的 URL 中。

url += "https://www.google.com/m8/feeds/contacts/default/full/?v=3";

(同样在 jQuery 中,如果修改 header 很可怕,也很容易将其添加为参数)

问题是“作用域”本身是错误的,我花了数周时间才弄明白。

在您的 HTML 代码中,我确定您已经授权您的应用使用...

scope="https://www.google.com/m8/feeds"

...正如它在文档中所说的那样。但是当他们说“所有请求都需要 header ”时,他们实际上是指所有请求。而且,如果您使用 Google 的预制 HTML 示例来授权您的应用程序,那么您根本无权访问可让您修改 header 的代码。所以你需要使用...

scope="https://www.google.com/m8/feeds?v=3"

这是因为 v2 API 和 v3 API 共享一个范围 URL,只有在并排阅读 v2.0 和 v3.0 文档时才会真正注意到这一点。

无论如何,我希望对您有所帮助。

基隆

关于javascript - 如何使用查询参数来限制 Google Contacts API 中检索到的联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21292573/

相关文章:

javascript - JS 检查页面/内容是否不包含

javascript - 如何使 k 均值算法发挥作用

c# - 完成前取消 $.post

javascript - 无法在 Google 通讯录 api v3 上使用 javascript 创建联系人

google-api - Google 通讯录 API 与人员 API

google-api - Google Contacts API - 获取图像

javascript - Javascript 中的一次可调用函数

javascript - 如何在 gmail 插件上获取 textinput 值

angularjs - POST 请求 405 错误 (AngularJS $http)

javascript - 遍历列的数据属性