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;
                }
            }
            /// <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

C# 获取QQ好友列表信息的实现的更多相关文章

  1. Windows UIA自动化测试框架学习--获取qq好友列表

    前段时间应公司要求开发一款针对现有WPF程序的自动化测试工具,在网上查资料找了一段时间,发现用来做自动化测试的框架还是比较多的,比如python的两个模块pywinauto和uiautomation, ...

  2. (二十七)QQ好友列表的实现

    QQ好友列表通过plist读取,plist的结构为一组字典,每个字典内有本组的信息和另外一组字典代表好友. 要读取plist,选择合适的数据结构,例如NSArray,然后调用initWithConte ...

  3. [iOS基础控件 - 6.9.3] QQ好友列表Demo TableView

    A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组   code so ...

  4. ExpandableListView仿QQ好友列表

    本例中,对ExpandableListView中的数据进行了封装,分为两个JavaBean,一个为Group类表示组信息,一个Child类表示该组下子列表信息: Group: public class ...

  5. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  6. 仿QQ好友列表界面的实现

    TableView有2种style:UITableViewStylePlain 和 UITableViewStyleGrouped. 但是QQ好友列表的tableView给人的感觉似乎是2个style ...

  7. android 实现QQ好友列表

    在某些Android开发群里,看到有些新手问怎么实现QQ好友列表,其实网上一搜挺多的.接触Android,也才一年的时间,大部分时间花在工作上(解bug...),界面上开发很少参与.自己维护的系统应用 ...

  8. 基于Qt的相似QQ好友列表抽屉效果的实现

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/shuideyidi/article/details/30619167     前段时间在忙毕业设计, ...

  9. swift 实现QQ好友列表功能

    最近项目中有类似QQ好友列表功能,整理了一下,话不多说,直接上代码 import UIKit class QQFriend: NSObject { var name: String? var intr ...

随机推荐

  1. nyoj 1077 小博弈 【另类巴什博奕】

    分析:分析当整除(a+b)的时候肯定是后者胜利,假设余数不等于0的时候.假设余数大于b肯定是前者胜利,否则后者胜利. 代码: import java.math.*; import java.util. ...

  2. Git以及github的使用方法(五),暂存区和工作区

    Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工 ...

  3. 文本聚类——Kmeans

    上两篇文章分别用朴素贝叶斯算法和KNN算法对newgroup文本进行了分类測试.本文使用Kmeans算法对文本进行聚类. 1.文本预处理 文本预处理在前面两本文章中已经介绍,此处(略). 2.文本向量 ...

  4. SpringBoot学习之验证信息国际化

    以登录为例: 1.controller的登录方法: @RequestMapping("/SSOAuth/login") @ResponseBody public ResponseV ...

  5. windown vs2012 编译ffplay

    自己写的播放器播放有些文件出现问题,但ffplay播放都很正常,为方便调试,将ffplay.c编译成可执行文件. 一. 环境搭建 环境搭建前面已经有文章介绍,没有特殊的地方,不再赘述. 二.修改con ...

  6. git 操作远程仓库地址

    查看所有远程仓库地址: git remote -v 更改远程仓库地址: git remote set-url origin newUrl 查看某一个远程仓库地址: git remote get-url ...

  7. <转>关于 error LNK2019:无法解析的外部符号 ,该符号在函数**中被引用的思考

    错误提示信息摘抄如下: ---------------------------------------------------------------------------------------- ...

  8. Docker在centos下安装以及常见错误解决

    系列目录 Docker安装(使用阿里云镜像) Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收 ...

  9. Kuebernetes之DaemonSet

    系列目录 DaemonSet确保集群中每个(部分)node运行一份pod副本,当node加入集群时创建pod,当node离开集群时回收pod.如果删除DaemonSet,其创建的所有pod也被删除,D ...

  10. 发送邮件程序报错454 Authentication failed以及POP3和SMTP简介

    一.发现问题 在测试邮件发送程序的时候,发送给自己的QQ邮箱,程序报错454 Authentication failed, please open smtp flag first. 二.解决问题 进入 ...