2014-01-22 15 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,你會得到它。嚴重晦澀,感謝分享。 –

相關問題