C# 獲取QQ好友列表信息的實現


  1. 分析部分

    1. 當我們訪問QQ空間的時候,大家可以在右側的發現一個這樣的統計信息 
      image
    2. 當點擊這個鏈接的時候,會跳轉到 
      image 
      這樣一個URL 
      這個URl可以管理好友,當然也就能讀取到好友 
      image
    3. 上面我們是在瀏覽器中的操作,接下來看看數據到底怎么獲取的,我們通過Fiddler的查找功能,就可以查找到web請求和內容信息,我們就會找到如下一個URL,當然Fiddler是在操作之前打開的 
       image
    4. 通過Fiddler發現返回的是JSON數據,實際的實現是跨域JSON,JSON的結構,是兩個數組,一個分組信息,一個好友列表 
       image
    5. 詳細的具體JSON信息,我就不在說了,感興趣的可以自己去分析
  2. 代碼實現部分
      1. 更具上面的分析,我們首先需要實現數據模型(好友和分組信息) 
           public class QQGroupMemberInfo
            {
                public string QQ
                {
                    get;
                    set;
                }
                public string NickName
                {
                    get;
                    set;
                }
            }
            /// <summary>
            /// QQ好友
            /// </summary>
            public class QQFriendMember : QQGroupMemberInfo
            {
                public int FriendGroupId { get; set; }
            }
            /// <summary>
            /// 好友分組
            /// </summary>
            public class QQFiendGroup
            {
                public string Name { get; set; }
                public int GroupId { get; set; }
                public int SortId { get; set; }
            }
            /// <summary>
            /// 好友信息返回模型
            /// </summary>
            public class QQFriendInfo
            {
                public QQFriendInfo()
                {
                    GroupInfos = new List<QQFiendGroup>();
                    QQFriends = new List<QQFriendMember>();
                }
                public List<QQFiendGroup> GroupInfos { get; set; }
                public List<QQFriendMember> QQFriends { get; set; }
            }
      2. 提交GET請求,獲取數據 
                    string friendUrl = string.Format("http://r.cnc.qzone.qq.com/cgi-bin/tfriend/friend_mngfrd_get.cgi?uin={0}", _cleintKeyInfo.ClientUin);
                    string jsonF = GetWebData<string>(friendUrl);
      3. 使用Javascript運行時解析數據
                StringBuilder script = new StringBuilder();
                script.AppendLine("function _Callback(o){return o; };");
                script.AppendLine(jsonF);
                var data = JavaScriptEngine.Run(script.ToString()) as Dictionary<string, object>;
      1. 獲取解析數據
                var gpnames = data["gpnames"] as object[];//組信息
                var items = data["items"] as object[];//好友信息
                //遍歷組
                foreach (var g in gpnames)
                {
                    var gitem = (g as Dictionary<string, object>);
                    qfi.GroupInfos.Add(new QQFiendGroup()
                    {
                        GroupId = int.Parse(gitem["gpid"].ToString()),
                        Name = gitem["gpname"].ToString(),
                        SortId = int.Parse(gitem["sortid"].ToString())
                    });
                }
                //遍歷成員
                foreach (var f in items)
                {
                    var fitem = (f as Dictionary<string, object>);
                    qfi.QQFriends.Add(new QQFriendMember()
                    {
                        FriendGroupId = int.Parse(fitem["groupid"].ToString()),
                        NickName = fitem["name"].ToString(),
                        QQ = fitem["uin"].ToString()
                    });
                }
  3. 總結
    1. 其實QQ的數據是比較好獲取的,只是登陸比較困難而已,關於登陸部分實現,我blog前面的一些文章已經實現過了,這里不再羅嗦
    2. 對於HTTP協議的數據分析,主要使用HTTP協議分析工具來解析,再結合瀏覽器的控制台來分析

完整源碼:/Files/Rolends/code.rar

 

 

QQ 討論組廣告群發工具(已開發完成)索引

 

轉載請注明:http://www.cnblogs.com/Rolends


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM