小I机器人接口[PHP版本 08.12.7]

来源:互联网 发布:阿里开源项目java 编辑:程序博客网 时间:2024/04/19 23:31

以前研究过小I的WebAPI,那个时候很简单,就是一个Http包完成说话、回答

但是现在的小I WebApi复杂了一些,网上也没有现成的资料,于是我着手自己开发。

通过抓包,发现小I WebApi通信原理如下:

以服务器202.109.73.87上机器人/engine/flashrobot2/为例:

1、首先调用/engine/flashrobot2/webbot.js,获得SID,下方以{{SID}}代替

2、调用/engine/flashrobot2/send.js?SID={{SID}}&USR={{SID}}&CMD=JOIN&r=

3、调用/engine/flashrobot2/recv.js?SID={{SID}}&USR={{SID}}&r=

以上完成登录,并且把广告也清除了,然后开始聊天:

4、第一步先调用/engine/flashrobot2/recv.js?SID={{SID}}&USR={{SID}}&r=,不要recv,也不要关闭此连接

5、调用/engine/flashrobot2/send.js?SID={{SID}}&USR={{SID}}&CMD=CHAT&SIG=You&MSG={{MESSAGE}}

其中{{MESSAGE}}为要发的内容,编码为utf-8

6、从刚才调用的recv.js的连接中,recv出内容,用正则表达式提取就OK。

 

PHP类如下:

PHP代码
  1. <?php   
  2. date_default_timezone_set("Asia/Shanghai");   
  3.   
  4. class XiaoI   
  5. {   
  6.     //by Hackfan   
  7.     public $sid = '';   
  8.   
  9.     public function __construct($sid = false)   
  10.     {   
  11.         if(!$sid)   
  12.         {   
  13.             $this->join();   
  14.         }   
  15.         else  
  16.         {   
  17.             $this->sid = $sid;   
  18.         }   
  19.     }   
  20.     public function join()   
  21.     {   
  22.         $fp = fsockopen('202.109.73.87', 80);   
  23.         fwrite($fp'GET /engine/flashrobot2/webbot.js HTTP/1.1  
  24. Connection: Close  
  25. Host: 202.109.73.87  
  26.  
  27. ');   
  28.         $r = '';   
  29.         while(!feof($fp))   
  30.         {   
  31.             $r .= fgets($fp, 512);   
  32.         }   
  33.         fclose($fp);   
  34.         preg_match('!var __sessionId = "(/d+)";!',$r$match);   
  35.         $this->sid = $match[1];   
  36.   
  37.         $fp = fsockopen('202.109.73.87', 80);   
  38.         fwrite($fp'GET /engine/flashrobot2/send.js?SID='.$this->sid.'&USR='.$this->sid.'&CMD=JOIN&r= HTTP/1.1  
  39. Connection: Close  
  40. Host: 202.109.73.87  
  41.  
  42. ');   
  43.         fclose($fp);   
  44.   
  45.         $fpr = fsockopen('202.109.73.87', 80);   
  46.         fwrite($fpr'GET /engine/flashrobot2/recv.js?SID='.$this->sid.'&USR='.$this->sid.'&r= HTTP/1.1  
  47. Connection: Close  
  48. Host: 202.109.73.87  
  49.  
  50. ');   
  51.         fclose($fpr);   
  52.   
  53.     }   
  54.     public function chat($msg)   
  55.     {   
  56.         $fpr = fsockopen('202.109.73.87', 80);   
  57.         fwrite($fpr'GET /engine/flashrobot2/recv.js?SID='.$this->sid.'&USR='.$this->sid.'&r= HTTP/1.1  
  58. Connection: Close  
  59. Host: 202.109.73.87  
  60.  
  61. ');   
  62.         $fps = fsockopen('202.109.73.87', 80);   
  63.         fwrite($fps'GET /engine/flashrobot2/send.js?SID='.$this->sid.'&USR='.$this->sid.'&CMD=CHAT&SIG=You&MSG='.urlencode($msg).'&FTN=&FTS=&FTC=&r= HTTP/1.1  
  64. Connection: Close  
  65. Host: 202.109.73.87  
  66.  
  67. ');   
  68.         fclose($fps);   
  69.   
  70.         $r = '';   
  71.         while(!feof($fpr))   
  72.         {   
  73.             $r .= fgets($fpr, 512);   
  74.         }   
  75.         fclose($fpr);   
  76.   
  77.         if(preg_match('!"MSG":"(.*?)"!'str_replace(array("/r""/n"), array(''), $r), $match))   
  78.         {   
  79.             return $match[1];   
  80.         }   
  81.         else  
  82.         {   
  83.             return false;   
  84.         }   
  85.     }   
  86. }   
  87. ?>  

具体运行代码如下:

PHP代码
  1. <?php   
  2. require('xiaoi.php');   
  3. $i = new XiaoI();   
  4. while(1)   
  5. {   
  6.     echo 'me: ';   
  7.     $s = trim(fgets(STDIN));   
  8.     $s = iconv('gb2312''utf-8'$s);   
  9.     echo 'xiaoi: '.$i->chat($s)."/n";   
  10. }  

运行效果如下:

大小: 38.77 K尺寸: 430 x 363浏览: 27 次点击打开新窗口浏览全图

作者:Hackfan,转载请保留,谢谢。

原创粉丝点击