while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
}
return sb.toString();
}这里我做了一个单独的线程来接收消息,登录成功后发送一次post请求,得到返回值后再次post请求,从而保持登录状态,不断获取消息( webqq就是这样实现的)。下面简单分析几种返回格式:
1.如果1分钟内没有消息,会返回如下数据:
{"retcode":102,"errmsg":""} 这种情况下直接post下一个请求就好了。
2.好友留言
{"retcode":0,"result":[{"poll_type":"message","value":{"msg_id":27785,"from_uin":2208444277,"to_uin":2368295990,"msg_id2" :538127,"msg_type":9,"reply_ip":178854715,"time":1433158432,"content":[["font",{"size":10,"color":"000000","style": [0,0,0],"name":"\u5FAE\u8F6F\u96C5\u9ED1"}],"123 "]}}]}poll_type为消息类型,message为好友消息,group_message为群消息,sess_message为临时会议。同理,我没有分析讨论组的消息类型,有兴趣的可以自己试试。
value 是消息的基本信息。我不知道msg_id和msg_id2的区别,也不影响大局。 from_uin是给你的亲戚发朋友的uin,和他交朋友的uin一样,to_uin是你自己的ID(QQ号),不知道msg_type是什么类型,我一般忽略,reply_ip应该是发件人的ip地址,但是处理后不知道怎么解密。时间是发送的剑印,内容是msg的主要信息。就像发送消息一样,只需提取消息文本即可。
注意:如果发送表情包消息,内容将包含表情包格式,如[face],或自定义表情包[cface]。这时,提取消息的过程会变得更加复杂。任何带有图片的新闻都会被忽略。
3.群发消息
{"retcode":0,"result":[{"poll_type":"group_message","value":{"msg_id":18042,"from_uin":2381142083,"to_uin":2368295990,"msg_id2" :793507,"msg_type":43,"reply_ip":180064295,"group_code":478233785,"send_uin":2208444277,"seq":3615,"time":1433158906,"info_seq":189429357,"content":[ ["font",{"size":10,"color":"000000","style":[0,0,0],"name":"\u5FAE\u8F6F\u96C5\u9ED1"}]," 123 "]}}]} 前面提到poll_type是group_message,代表组消息,from_uin和上一篇提到的gid一样,都是组ID,to_uin还是自己的ID,send_uin是发件人的 uin,即组 ID。成员相对于你的uin和上一篇介绍的获取群组成员的uin是一样的。消息内容的格式与好友消息的格式相同。
4.临时会话消息
{"retcode":0,"result":[{"poll_type":"sess_message","value":{"msg_id":2329,"from_uin":3921021009,"to_uin":2368295990,"msg_id2" :62551,"msg_type":140,"reply_ip":180061935,"time":1433159288,"id":2381142083,"ruin":3277086849,"service_type":0,"flags":{"text":1, "pic":1,"file":1,"audio":1,"video":1},"content":[["font",{"size":9,"color":"000000", "style":[0,0,0],"name":"\u5FAE\u8F6F\u96C5\u9ED1"}],"123 "]}}]}from_uin 是这个陌生人相对于你的身份,其他参数没有区别。
几天前,我还仔细研究了聊天机器人是如何实现的。事实上,真正的智能聊天机器人(可以学习和成长)太难实现了。现在的QQ聊天机器人一般都是设置关键词和回复内容。当消息内容中的指定字段匹配时,发送设置的回复内容。这样的机器人真的很无聊和死板。不过,如果只是一个客服机器人,那还是蛮合适的。使用上述方法接收消息并以指定内容回复客户。对智商要求不高,答案内容可自行设置。
今天看了各种免费的API,在百度API开放接口上看到了图灵机器人的API。和我们自己设计的比起来还不错,词库也比较强大(毕竟大家教的内容都进同一个库,我们叫同一个库)。不仅可以简单的聊天,还提供了很多其他的功能,所以如果你觉得设计麻烦,可以把程序当做中转站。收到消息内容后,调用图灵机器人的API,然后将返回的数据发回给object。 (但是图灵机器人API返回的格式不固定,因为功能比较强大,返回结果的类型会比较多,而且我也不懂它的API,所以不知道怎么控制返回结果和结果处理。比较麻烦)