博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 获取QQ好友列表信息的实现
阅读量:6276 次
发布时间:2019-06-22

本文共 2261 字,大约阅读时间需要 7 分钟。

  1. 分析部分

    1. 当我们访问QQ空间的时候,大家可以在右侧的发现一个这样的统计信息 
    2. 当点击这个链接的时候,会跳转到 
       
      这样一个URL 
      这个URl可以管理好友,当然也就能读取到好友 
    3. 上面我们是在浏览器中的操作,接下来看看数据到底怎么获取的,我们通过Fiddler的查找功能,就可以查找到web请求和内容信息,我们就会找到如下一个URL,当然Fiddler是在操作之前打开的 
       
    4. 通过Fiddler发现返回的是JSON数据,实际的实现是跨域JSON,JSON的结构,是两个数组,一个分组信息,一个好友列表 
       
    5. 详细的具体JSON信息,我就不在说了,感兴趣的可以自己去分析
  2. 代码实现部分
      1. 更具上面的分析,我们首先需要实现数据模型(好友和分组信息) 
        public class QQGroupMemberInfo
        {
        public string QQ
        {
        get;
        set;
        }
        public string NickName
        {
        get;
        set;
        }
        }
        /// 
        /// QQ好友
        /// 
        public class QQFriendMember : QQGroupMemberInfo
        {
        public int FriendGroupId { get; set; }
        }
        /// 
        /// 好友分组
        /// 
        public class QQFiendGroup
        {
        public string Name { get; set; }
        public int GroupId { get; set; }
        public int SortId { get; set; }
        }
        /// 
        /// 好友信息返回模型
        /// 
        public class QQFriendInfo
        {
        public QQFriendInfo()
        {
        GroupInfos = new List
        ();
        QQFriends = new List
        ();
        }
        public List
        GroupInfos { get; set; }
        public List
        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
        (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
    ;
      1. 获取解析数据
    var gpnames = data["gpnames"] as object[];//组信息
    var items = data["items"] as object[];//好友信息
    //遍历组
    foreach (var g in gpnames)
    {
    var gitem = (g as Dictionary
    );
    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
    );
    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协议分析工具来解析,再结合浏览器的控制台来分析

完整源码:

 

 

 

转载请注明:http://www.cnblogs.com/Rolends
你可能感兴趣的文章
ERC230 VS ERC223
查看>>
机器学习实战篇——用卷积神经网络算法在Kaggle上跑个分
查看>>
编译Android内核
查看>>
再谈GC2:Java垃圾收集器与GC日志分析实践
查看>>
IDEA环境下SSM整合------环境配置
查看>>
构建自适应的手机页面
查看>>
YARN的AsyncDispatcher原理
查看>>
[Coursera][From Nand to Tetris / Part I] 第六周 汇编器项目 python 实现
查看>>
阻止了 WannaCry 扩散的研究员承认开发恶意软件
查看>>
云栖大会首设“科技脱贫”专场 ,20张会场门票等你来拿!
查看>>
ZLG 发布开源 GUI 引擎 AWTK
查看>>
一个不可思议的MySQL慢查分析与解决
查看>>
[Cake] 0.C#Make自动化构建-简介
查看>>
《TCP/IP协议》- TCP协议知识目录
查看>>
详尽! Win10安装Java8+Tomcat9!
查看>>
1127
查看>>
一次痛的经历
查看>>
智能运维(AIOps)时代开启,一文帮你快速了解其定义与发展现状
查看>>
第1讲 快速入门 《Kotlin 极简教程 》
查看>>
[Hadoop]MapReducer工作过程
查看>>