我正在尝试使用 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/