用QQ机器人实现网站与QQ整合方案
时间:2010-07-11
来源:互联网
这个机器人平台提供API和事件回调机制。你可以使用API来管理和控制你的机器人,当机器人接收到用户消息等事件发生时,会将事件以HTTP POST的方式通报到你的网站,由你的网站做出进一步处理。
API文档:http://im.jecat.cn/?c=APIDocument
一个简单的PHP网站演示:http://im.jecat.cn/demo
这个项目刚刚完成,还在内测调整中,欢迎参与测试,我期待大家能够基于这个平台开发出各种有趣的功能 :D
作者: alee 发布时间: 2010-07-11
- <?php
- ignore_user_abort(true) ; // ignore_user_abort()不是必须的,但可以使你的网站不会因为响应缓慢,漏掉消息处理
-
- //////////////////////////////////////////////////////////////////////////////////////////////////
- // description
- /*
- 这个演示程序实现了以下功能:
- 接收用户发送给 im机器人 的消息,将消息简单处理后,在 im 上返回给用户
-
- 部署步骤:
- 1、你需要在 http://im.jecat.cn 上建立服务,并添加一个 qq 机器人。
- 2、在这个文件中设置好 服务ID/密码 ,上传到你的网站。
- 3、将这个文件的url ,做为 im.jecat.cn 服务的“事件接口”。
-
- 处理流程:
- 在 im.jecat.cn 平台的管理界面启动机器人后,用另一个账号,加机器人为好友。
- 向机器人发送消息,机器人会将消息POST到这个文件。
- 在这里接收到消息后,不做处理,简单地将消息原文返回给用户。
-
- */
-
- //////////////////////////////////////////////////////////////////////////////////////////////////
- // configure
- if(!defined('IMJECATCN_SID'))
- {
- define('IMJECATCN_SID','您在im.jecat.cn的服务ID') ;
- define('IMJECATCN_SPWD','您在im.jecat.cn的服务密码') ;
-
- define('IMJECATCN_HOST','im.jecat.cn') ;
- define('IMJECATCN_PORT',80) ;
- define('IMJECATCN_API_BASE','http://'.IMJECATCN_HOST.'/api/?sSId='.IMJECATCN_SID.'&sSPwd='.IMJECATCN_SPWD) ;
- }
-
-
- //////////////////////////////////////////////////////////////////////////////////////////////////
- // execute
- if( $_REQUEST['sEvent']=='receive_msg' )
- {
- if($_REQUEST['sSId']==IMJECATCN_SID and $_REQUEST['sSPwd']==IMJECATCN_SPWD)
- {
- // 通过 qq 发送消息给指定用户
- IM_Post_Data('SendMessage',array(
- 'sIM'=>$_REQUEST['sIM'] ,
- 'sIMId'=>$_REQUEST['sIMId'] ,
- 'sRId'=>$_REQUEST['sRId'] ,
- 'sMsg'=>"收到了您的消息:".$_REQUEST['sMsg']
- )) ;
- }
- else
- {
- echo "service id or password wrong" ;
- }
- }
- else
- {
- echo "anything to do ... " ;
- }
-
-
- //////////////////////////////////////////////////////////////////////////////////////////////////
- // Library
- function _im_post_data_make_stream($arrData,$sParentKey=null)
- {
- $arrElements = array() ;
- foreach($arrData as $sKey=>$Data)
- {
- $sKey = urlencode($sKey) ;
- if($sParentKey)
- {
- $sKey = "{$sParentKey}%5B{$sKey}%5D" ;
- }
-
- if( is_array($Data) or is_object($Data) )
- {
- _im_post_data_make_stream($Data,$sKey) ;
- }
-
- else
- {
- $arrElements[] = $sKey.'='.urlencode(strval($Data)) ;
- }
- }
-
- return implode('&',$arrElements) ;
- }
-
- /**
- * 将数据 post 到 im.jecat.cn
- * 如果需要取得 api 的返回结果,使用 file_get_contents
- *
- * @return string, bool
- */
- function im_post_data($sApi,$arrData,$bAsync=true)
- {
- if( !isset($arrData['sSId']) )
- {
- $arrData['sSId'] = IMJECATCN_SID ;
- }
- if( !isset($arrData['sSPwd']) )
- {
- $arrData['sSPwd'] = IMJECATCN_SPWD ;
- }
- if($sApi)
- {
-
- $arrData['api'] = $sApi ;
- }
-
- $sBody = _im_post_data_make_stream($arrData) ;
-
- // header
- $sHttpStream = "POST /api/ HTTP/1.1\r\n" ;
- $sHttpStream.= "Host: im.jecat.cn\r\n" ;
- $sHttpStream.= "User-Agent: imjecatcn-lib\r\n" ;
- $sHttpStream.= "Accept: text/html,application/xhtml+xml,application/xml\r\n" ;
- $sHttpStream.= "Accept-Language: zh-cn,zh\r\n" ;
- $sHttpStream.= "Accept-Charset: utf-8\r\n" ;
- $sHttpStream.= "Connection: close\r\n" ;
- $sHttpStream.= "Content-Length: ".strlen($sBody)."\r\n" ;
- $sHttpStream.= "Content-Type: application/x-www-form-urlencoded\r\n" ;
- $sHttpStream.= "\r\n" ;
-
- // body
- $sHttpStream.= $sBody ;
-
- // post
- $nErr = $sErr = 0 ;
- if( !$hSock=fsockopen(IMJECATCN_HOST,IMJECATCN_PORT,$nErr,$sErr,5) )
- {
- // echo "链接 im.jecat.cn 出错" ;
- return false ;
- }
-
- $nSend=fwrite($hSock, $sHttpStream) ;
-
-
- // POST 发送完毕,立刻断开,不用等待读取 api 的处理结果
- if($bAsync)
- {
- // 关闭连接
- fclose($hSock);
-
- return true ;
- }
-
- // 同步访问,等待 im.jecat.cn 返回回应
- else
- {
- $sResponse = '' ;
- while(!feof($hSock))
- {
- $sResponse.= fread($hSock,10240) ;
- }
-
- list(,$sHttpBody) = explode("\r\n\r\n",$sResponse,2) ;
- return $sHttpBody ;
- }
-
- return true ;
- }
- ?>
作者: alee 发布时间: 2010-07-11
作者: solo91 发布时间: 2010-07-11
作者: php_lw 发布时间: 2010-07-11
作者: fkj 发布时间: 2010-07-11
当流程有出错时, 那就只有杀死php进程才可以恢复了, 建议不要使用.
作者: spser 发布时间: 2010-07-12
作者: wu1990 发布时间: 2010-07-12
作者: quanhaier 发布时间: 2010-07-12
作者: niceup 发布时间: 2010-07-12
quanhaier 发表于 2010-7-12 11:12
如果你有自己的服务器,可以运行在自己的服务器上。没有自己的服务器,可以在 im.jecat.cn 上启动。
作者: alee 发布时间: 2010-07-12
作者: lezu 发布时间: 2010-07-12
作者: cslgpl 发布时间: 2010-07-12
作者: kenus 发布时间: 2010-07-12
作者: naodai 发布时间: 2010-07-14
作者: lcbzai4 发布时间: 2010-07-14
作者: kth007 发布时间: 2010-07-14
编译太简单,根据你的gcc环境,用不同的 makefile 文件make 以下就好了,实在没啥可说的,写教程有点小题大作了,呵呵 。
作者: alee 发布时间: 2010-07-22
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28