my favorite

2008/03/24

ASP.NET 取得 GMAIL 的連絡人清單 (Get Google Contacts List)

在離職的這兩個星期裡,除了星期一到五的時間要上班
偶爾回家還要弄一下交接的工作及文件之外
大部份的時間都花在Google最近釋出的GData API : Google contact data API
其實我接下這份工作的時候,我都還不知道這API已經有任何的release
只是單純看了案主所提供的一些範例
抱著別人做得到,我應該也做得到的傻勁,於是就大膽地允諾接下這個案子

這兩個星期花了不少的時間讀了Google contact data API protocol (based on HTTP)
以.NET開發的角度來說,發現認證分成以下兩部份
1. Web Form (AuthSub)
2. Window Form (ClientLogin)
第1種的AuthSub經由AuthSubRequest將請求送至google認證頁面,使用者在登入正確完成後,再進行檢索(Retrieve)、新增(Create)、刪除(Delete)、修改(Update)連絡人資料。而querystring中所帶的四個參數各有其意義,簡列如下

  • next : 認證成功後,google認證頁面會自動轉換(redirect)至此頁面
  • scope : 所要取得的服務範圍
  • security : 可帶 1 (Yes) 或是 0 (No)
  • session : 開發人員在使用者登入正確完成後取得的token是否能轉換為session token
所以一個送出的請求可以視為如下的URL
https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.google.com%2Fm8%2Ffeeds%2F&session=1&secure=0&next=http%3A%2F%2FSERVER_IP%2FDefault.aspx
切割後大概就是
  • https://www.google.com/accounts/AuthSubRequest (使用AuthSubRequest的方式進行認證)
  • scope=http%3A%2F%2Fwww.google.com%2Fm8%2Ffeeds%2F (scope為google contact feeds)
  • session=1 (向google要求此次取得的token 可以轉換為session token,避免一再向google要求token。可使用Google.GData.Client下的AuthSubUtil.exchangeForSessionToken取得)
  • secure=0 (是否帶入另外取得的簽證,像我一樣懶惰的人可以直接給 0 就好)
  • next=http%3A%2F%2FSERVER_IP%2FDefault.aspx (認證成功後,要帶入的下一個頁面)
畫面就像是

在按下Grant access(同意存取)後,接下來google認證頁面會轉至next參數所指定的網頁中(像我的例子就是http%3A%2F%2FSERVER_IP%2FDefault.aspx,其實就是http://SERVER_IP/Default.aspx,只是被編碼過了而已)開發人員便可以在querystring中取得token。而token便是讓Web開發人員作為向google service取得資訊的鑰匙
當然,取得token之後就是向google要求資料,或是做一些服務的內容了,這部份等實作完成後再另外寫一篇。另外大概把Atom format及APP (Atom Publishing Protocol)看了一遍
主要是因為google將連絡人得資料以Atom的格式包裝起來,這又是可以再寫一篇烙烙長的東西 0rz

等著開始實作的時間,發現手邊的這些document好像跟技術能力搭不起來呀 囧
然而Google看起來好像不太注重微軟的.NET這一塊平台 (應該說這是廢話嗎?)
在java, php, ruby, python都已經有solution的情況之下
唯獨ASP.NET的forum上沒人可以提供網頁式認證,而不經過google auth page的方法。
後來發現,只要把ClientLogin的方式套到WebForm上,取代AuthSubRequest就可以啦,有興趣的人快試試看喔,應該會很快有概念的,才不會像我一樣阿呆試這麼久

1 comment:

Anonymous said...

在.net上也許可以參考一下這篇文章喔
http://code.google.com/apis/contacts/developers_guide_dotnet.html

BIO

Taipei, GuTing, Taiwan

huang47 | personal

huang47 | personal