2014-01-22 16 views
2

我试图用JavaScript测试Google Contacts API。我知道V1支持JavaScript,但V2和V3没有列出它。但是,我已经能够找到一种通过AJAX请求来检索联系人的方法,因此获取联系人现在不是真正的问题。但是,我希望能够指定我正在查找的联系人的搜索条件,这样我就不必在所有用户联系人中进行寻呼和搜索。如何使用查询参数限制Google Contacts API中检索到的联系人

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

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大小。

+0

嗨,你解决了这个问题吗?目前有同样的问题。 – Albert

回答

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中,可以很容易地将其添加为PARAM太多,如果修改标题是可怕的)

起脚,我花了几个星期摸不着头脑,就是“范围“本身是错误的。

在你的HTML代码,我敢肯定,你使用授权您的应用程序...

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

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

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

这是因为V2 API和v3 API共享范围的网址,您真的,如果你正在阅读的V2.0和V3.0的文件只注意到并排。

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

Kieron

+0

这绝对是正确的答案!添加'?v = 3'可以解决我使用Google文档时遇到的所有问题。 – DanO

+0

很高兴帮助!就像我说的那样,我花了数周时间把头撞到那台电脑上。这并不复杂,但它是偷偷摸摸的。我想这就是为什么“正常工作”的付费JS库如此受欢迎。 – KieronAlsmith

+0

如果我可以多次击中+1,你会得到它。严重晦涩,感谢分享。 –

相关问题