Closed waylonwang closed 7 years ago
你可以扩展 qsession.py 中的 QSession 类实现这个功能。用这个对象的 smartRequest 方法就可以。 这个接口一次只能获取一个成员的名片,效率太低,对于那种1000多个人的大群肯定不合适。整个的获取完估计超过3分钟了。
我现在用的是 qun.qq.com 的接口,一个群请求一次就可以将全部成员的 QQ 、 昵称 和 名片 获取到。
这个接口获取到的是全部群成员的名片,效率不低的,qun.qq.com 的接口关键问题是群名片不完整
我用的就是smartRequest这个方法来获取,但是返回了错误:
_Callback({"code":-3000,"default":0,"message":"no login","subcode":-4001});
正确接口返回的是这样的,所有的群成员名片都会有
_Callback(
{
"code": 0,
"data": {
"alpha": 0,
"bbscount": 0,
"class": 0,
"create_time": 1056935499,
"filecount": 0,
"finger_memo": "",
"group_memo": "",
"group_name": "群名片测试",
"item": [
{
"iscreator": 0,
"ismanager": 0,
"nick": "我是超长群名片0我是超长群名片0我是超长群0",
"uin": aaaaa
},
{
"iscreator": 1,
"ismanager": 0,
"nick": "我是超长群名片1我是超长群名片1我是超长群1",
"uin": xxxxx
},
{
"iscreator": 0,
"ismanager": 1,
"nick": "我是超长群名片2我是超长群名片2我是超长群2",
"uin": yyyyy
},
{
"iscreator": 0,
"ismanager": 0,
"nick": "我是超长群名片3我是超长群名片3我是超长群3",
"uin": zzzzz
}
],
"level": 0,
"nick": "xxxxx",
"option": 3,
"total": 4
},
"default": 0,
"message": "",
"subcode": 0
});
完整的群名片是 “我是超长群名片1我是超长群名片1我是超长群1” ,用qun.qq.com获取的群名片只有“我是超长群名片”。
如果用你的qq group-set-card命令设置一个超长的群名片是可以成功的,在手机QQ上确认的确已经修改成功,然后用qq list group-member查询,可能是读缓存的原因显示的群名片也是超长的,但是重新启动qqbot后,再执行qq list group-member查询,得到的就是新拉取的被截断的群名片了
当用户群名片较长时,通过当前方法获取到的群名片是不完整的,因为web qq协议返回的群名片是超长截断的,即便http://qun.qq.com中所有的群名片也都是被截断的
在http://qun.qzone.qq.com中查看的群名片却是完整,虽然web界面中会折叠超长部分,但是实际内容是完整的,因此可以考虑获取群名片的方法使用下面这个接口:
http://qun.qzone.qq.com/cgi-bin/get_group_member?uin=[用户QQ号]&groupid=[群号]&neednum=1&r=0.9828503488543949&g_tk=229651109
此接口返回的数据格式是:
_Callback({"code":0,"data":{"alpha":0,"bbscount":0,"class":0,"create_time":1056935499,"filecount":0,"finger_memo":"","group_memo":"","group_name":"xxx","item":[{"iscreator":0,"ismanager":0,"nick":"yyyyy","uin":xxx},....],"level":0,"nick":"xxx","option":3,"total":4},"default":0,"message":"","subcode":0});
其中的"nick":"yyyyy"是完整的群名片信息,我尝试了将这部分代码在qqbot中加入,但是由于不懂如何处理登录问题(实际在浏览器中与web qq使用的是相同的二维码方式并自动登录呢)返回的是错误,请看看能否调试一下,谢谢!