Web QQ协议分析(四):好友相关
获取好友列表
请求方式:Post
url:http://s.web2.qq.com/api/get_user_friends2
referer:http://s.web2.qq.com/proxy.html?v=20130916001&callback=1&id=1
请求参数只有一个r
,值是 JSON,内容为:
1 | { |
vfwebqq
依旧是登录后获得的参数,hash
是uin
和ptwebqq
进行加密后的数据,最新的加密算法如下:
1 | def self.hash (uin, ptwebqq) |
请求成功后会返回一个如下格式的 JSON:
1 | { |
其中所有的uin
和u
都代表着用户的编号。categories
保存分组信息,index
是编号、sort
是顺序、name
是名称。marknames
的markname
是备注,vipinfo
的is_vip
和vip_level
分别代表用户是否为会员和会员等级,info
的nick
为用户昵称,friends
中的categories
表示所属分组。
在这里我也很疑惑为什么拆的这么细,解析的时候着实麻烦,最后也只能归结于应该是一个历史遗留问题。
获取好友在线状态
刚才刚提到好友列表的 JSON 拆的很复杂,这里又突然冒出来个单独的接口仅仅是为了获取在线状态。如此设计的原因可能是因为这两个接口的调用频率不同(好友列表很少改变,但是好友的在线状态时时都会改变),或者又是一个历史遗留问题。
请求方式:Get
url:http://d1.web2.qq.com/channel/get_online_buddies2?vfwebqq=\#{vfwebqq}&clientid=53999199&psessionid=\#{psessionid}&t=0.1
referer:http://d1.web2.qq.com/proxy.html?v=20151105001&callback=1&id=2
url 中的vfwebqq
和psessionid
还是一样,就不多说了。请求成功会返回在线的用户,以及终端类型(client_type
):
1 | { |
通过uin
获得 QQ号
之前也提到过uin
只是一个临时的用户编号,随时都会发生改变。所以如果你想真正知道和你聊天的人是谁,最好还是通过这个接口获得 Ta 的 QQ号。
请求方式:Get
url:http://s.web2.qq.com/api/get_friend_uin2?tuid=\#{uin}&type=1&vfwebqq=\#{vfwebqq}&t=0.1
referer:http://d1.web2.qq.com/proxy.html?v=20151105001&callback=1&id=2
tuid
就是对方的uin
。请求成功后取出result.account
即可:
1 | { |
获取好友详细信息
请求方式:Get
url:http://s.web2.qq.com/api/get_friend_info2?tuin=\#{uin}&vfwebqq=\#{vfwebqq}&clientid=53999199&psessionid=\#{psessionid}&t=0.1
referer:http://s.web2.qq.com/proxy.html?v=20130916001&callback=1&id=1
请求参数没什么特别的就不重复了,请求成功后会返回一堆数据,基本上都是字面上的意思就不多加解释了:
1 | { |