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

时间:2014-01-22 19:50:49

标签: javascript google-contacts

我正在尝试使用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();
   });
}

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

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

如果联系人数量大于max-results,我认为你必须做多个请求。

1 个答案:

答案 0 :(得分:5)

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

v1和v2不支持“搜索词”(q)参数,因此您仅限于查询参数,例如“上次更新”和“排序依据”等。

因此。首先,他们提示所有标题都需要“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中,如果修改标题是可怕的,很容易将其添加为参数)

踢球者,我用了几个星期来解决这个问题,是“范围”本身是错误的。

在您的HTML代码中,我确定您已使用...

授权您的应用
scope="https://www.google.com/m8/feeds"

......正如它在文档中所说的那样。但当他们说“所有请求都需要标题”时,他们真正意味着所有请求。如果您使用Google的预先封装的HTML示例来授权您的应用程序,那么您根本无法访问可以修改标头的代码。所以你需要使用......

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

这是因为v2 API和v3 API共享一个范围URL,如果您并排阅读v2.0和v3.0文档,那么您才会注意到这一点。

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

基隆