以前做了个qq机器人,用的xiaoi进行回复,大概年初的时候,xiao的服务器突然没有响应了,等了几天也一样。后来登录网站发现网站上的小i也不工作了。
后来在他们的网站上发现了新的小i聊天界面,发现协议改了,前几天花了一点时间,把我的机器人更新了一下,又可以工作了。以前的协议是我在网上搜到的,新的协议网上还没有相关文章,我自己抓包进行了分析,发现比老版的协议还简单很多。
在新的网站上小i有很多展现方法,但是那个web的对话框用firebug抓不到数据,估计是frame的问题,于是选取的短信方式的对话框。
新的接口地址是:http://122.227.43.245/robot/demo/sms/sms-demo.action。直接向这个地址post数据就可以了(实际测试中get方法也行),参数只需content,就是聊天的内容,用urlencode编码,然后就能直接收到小i的回复。但是这个网址会给一个cookie,这个是有用的,用来判断这条消息是不是同一个人发送的。比如你多次发送一个相同的消息,他会回复“你怎么总是重复一句话”之类的。这个cookie的有效期是关闭浏览器会话,所以如果模拟post,理论上是无限期的,但是最好还是一段时间获取一个新的cookie
所以第一步先获取cookie,直接get访问上面的接口即可,把cookie保存。以下是php函数:
|
function xiinit() //初始化获取cookie { $url = 'http://122.227.43.245/robot/demo/sms/sms-demo.action'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_HEADER,1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $r = curl_exec($ch); curl_close($ch); preg_match('/XISESSIONID=(.*);/', $r, $match); //cookie为XISESSIONID $sid = $match[1]; return $sid; //返回cookie值 } |
接下来就是聊天了!
|
function xichat($msg, $sid) //msg是要发送给小i的内容,sid是初始化获取的cookie值 { $url = 'http://122.227.43.245/robot/demo/sms/sms-demo.action?content='.urlencode($msg); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $cookie = 'XISESSIONID='.$sid; curl_setopt($ch, CURLOPT_COOKIE , $cookie); $r=curl_exec($ch); curl_close($ch); return trim($r); //返回小i的回复 } |
就是这样,挺简单的。