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>;
  3. 获取解析数据
            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()
                });
            }
总结
  1. 其实QQ的数据是比较好获取的,只是登陆比较困难而已,关于登陆部分实现,我blog前面的一些文章已经实现过了,这里不再罗嗦
  2. 对于HTTP协议的数据分析,主要使用HTTP协议分析工具来解析,再结合浏览器的控制台来分析

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

 

 

QQ 讨论组广告群发工具(已开发完成)索引

转载于:https://www.cnblogs.com/Rolends/archive/2012/04/30/2477084.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值