2017-04-11 117 views
1
response = RestClient.get 'https://www.google.com/m8/feeds/contacts/default/full', {params: {'max-results': 10000, 'access_token' => access_token, 'alt' => 'json', 'sortorder' => 'ascending'}} 

獲得在有序的接觸,我使用谷歌API來獲取他們給其文檔中sortorder可以是ascendingdescending接觸,但我無法弄清楚他們排序上的屬性,我想這樣做的名字谷歌聯繫人API:如何通過他們的名字

參考:https://developers.google.com/google-apps/contacts/v3/reference

enter image description here

任何幫助?

編輯: 另外,我想有接觸分頁,如果我把手上的ROR側此排序,然後我每次都取千元的聯繫人,並對其進行排序,然後分頁,這是緩慢的

回答

3

它似乎這個Google API不支持按名稱排序,這意味着分頁成爲一個挑戰。

如果我被困在此,我可能會搶了完整的聯繫人列表,並持續在其兩邊
(一)磁盤文件,或
(B)的Memcached或Redis的,或
(C)一個數據庫表。
當然,當持久化對象時,還會出現其他問題,主要是爲您的代碼定義好的參數,以便知道何時重新同步列表或者簡單地將其丟棄。

如果你選擇(c),那麼你的排序和分頁可以用典型的方法完成。

但是,如果您選擇(a)或(b),那麼您可以在保存列表時進行排序。

Ruby可以輕鬆地對載入內存的數組進行排序。如果它是一個龐大的陣列,您甚至可以對其進行排序以避免重複。我不確定你的response對象是什麼樣的,但這裏有一些代碼假設它是一個包含name屬性的對象數組。

my_objects = response # ...or whatever extracts the array of objects 
# Modifies array in place... 
my_objects.sort! { |a, b| a.name <=> b.name } 
# To sort descending... 
my_objects.sort! { |a, b| b.name <=> a.name } 
# To sort by zip first (assuming a `zip` attr) then by `name`... 
my_objects.sort! { |a, b| 2 * (a.zip <=> b.zip) + (a.name <=> b.name) } 
# To sort by zip first (assuming a `zip` attr) then by `name` DESCENDING... 
my_objects.sort! { |a, b| 2 * (a.zip <=> b.zip) + (b.name <=> a.name) } 

這是因爲正負號飛船操作,<=>的所有作品。您可以瞭解更多有關在這裏:
What is the Ruby <=> (spaceship) operator?
https://en.wikipedia.org/wiki/Sign_function

+0

@liole如果用戶有4000個聯繫人,我必須在我身邊處理,那麼這需要時間,我正在尋找谷歌的支持來解決這個問題 –

+1

'sort_by!(&:name)'會比較習慣於上行排序 – engineersmnky

+0

我已經在ROR一側使用sort_by實現了這一點,但是我正在尋找更好的方法........現在,我得到數以千計的聯繫人並將其排序在我的末端並顯示.....現在我想要分頁但是每次我必須一次又一次讀取這些數千條記錄然後發送分頁記錄 –

2

的聯繫人API對這個沒有直接的支持。

參數orderby只有兩個選項:「lastmodified」,只是將其留空(順便使用聯繫人ID執行確定性但任意的順序)。

其原因是通常列表操作僅用於同步目的,其中客戶端/應用程序將保留自己的本地副本,並定期更新(而不是每次用戶打開應用程序時調用API或更改查看聯繫人的不同頁面)。此外,有幾十種方法可以對名稱進行排序(名字或姓氏爲主鍵?關於標題?FileAs值?CJK注意事項?)

您是否考慮過使用People API?它爲此返回與聯繫人的排序鍵。

+0

我沒有考慮過人爲API,因爲'http:// stackoverflow.com/questions/36386957/google-contacts-api-vs-people-api',是否有任何堅實的理由讓我爲此使用人API? ?我想對他們的名字排序記錄 –

+0

我編輯了一個查詢的問題 –