閱讀57 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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):

www.dpe***.com

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

  上一篇:go 一起CUDA吧
  下一篇:go 40個跡象表明你還是PHP菜鳥