打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[PHP][微信接口]启用新浪分词服务的简易聊天机器人
本帖最后由 灵感水手 于 2012-12-30 18:55 编辑

看了论坛里几个关于微信接口的应用的帖子,自已利用新浪分词服务做了简易的聊天功能,可关注微信号 easyrobot 测试:


简易安装部署步骤:

1.申请新浪SAE账号  http://sae.sina.com.cn/

2.在SAE平台创建PHP应用,并创建chat.php文件(使用SVN上传或直接在SAE后台编辑);

3.注册微信公众平台账号 http://mp.weixin.qq.com/

4.用微信公众号登录后台,在自动回复设置中设置接口配置URL 和 TOKEN;

5.在点击“提交”前需将SAE代码中 //$wechatObj->valid(); 这一句放开,绑定完成后再恢复。

注意:一定要开启 SAE 的 KVDB 和分词服务。


页面上贴的代码本来是可以直接用的,由于论坛页面功能有一些限制造成不便,比如 empty 会自动变成 emptyempty。
我把源码帖到个人网站上了,可以到此外下载:http://www.easyapple.net/?p=1056
或者从附件下载:
以下是完整源码:
PHP代码
  1. define('TOKEN','此处填写你在微信后台设置的TOKEN');
  2. $wechatObj = new wechatCallbackapiTest();
  3. //$wechatObj->valid();  //首次验证时放开此句注释掉下面一句,验证完成时恢复
  4. $wechatObj->responseMsg();
  5. class wechatCallbackapiTest
  6. {
  7.   public function valid()
  8.   {
  9.   $echoStr = $_GET['echostr'];
  10.   if($this->checkSignature())
  11.   {
  12.   echo $echoStr;
  13.   exit;
  14.   }
  15.   }
  16.   public function responseMsg()
  17.   {
  18.   $postStr = $GLOBALS['HTTP_RAW_POST_DATA'];
  19.   if (!emptyempty($postStr))
  20.   {
  21.   $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  22.   $fromUsername = $postObj->FromUserName;
  23.   $toUsername = $postObj->ToUserName;
  24.   $keyword = trim($postObj->Content);
  25.   $time = time();        
  26.   $textTpl = '
  27.   
  28.   
  29.   %s
  30.   
  31.   
  32.   0
  33.   ';
  34.   
  35.   if(!emptyempty( $keyword ))
  36.   {
  37.     $msgType = 'text';
  38.     $commonInfo = new commonInfo();
  39.     $ipaddr = $commonInfo->getClientIp();
  40.     $cityinfo = $commonInfo->getIpCity($ipaddr);
  41.     $cityname = $cityinfo;
  42.     $exinfo = $cityinfo;
  43.     $pos = strpos($cityinfo, ' ', 3);
  44.     if ($pos > -1)
  45.     {
  46.     $cityname = substr($cityinfo, 0, $pos);
  47.     $exinfo = substr($cityinfo, $pos + 1, strlen($cityinfo) - $pos - 1);
  48.     }
  49.     if (strlen($cityname) > 3)
  50.     {
  51.     $cityflag = substr($cityname, 0, strlen($cityname) - 3);
  52.     }
  53.     else
  54.     {
  55.     $cityflag = '地球';
  56.     }
  57.     $welcomeinfo = '灵感机器人欢迎你!';
  58.     $contentStr = '来自'.$cityflag.$exinfo.'的朋友'.$welcomeinfo.'\r\n';
  59.     $contentStr .= '你的IP地址是:' . $ipaddr . '\r\n';
  60.     
  61.     if(strtolower($keyword) == 'weather' || $keyword == '天气')
  62.     {
  63.     //Wether Report
  64.     $contentStr .= $commonInfo->getWeatherInfo($cityflag);
  65.     }
  66.     else
  67.     {
  68.     //Robot
  69.     $talk = new talk();
  70.     $reply = $talk->reply($keyword);
  71.     if (emptyempty($reply))
  72.     {
  73.     //虫洞查询
  74.     $tipinfo = '你可以输入‘help’教我学习聊天,或者输入‘天气’看看天气情况。\r\n你说的内容我不太懂,所以上网查了一下 ^_^\r\n\r\n';
  75.     $queryinfo = file_get_contents('http://wap.unidust.cn/api/searchout.do?type=client&ch=1001&info='.$keyword);
  76.     $pos = strpos($queryinfo,$keyword);
  77.     $queryinfo = mb_strcut($queryinfo,$pos,1024,'utf-8');
  78.     $queryinfo = str_replace('uzoo.cn','www.easyapple.net',$queryinfo);
  79.     $queryinfo = str_replace('虫洞','EasyApple',$queryinfo);
  80.     $reply = $tipinfo.$queryinfo;
  81.     //自主学习
  82.     $answer = $talk->getAnswer($keyword, substr($queryinfo,strlen($keyword),512));    
  83.     if(emptyempty($answer))
  84.     {
  85.       $contentStr .= $reply;
  86.     }
  87.     else
  88.     {
  89.       $contentStr = $answer;
  90.     }
  91.     }
  92.     else
  93.     {
  94.     $contentStr = $reply;
  95.     }    
  96.     }
  97.     
  98.     if (emptyempty($contentStr))
  99.     {
  100.     $contentStr = '亲爱的,跟你聊天我学到了不少东西,此时我不知道说什么好。。。';
  101.     }
  102.     $resultStr = sprintf ( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr );
  103.     echo $resultStr;
  104.   }
  105.   else
  106.   {
  107.     echo 'Input something…';
  108.   }
  109.   }
  110.   else
  111.   {
  112.   echo '';
  113.   exit;
  114.   }
  115.   }
  116.   private function checkSignature()
  117.   {
  118.   $signature = $_GET['signature'];
  119.   $timestamp = $_GET['timestamp'];
  120.   $nonce = $_GET['nonce'];
  121.   $token = TOKEN;
  122.   $tmpArr = array($token, $timestamp, $nonce);
  123.   sort($tmpArr);
  124.   $tmpStr = implode( $tmpArr );
  125.   $tmpStr = sha1( $tmpStr );
  126.   if( $tmpStr == $signature )
  127.   {
  128.   return true;
  129.   }
  130.   else
  131.   {
  132.   return false;
  133.   }
  134.   }
  135. }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用SAE分词,实现微信智能语音查询
使用memcached缓存access_token - 傻瓜式微信开发教程25
微信公众平台开发(一) 配置接口
微信公众平台技术实操(8):用微信开发模式做欢迎词
如何使用PHP OOP插入多个单选按钮值
CGCTF Web
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服