SNS網站中怎樣獲取MSN聯絡人資訊

NO IMAGE

幾乎所有的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:

http://www.dpe***.com/

Secret Key:

nazgnMZRWbbgaleiDpvUhG69FKBb5L2v

 

第二步:

    下載 Windows Live
ID Delegated Authentication SDK 1.2
DEMO,網址為:http://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改為http://www.dpe***.com/delAuth/sample1/delauth-handler.aspx

Policyurl的值改為http://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/@[email protected]"
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格式,並加以利用。

附件中的程式碼包完整實現了這一功能,大家可以下載

http://files.cnblogs.com/lichl/DelAuth.rar