小I机器人接口[PHP版本 08.12.7]
来源:互联网 发布:阿里开源项目java 编辑:程序博客网 时间:2024/04/19 23:31
http://www.hackfan.net/?action=show&id=16
Submitted by hackfan on 2008, December 7, 10:26 PM. B/S & LAMP
以前研究过小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
- date_default_timezone_set("Asia/Shanghai");
- class XiaoI
- {
- //by Hackfan
- public $sid = '';
- public function __construct($sid = false)
- {
- if(!$sid)
- {
- $this->join();
- }
- else
- {
- $this->sid = $sid;
- }
- }
- public function join()
- {
- $fp = fsockopen('202.109.73.87', 80);
- fwrite($fp, 'GET /engine/flashrobot2/webbot.js HTTP/1.1
- Connection: Close
- Host: 202.109.73.87
- ');
- $r = '';
- while(!feof($fp))
- {
- $r .= fgets($fp, 512);
- }
- fclose($fp);
- preg_match('!var __sessionId = "(/d+)";!',$r, $match);
- $this->sid = $match[1];
- $fp = fsockopen('202.109.73.87', 80);
- fwrite($fp, 'GET /engine/flashrobot2/send.js?SID='.$this->sid.'&USR='.$this->sid.'&CMD=JOIN&r= HTTP/1.1
- Connection: Close
- Host: 202.109.73.87
- ');
- fclose($fp);
- $fpr = fsockopen('202.109.73.87', 80);
- fwrite($fpr, 'GET /engine/flashrobot2/recv.js?SID='.$this->sid.'&USR='.$this->sid.'&r= HTTP/1.1
- Connection: Close
- Host: 202.109.73.87
- ');
- fclose($fpr);
- }
- public function chat($msg)
- {
- $fpr = fsockopen('202.109.73.87', 80);
- fwrite($fpr, 'GET /engine/flashrobot2/recv.js?SID='.$this->sid.'&USR='.$this->sid.'&r= HTTP/1.1
- Connection: Close
- Host: 202.109.73.87
- ');
- $fps = fsockopen('202.109.73.87', 80);
- 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
- Connection: Close
- Host: 202.109.73.87
- ');
- fclose($fps);
- $r = '';
- while(!feof($fpr))
- {
- $r .= fgets($fpr, 512);
- }
- fclose($fpr);
- if(preg_match('!"MSG":"(.*?)"!', str_replace(array("/r", "/n"), array(''), $r), $match))
- {
- return $match[1];
- }
- else
- {
- return false;
- }
- }
- }
- ?>
具体运行代码如下:
- <?php
- require('xiaoi.php');
- $i = new XiaoI();
- while(1)
- {
- echo 'me: ';
- $s = trim(fgets(STDIN));
- $s = iconv('gb2312', 'utf-8', $s);
- echo 'xiaoi: '.$i->chat($s)."/n";
- }
运行效果如下:
作者:Hackfan,转载请保留,谢谢。
- 小I机器人接口[PHP版本 08.12.7]
- java调用小i机器人接口API
- 小i机器人
- 小I机器人初探
- 可爱的小I机器人
- java 开发小i机器人
- 打造Android的中文Siri语音助手(一)——小I机器人的接口
- 打造Android的中文Siri语音助手(一)——小I机器人的接口
- 打造Android的中文Siri语音助手(一)——小I机器人的接口
- 打造Android的中文Siri语音助手(一)——小I机器人的接口
- 打造Android的中文Siri语音助手(一)——小I机器人的接口
- 打造Android的中文Siri语音助手(一)——小I机器人的接口
- 小I机器人-2004-11-18
- 与小i机器人的无聊对话
- java版微信调用小i机器人
- python微信机器人之小i
- 小i聊天机器人自定义应用
- 清除机器人上网伴侣小i 机器人木马插件
- 用PHP写的QQ Client,可以登陆、登出、收发消息、添加好友
- Unix/Linux环境下的Socket编程
- 基于并行EBE-CG方法的有限元求解程序(从我的毕业论文中节选出来的)
- PHP SQL 注入攻击的技术实现以及预防办法
- 简单介绍asp模式与saas模式
- 小I机器人接口[PHP版本 08.12.7]
- asp.net实现伪静态
- window.open子页面传值给父页面
- window.showModelDialog子页面传值给父页面
- Tomcat 的数据库连接池设置与应用(转载)
- python 串口通信
- 突发模式
- oracle数据库开发的一些经验
- 墨菲定理