2015-12-15 38 views
0

我使用OAuth2.0的
(谷歌開源的OAuth2庫MswhXl8fVhTFUH_Q3UOJbXvxhMjh3Sh48谷歌域共享聯繫人appscript,使用的oauth2 lib和上listAllContacts SharedContactsApp LIB錯誤

我也使用SharedContactsApp library
(開放源庫MLbRKmnCytdiSBOmoaGe1DOVJ5jnXUK_T

我能夠添加共享聯繫人還添加電話號碼。 我也能使用

SharedContactsApp.getContacts(); 

但是當我做,我注意到,我只得到25次接觸,我沒有加入的聯繫人,同時也是中域及聯繫人目錄選項顯示。 我創建了超過25個,但是當我使用getContacts()時,我只獲得25. 所以我決定使用getContactsForPaging

但是在使用SharedContactsApp.getContactsForPaging(Token);時出現錯誤。

這是我如何把它設置了:

function listAllContacts() { 
    var sharedContactsService = getSharedContactsService(); 
    var Token = sharedContactsService.getAccessToken(); 
    SharedContactsApp.setOAuth2AccessToken(Token); 

    do { 
    var result = SharedContactsApp.getContactsForPaging(Token); 
    contacts = result.getContacts(); 
    Token = result.getToken(); 
    for (var i = 0; i < contacts.length; i++) { 
     Logger.log(contacts[i].getFullName()); 
    } 
    } while (Token != null); 
} 

難道我做錯了什麼?

這是我的錯誤:

Exception: Request failed for https://www.google.com/m8/feeds/contacts/dev.whitestratus.com/full/ returned code 401. 
    Truncated server response: <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <title>Error 401 (Client Error)!!1</title> <style type="text/css"> ... (use muteHttpExceptions option to examine full response) 
    (line 239, file "Code", project "SharedContactsApp") 

回答

0

HTTP 401錯誤將與認證有關。我的猜測是您沒有有效的OAuth訪問權限。確認,

function tinyTest() { 
    Logger.log('hasAccess() is: %s', getSharedContactsService().hasAccess()); 
} 

應導致'hasAccess() is: true'。如果是false,則需要做兩件事:

  1. 請按照How To use OAuth 2 with SharedContactsApp。這將引導您獲取訪問令牌,這是一個手動練習,非常複雜且容易出錯。仔細跟隨並再次檢查每一步,不要採取任何行動或嘗試進行捷徑。
  2. 使用該頁面上的test()功能(第6步)來確認您的設置,然後再繼續使用或使用您自己的代碼。如果test()不起作用,您的代碼也不會。

如果您的test()失敗,我建議您在這裏報告步驟2,3,4,5(但隱藏您的「客戶端祕密」)的詳細信息。

編輯補充:

如果測試通過了,那麼一切似乎都與您的OAuth確定。運行下面的代碼來瀏覽所有聯繫人並登錄。也許你有一些接觸不良的數據。看看日誌,你會看到失敗的第一個聯繫人的ID。刪除該聯繫人並重試,直到您沒有錯誤。

function listAllContacts() { 
    SharedContactsApp.setOAuth2AccessToken(getSharedContactsService().getAccessToken()); 
    var contacts = null; 
    var token = null; 
    do { 
    var result = SharedContactsApp.getContactsForPaging(token); 
    contacts = result.getContacts(); 
    token = result.getToken(); 
    for (var i = 0; i < contacts.length; i++) { 
     Logger.log(contacts[i].getId()); 
     Logger.log(contacts[i].getGivenName()); 
     Logger.log(contacts[i].getFamilyName()); 
     Logger.log(contacts[i].getFullName()); 
    } 
    } while (token != null); 
} 
+0

當我使用tinyTest()。如果日誌虛假給我。但對於測試功能,我得到一個聯繫人。當我使用getContacts()時也是如此。兩者都適用於我,但不是getContactsForPaging()。 – GersonLobos

+0

出於某種原因,我第一次嘗試** tinyTest()**我得到了錯誤,但現在我一直運行它。我按照oauth上的說明進行共享聯繫。但是當我做** getContactsForPaging()**時仍然會出錯。我可以在庫中添加,刪除和編輯用戶,但無法通過分頁來獲取它們。 @peter – GersonLobos

+0

現在的錯誤信息是什麼(仍然是401?)。也許你有一些與壞數據聯繫?插入「Logger.log(contacts [i] .getId());」記錄器之前,並運行它。看看日誌,你會看到失敗的ID。刪除它並重試,直到你有一個乾淨的數據集。 –

0

您正在使用Token爲兩個不同的東西。 OAuth2令牌和分頁令牌有兩個令牌。這應該解決它。

function listAllContacts() { 
var sharedContactsService = getSharedContactsService(); 
var oaToken = sharedContactsService.getAccessToken(); 
SharedContactsApp.setOAuth2AccessToken(oaToken); 
var Token = null; 
var contacts = null; 


do { 
var result = SharedContactsApp.getContactsForPaging(Token); 
contacts = result.getContacts(); 
Token = result.getToken(); 
for (var i = 0; i < contacts.length; i++) { 
Logger.log(contacts[i].getFullName()); 
} 
} while (Token != null); 
} 
+0

謝謝。我試過了,但仍然收到401錯誤。 – GersonLobos

+0

例外:請求https://www.google.com/m8/feeds/contacts/dev.whitestratus.com/full/返回代碼401失敗。截斷的服務器響應: Error 401(Client Error)!! 1