ICCMO微信公众账号开发系列(2)打造微信聊天机器人

来源:互联网 发布:淘宝上买圣衣神话 编辑:程序博客网 时间:2024/06/11 18:54

昨天我们已经成功的接入了微信公众账号。今天咱们来做一个微信聊天机器人。这个就需要一点点PHP的知识了。如果你不懂PHP呢,没关系,跟着一步一步做也 可以做出来。
这是在昨天的基础上做的,如果你还不会接入微信公众账号的话,请看昨天的博客,ICC微信公众账号开发系列(1)接入微信公众平台

咱们这个机器人有什么功能呢?
1.娱乐
聊天 笑话 故事 成语接龙 吉凶 新闻 星座

2.查询
百科问答 图片天气 菜谱 快递 计算日期

3.出行
飞机 列车

这么牛逼的机器人,咱们能写出来吗?
下面来我们说说聊天机器人实现的原理。
咱们不是真的写一个机器人程序,而是调用别人写好的接口(不重复造轮子嘛,哈哈)。如果你真的对机器人感兴趣,可以自己去研究。废话不多说了。
继续说原理
1.接口是什么?
官方的说法是这么说的,接口:是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。通俗的讲就是一段url地址。
2.怎么调用接口?
这就是这个咱们这个微信机器人实现的关键了。这里用到了PHP的一个神奇的函数file_get_contents。(或者用curl也可以)什么简单咱们用什么,之后的博客我们会讲CURL的应用。CURL在微信开发应用很广泛。
怎么调用呢?
直接在file_get_contens()传入你的API就可以了。具体实现待会说。
好了,原理就是这么简单。

下面开始动手打造咱们的微信智能机器人。

一.申请接口
上面的原理讲到要调用接口,首先我们得有接口啊。所以第一步首先去申请一个接口。去哪里申请呢?现在网上有很多开放的接口,比如小黄鸡啊图灵啊。今天咱们用的是图灵的接口(学计算机的应该都知道图灵,那个牛逼哄哄的人物,但咱们今天说的不是他)。
①注册一个图灵机器人官网的账号
注册地址:图灵机器人官网
点击进入图灵机器人的官网,在右上角找到注册按钮,点击注册,
注册
注册成功之后登陆咱们的邮箱点击验证链接跳转到咱们的个人中心,你会看如下页面:
个人中心

API KEY:这是我们调用接口需要用到的key。
把它复制下来。
9d208e0c64d9a7b13295b770b932f927
不是复制下面的微信地址哦。注意。
AIP等级:一般用户可以每天调用5000次,如果你玩得不过瘾的话,可以按照下面的方式升级。升级很简单,你只要复制下面的链接,通过下面的链接自己再注册一个就好了。就是给他拉人头嘛。
好,到这里咱们的接口就拿到手了。就是这么简单。
②调用接口
咱们先在电脑上玩一玩这个接口。
这玩意怎么调用呢。咱们新建一个test.php文件。我假设你有PHP基础,没有也没关系。看看就行了。咱们这里主要是原理弄明白。
调用方式:AIP地址+key+info info就是微信发送的消息
具体的url形式是:$url=$apiURL."?key=".$apiKey."&info=".$reqInfo;
以get方式请求.

<?php$apiKey = "9d208e0c64d9a7b13295b770b932f927"; //这是刚才咱们复制的key$apiURL = "http://www.tuling123.com/openapi/api";//这个是咱们要之前说的接口,就是一段url地址嘛// 这句话的意思是设置请求的编码,图灵要求用urf-8编码header("Content-type: text/html; charset=utf-8"); $reqInfo = "你好"; //这是我们模拟微信发的一条信息,跟机器人问个好//现在咱们把这个请的接口拼接起来$url=$apiURL."?key=".$apiKey."&info=".$reqInfo;     $res =file_get_contents($url);//调用接口     echo $res; 

咱们来运行一把,看看它给我们返回的是什么.
返回结果
看到没,它给咱们返回了下面这一串。
这是一段JSON格式的代码json是一种键值对的数据格式。里面的code是返回的状态码,text是文本信息,这就是咱们想要的东西。
下面这张图是状态码对应的信息:
状态码
好,到这里咱们也学会了怎么调用接口了。
咱们把接口调用封装成一个函数,待会给微信调用。
这是咱们的index.php文件。

<?php     function tulingAPI($keyword) {        $apiURL = "http://www.tuling123.com/openapi/api";//接口地址        $apiKey = "9d208e0c64d9a7b13295b770b932f927"; //这是刚才咱们复制的key        $api_url =  $apiURL. "?key=" .$apiKey  . "&info=" . $keyword;        header("Content-type: text/html; charset=utf-8");         $result = file_get_contents ( $api_url );//调用图灵接口        $result = json_decode ( $result, true );//这是PHP解析JSON数据格式的一个函数,得到的是数组        return  $result ['text'];    }

二.微信调用图灵接口
这一步咱们就把封装好的函数给微信调用
直接上代码

<?php/**  * 微信机器人  *///define your tokeninclude "robot.php"//引入咱们的图灵机器人函数define("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();if (isset($_GET['echostr'])) {    $wechatObj->valid();}else{  $wechatObj->responseMsg();  }class wechatCallbackapiTest{    public function valid()    {        $echoStr = $_GET["echostr"];        //valid signature , option        if($this->checkSignature()){            header('content-type:text');            echo $echoStr;            exit;        }    }    public function responseMsg()    {        //get post data, May be due to the different environments        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];        //extract post data        if (!empty($postStr)){                /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,                   the best way is to check the validity of xml by yourself */                libxml_disable_entity_loader(true);                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);                $fromUsername = $postObj->FromUserName;                $toUsername = $postObj->ToUserName;                $keyword = trim($postObj->Content);                $time = time();                $textTpl = "<xml>                            <ToUserName><![CDATA[%s]]></ToUserName>                            <FromUserName><![CDATA[%s]]></FromUserName>                            <CreateTime>%s</CreateTime>                            <MsgType><![CDATA[%s]]></MsgType>                            <Content><![CDATA[%s]]></Content>                            <FuncFlag>0</FuncFlag>                            </xml>";                             if(!empty( $keyword ))                {                    $msgType = "text";                    $contentStr = tulingAPI($keyword);//调用图灵机器人                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);                    echo $resultStr;                }else{                    echo "Input something...";                }        }else {            echo "";            exit;        }    }    private function checkSignature()    {        // you must define TOKEN by yourself        if (!defined("TOKEN")) {            throw new Exception('TOKEN is not defined!');        }        $signature = $_GET["signature"];        $timestamp = $_GET["timestamp"];        $nonce = $_GET["nonce"];        $token = TOKEN;        $tmpArr = array($token, $timestamp, $nonce);        // use SORT_STRING rule        sort($tmpArr, SORT_STRING);        $tmpStr = implode( $tmpArr );        $tmpStr = sha1( $tmpStr );        if( $tmpStr == $signature ){            return true;        }else{            return false;        }    }}?>

好,把这两个文件上传到SAE。到这里咱们微信聊天的机器人就打造好了。打开微信咱们的微信玩一把。
这里写图片描述

如果你觉得你的机器人不够聪明的话,你可以在这里调教它。
调教
今天就写到这里了。有什么问题留言或者QQ:309062037|备注iccmo,交流QQ群:429207338
完整代码下载包:点击下载

0 0