一步一步来做WebQQ机器人-(四)(获取好友列表和群列表)
本篇主要是: 获取好友列表,群列表
我会尽量详细一点,尽我所知的分享一些可能大家已经掌握的或者还不清楚的经验
利于大家阅读,文章样式不再复杂化,根据内容取固定色
全系列预计会有这些步骤,当然某些步骤可能会合并:
- 验证码
- 第一次登陆
- 第二次登陆
- 保持在线和接收消息
- 获取好友和群列表
- 发送消息
- 变成智能的(*゚∀゚*)
获取好友 1-获取QQ好友的hash算法
P = function (b, j) {
for (var a = j + "password error", i = "", E = []; ;)
if (i.length <= a.length) {
if (i += b, i.length == a.length) break;
} else {
i = i.slice(0, a.length);
break
}
for (var c = 0; c < i.length; c++) E[c] = i.charCodeAt(c) ^ a.charCodeAt(c);
a = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
i = "";
for (c = 0; c < E.length; c++) i += a[E[c] >> 4 & 15], i += a[E[c] & 15];
return i
}
传入了2个参数:QQ号码、ptwebqq(文章2中从cookie中拿到)
获取好友 2-请求
- 地址:
http://s.web2.qq.com/api/get_user_friends2 - referer:
http://s.web2.qq.com/proxy.html?v=20130916001&callback=1&id=1 - post字符串:
string.Format("r={{\"vfwebqq\":\"{0}\",\"hash\":\"{1}\"}}", this.VfWebQQ, this.Hash);
获取好友 3-返回和分析

返回json对象由两部分组成:retcode、result,前者表示请求是否成功不提,我们主要看result,里面包含了这些东西:
- categories,分类,即你的QQ好友分组,
index可以看做分组表的主键,sort排序,name该组的别名。《我的好友》分组默认是index:0 - friends好友,
flag表示默认头像序号,后文同不提,uin是贯穿全文的参数,是在网页关闭前,浏览器客户端的唯一标识,categories对应上面分组信息 - info 储存了好友的信息--昵称
nick,uin对应唯一标识 - marknames 备注名称,同样
uin对应唯一标识,markname对应备注名称,这里要说的是,如果没有备注,在这里是不显示的 - vipinfo,vip信息,无用
我建立了一个类去用于反序列化它
class JsonFriendModel
{
public int retcode { get; set; } public paramResult result = new paramResult(); public class paramResult
{
///
/// 分组信息
///
public List categories = new List();
///
/// 好友汇总
///
public List friends = new List();
///
/// 好友信息
///
public List info = new List();
///
/// 备注
///
public List marknames = new List(); ///
/// 分组
///
public class paramCategories
{
public string index { get; set; } public int sort { get; set; } public string name { get; set; }
}
///
/// 好友汇总
///
public class paramFriends
{
public string flag { get; set; } public string uin { get; set; } public string categories { get; set; }
}
///
/// 好友信息
///
public class paramInfo
{
public string face { get; set; } public string nick { get; set; } public string uin { get; set; }
}
///
/// 备注
///
public class paramMarkNames
{
public string uin { get; set; } public string markname { get; set; }
}
}
}
小扩展 linq中的left join 左查询
var query = from f in model.result.friends
join i in model.result.info on f.uin equals i.uin into table1
from t1 in table1.DefaultIfEmpty()
join m in model.result.marknames on f.uin equals m.uin into table2
from t2 in table2.DefaultIfEmpty()
select new Friend()
{
Uin = f.uin,
Face = t1 == null ? string.Empty : t1.face,
Category = f.categories,
Nick = t1 == null ? string.Empty : t1.nick,
MarkName = t2 == null ? string.Empty : t2.markname
};
以上是使用了left join 多表进行关联查询,model即对应了返回json的result属性
获取群 1-请求信息
- 地址:
http://s.web2.qq.com/api/get_group_name_list_mask2 - referer:
http://s.web2.qq.com/proxy.html?v=20130916001&callback=1&id=1 - post字符串:
string.Format("r={{\"vfwebqq\":\"{0}\",\"hash\":\"{1}\"}}", this.VfWebQQ, this.Hash);
获取群 2-返回信息

