zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    openJudge计算概论-谁考了第k名
    OpenJudge计算概论-求平均年龄
    OpenJudge计算概论-能被3,5,7整除的数
    OpenJudge计算概论-计算书费
    OpenJudge计算概论-计算三角形面积【海伦公式】
    OpenWrt 中安装配置Transmission
    OpenWrt中wifidog的配置及各节点页面参数
    Linux中后台执行任务
    通过ionice和nice降低shell脚本运行的优先级
    OpenWrt中对USB文件系统的操作, 以及读写性能测试
  • 原文地址:https://www.cnblogs.com/xumaojun/p/8529186.html
Copyright © 2011-2022 走看看