SNS網站中怎樣獲取MSN聯係人信息
幾乎所有的SNS網站都有[邀請站外好友]加入本站這個功能,當然,我們正在開發的這個名為XXX的網站也不例外,今天學習了一下,把成果向大家做一簡單匯報。
這個功能的關鍵點在於取得用戶的已有聯係人列表,並發送邀請函(一般都是電子郵件的形式),在這篇文章裏,隻涉及怎麼樣取得MSN中聯係人信息,如果大家有興趣,我會把怎麼樣取得Gmail、Yahoo等的聯係人信息代碼也都帖上來。
首先我想到的是參照已有網站的實現方式,如果開心網、校內網、FaceBook等。
開心網、校內網:
開心網和校內網的實現方式大致相同,都是輸入用戶名和密碼,程序按照一定的數據格式POST到LIVE網站,獲取Ticket,然後取得聯係人的信息,以下是屏幕截圖。
以上兩個網站的共同點是都要求用戶輸入MSN的用戶名和密碼,這樣有可能造成MSN帳戶信息泄漏,雖然都說"不會記錄或存儲你的密碼",但誰敢保證呢,即使真的不會存儲,但用戶會有一種抵觸心理。
FaceBook的實現與以上兩個網站截然不同,它不要求用戶輸入密碼信息,這樣用戶就會覺得爽多了,請看下圖,密碼框並不要求用戶填寫(Enable=false)
用戶點擊[Find Friends]後,會轉向Live網站,這樣用戶就可以放心大膽的輸入密碼了。
點擊[Sign In]後,會自動跳轉到FaceBook網站,顯示用戶聯係人信息 ,如下圖所示。
綜合考慮,決定采用facebook的實現方式,MSDN上查找了一下,原來Microsoft發布了Window Live的一係列API,其中有一塊是Contacts API,好了,那就開始寫代碼吧(paipaidi)?
第一步:
申請一個微軟雲計算的一個Project,訪問https://lx.azure.microsoft.com/Cloud/Provisioning/Default.aspx ,申請一個類型為Live Services 的Project,
Application ID: |
0000000048011C34 |
Domain(s): |
|
Return URL: |
https://www.dpe***.com/ |
Secret Key: |
nazgnMZRWbbgaleiDpvUhG69FKBb5L2v |
第二步:
下載 Windows Live ID Delegated Authentication SDK 1.2 DEMO,網址為:https://www.microsoft.com/downloads /details.aspx?FamilyId=A2466ABF-9629-42D8-B991-1D3FAF2FE872& displaylang=en,
其中有C#、Java、Perl、PHP、Python、Ruby、VB等多種版本任你選擇。
第三步:
安裝下載的文件到指定目錄內,默認為C:/Program Files/Windows Live ID/DelAuth
第四步:
在IIS中新建一個虛擬目錄,名稱為DelAuth
第五步:
修改hosts文件, 你可以修改一下C:/WINDOWS/system32/drivers/etc中的hosts文件,把127.0.0.1映射到一個您剛才申請Project時填寫的域名 www.dpe***.com
第六步:
修改Sample1中的Web.Config文件,如下,用申請來的ApplicationID和Secret Key替換文件中相應的值,並根據你的主機及虛擬目錄名稱, 把ReturnUrl改為https://www.dpe***.com/delAuth/sample1/delauth-handler.aspx , Policyurl的值改為https://www.dpe***.com/delAuth/sample1/policy.html ,原始的web.Config文件如下:
第七步:
把Sample1中的Default.aspx設置為首頁,按如下界麵中的URL打開網址
其中Click Here中的URL是動態構造的,如果有興趣,相應的構造代碼大家可以研究一下。
點擊Click Here就轉向Live網站進行登錄,登錄後自動返回到Web.Config中配置的returnUrl網址,用戶登錄後,我們可以通過代碼取得
WindowsLiveLogin.ConsentToken的值,具體代碼如下:
WindowsLiveLogin wll = new WindowsLiveLogin(true);
WindowsLiveLogin.ConsentToken token = wll.ProcessConsent(req.Form);
第八步:
取得MSN中的聯係人信息
微軟提供了允許我們通過REST方式訪問contracts服務,需要具備以下兩個參數:
The Delegated Authentication token (DAT ),即WindowsLiveLogin.ConsentToken
The Location ID (lid ),可以通過WindowsLiveLogin.ConsentToken獲得
顯然,我們前七步做的工作主要是獲得以上的兩個參數的值,用戶登錄後,在returnUrl頁麵中,我們可以寫如下代碼
public string GetContacts(WindowsLiveLogin .ConsentToken ct)
{
string lid = ct.LocationID;
string delegatedToken = ct.DelegationToken;
// Construct the request URI.
string uri = "https://livecontacts.services.live.com/@L@" + lid + "/rest/LiveContacts/Contacts/" ;
HttpWebRequest request = (HttpWebRequest )WebRequest .Create(uri);
request.UserAgent = "Windows Live Data Interactive SDK" ;
request.ContentType = "application/xml; charset=utf-8" ;
request.Method = "GET" ;
// Add the delegation token to a request header.
request.Headers.Add("Authorization" , "DelegatedToken dt=/"" + delegatedToken + "/"" );
//Issue the HTTP GET request to Windows Live Contacts.
HttpWebResponse response = (HttpWebResponse )request.GetResponse();
//The response body is an XML stream. Read the stream into an XmlDocument.
XmlDocument contacts = new XmlDocument ();
contacts.LoadXml(new StreamReader (response.GetResponseStream()).ReadToEnd());
//Use the document. For example, display contacts.InnerXml.
return contacts.InnerXml;
//Close the response.
//response.Close();
}
我們可以針對返回的XML字符串進行分析,獲取你需要的Contact格式,並加以利用。
附件中的代碼包完整實現了這一功能,大家可以下載
https://files.cnblogs.com/lichl/DelAuth.rar
最後更新:2017-04-02 00:06:46