结构和获取好友有些类似,不同的是:群的唯一标识是gid,好友的是uin,名称不同。以下是对应的实体类:
class JsonGroupModel
{
public int retcode { get; set; } public paramResult result = new paramResult(); public class paramResult
{
public List gnamelist = new List(); public class paramGnamelist
{
public string flag { get; set; } public string gid { get; set; } public string code { get; set; } public string name { get; set; }
}
} }
到目前为止,已经可以完整的登陆,并保持在线,获取消息(解析消息还未说明),获取好友和群列表
接下来我想对每一篇文章写上对应的demo,来帮助大家更好的理解整个过程,毕竟文章主要讲的是流程,实际操作中可能遇到这种或者那种的问题。
为之前的文章附上demo,可能会花一点时间,原计划的每日一更就难实现了...尽量吧
使用C#模拟http请求可以参考猛戳这里
您有没有对这篇文章感兴趣呢?
还好啦 WQNMLGB
一步一步来做WebQQ机器人-(四)(获取好友列表和群列表):点击下载
本步骤的demo,一步一步来做WebQQ机器人-(四)(获取好友列表和群列表+自制QQ分组控件),更新于2015/2/5
可以到该系列最后一篇文章查看是否可能有最新demo
转载请保留本页链接:http://www.cnblogs.com/lianmin/p/4237723.html
.
一步一步来做WebQQ机器人-(四)(获取好友列表和群列表)的更多相关文章
- 一步一步来做WebQQ机器人-(五)(发送消息||完结)
× 本篇主要是: 发送QQ消息(to:好友,群),以及对小黄鸡抓包利用它的语言库 本文是WebQQ流程的最后一章 最后一章内容不多但我还是啰嗦,可能对大部分人都已知晓的流程方法我也会介绍一下 前面几个 ...
- 一步一步来做WebQQ机器人-(三)(登录QQ并保持在线)
× 本篇的目的是让你的QQ真正的上线:挤下你的PCQQ,和让好友状态栏显示webqq在线 目前总进度大概50% 全系列预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在 ...
- 一步一步来做WebQQ机器人-(二)(第一次登陆)
// 预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在线和接收消息 获取好友和群列表 发送消息 变成智能的(*゚∀゚*) webqq的登陆,分为2步,本文主要讲第一次 ...
- 一步一步来做WebQQ机器人-(一)(验证码)
× Well done! 为了探究webqq的http请求流程和数据交互,我付出了很多心血. 写下这篇文章!!!这是我逝去的青春 系列写完之后我会把源码打包奉上~ ------我的征途是星辰大海 预计 ...
- web开发之web 验证码--- webqq 机器人
一步一步来做WebQQ机器人-(一)(验证码) http://www.cnblogs.com/lianmin/p/4231340.html http://www.cnblogs.com/liulun/ ...
- Ace教你一步一步做Android新闻客户端(一)
复制粘贴了那么多博文很不好意思没点自己原创的也说不出去,现在写一篇一步一步教你做安卓新闻客户端,借此机会也是让自己把相关的技术再复习一遍,大神莫笑,专门做给新手看. 手里存了两篇,一个包括软件视图 和 ...
- Cocos2d-x 3.1 一步一步地做改编
本文并不想谈论的屏幕改编或真理的概念.假设不知道cocos2d-x的,请先看这篇文章:http://www.cocoachina.com/gamedev/cocos/2014/0516/8451.ht ...
- 一步一步带你做WebApi迁移ASP.NET Core2.0
随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
随机推荐
- C# 词法分析器(三)正则表达式
系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 正则表达式是一种描述词素的重要表示方法.虽然正则表达 ...
- git 学习笔记1--config & help
1. config 配置用户名和邮箱: git config --global user.name 'pzdn2009' git config --global user.email 10502441 ...
- JavaScript类型转换
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jquery上传文件控件Uploadify
基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. 要求使用jquery1.4或以上版本,flash player 9.0.24以上. 有两个 ...
- 4D时间管理
时间管理的4D原则 时间矩阵:每个人,每天要做的事情大致分为四类:一类:必须做的,不做会产生不良后果的二类:需要做的,为将来或者今后阶段做准备工作的三类:可以不做,但又不得不做的,例如通过简约形式 ...
- BZOJ3553 : [Shoi2014]三叉神经树
设val[i]为i连出去的树突中输出值为0的个数 如果val[x]<=1,输出值为1,否则输出值为0 修改x就相当于val[f[i]]++或者val[f[i]]-- 用Link-cut Tree ...
- 【BZOJ】3712: [PA2014]Fiolki
http://www.lydsy.com/JudgeOnline/problem.php?id=3712 题意:n个瓶子,第i个瓶子里又g[i]克物质.m次操作,第i次操作把第a[i]个瓶子的东西全部 ...
- Android在智能终端领域的关键技术专题讲座(成都站)
Android系统引领了终端智能化的浪潮,在民用.公 共及工业等诸多领域得到了广泛的应用,涉及手持终端.电视.汽车导航.工业控制等,在云计算.设备智能化等方面表现卓越.Android也凭借着自身的优 ...
- JDBC学习笔记1
JDBC(java database connectivity)一.基于socket+数据库底层协议java sun ------标准(接口)java.sql.*;jdbc sun公司为了方便连接数据 ...
- About_AJAX_02
学习AJAX基础: 首先要:掌握AJAX技术.掌握AJAX开发步骤.掌握采用AJAX进行实例开发 AJAX应用到的技术: AJAX(Asynchronous JavaScript And XML)涉及 ...