分析部分
- 代码实现部分
- 更具上面的分析,我们首先需要实现数据模型(好友和分组信息)
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; }
}
- 提交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);
- 使用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>;
- 获取解析数据
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()
});
}
- 更具上面的分析,我们首先需要实现数据模型(好友和分组信息)
- 总结
- 其实QQ的数据是比较好获取的,只是登陆比较困难而已,关于登陆部分实现,我blog前面的一些文章已经实现过了,这里不再罗嗦
- 对于HTTP协议的数据分析,主要使用HTTP协议分析工具来解析,再结合浏览器的控制台来分析