2018-11-07 11:32:42 happy_xiaoru 阅读数 457
  • 安卓图灵聊天机器人接入开发

    通过本课程的学习,你将会学会图灵智能聊天机器人的接口开发,通过本次项目实战,你讲学会json数据的生成和解析,API文档的阅读和接口开发,http post 请求,动态增加View等核心知识点

    282 人正在学习 去看看 朱祚华

首先打开图灵机器人网址:在百度搜索"图灵机器人",进入官网

1.点击注册按钮,进行注册:

2.注册成功后,就可以创建自己的机器人了

选择创建机器人:

我是在微信公众号中聊天使用的,所以选择“微信公众号—其他—粉丝活跃-聊天调侃”,可以按照你的使用场景进行创建,如果是微信公众号,选择完毕后点击“创建”按钮,需要用微信公众号管理员账号扫描一下二维码,进行授权,授权成功入下图:

会提示你,可以进行聊天了,你可以开始聊了,也可以再设置一下小机器人的人物,选择“人物设置”:

可以给机器人起个名字,设置姓名、年龄、星座,设置完成可以开始聊天了!

图灵机器人,除了可以聊天,还可以查天气,讲笑话,讲故事,聊星座……哈哈

如果你有自己的公众号,也可以试一下,如果没有也没关系,可以关注我的公众号,跟小时同学聊一下,

您可以在添加公众号中搜索随享时光,进行关注,或者扫描下方二维码:

随享时光

2016-03-12 17:39:09 qq_27629109 阅读数 5603
  • 安卓图灵聊天机器人接入开发

    通过本课程的学习,你将会学会图灵智能聊天机器人的接口开发,通过本次项目实战,你讲学会json数据的生成和解析,API文档的阅读和接口开发,http post 请求,动态增加View等核心知识点

    282 人正在学习 去看看 朱祚华

准备电商比赛的时候申请了个公众号,因为之前错误地申请了订阅号,还是个人类型的,所以基本也没法开发什么功能了。于是就想到之前很火的小黄鸡聊天机器人。不过小黄鸡的接口是要收费的,所以选用了图灵机器人(http://www.tuling123.com/);也能实现自动聊天。

图灵机器人后台提供了两种接入方式,一种是API接入,一种是微信接入。使用微信接入非常简单,只要在微信后台-开发-基本配置里填写图灵机器人提供的URL和token值就可以。不过这样一来整个公众号只能实现图灵机器人的功能,几乎浪费了一个公众号。所以选择使用API接入。这里使用新浪云提供的SAE。下面是代码。

<?php
header("Content-type: text/html; charset=utf-8");
//以下为固定用法,实现和微信的对接、验证
define("TOKEN", "callTuling");

$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
    $wechatObj->valid();
}else{
    $wechatObj->responseMsg();
}

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }

    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );

        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }

    public function responseMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)){
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $RX_TYPE = trim($postObj->MsgType);

            switch ($RX_TYPE)
            {
                case "text":
                    $resultStr = $this->receiveText($postObj);
                    break;
                case "event":
                    $resultStr = $this->receiveEvent($postObj);
                    break;
            }
            echo $resultStr;
        }else {
            echo "";
            exit;
        }
    }
//处理接受到用户消息的事件
    private function receiveText($object)
    {
        $funcFlag = 0;
        $keyword = trim($object->Content);
        $contentStr = callTuling($keyword);
        $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
        return $resultStr;
    }
//处理公众号被关注的事件
    private function receiveEvent($object)
    {
        $contentStr = "";
        switch ($object->Event)
        {
            case "subscribe":
                $contentStr = "你终于来了";
        }
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }
//把图灵机器人返回的数据转换成微信使用的数据格式
    private function transmitText($object, $content, $flag = 0)
    {
        $textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>%d</FuncFlag>
</xml>";
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
        return $resultStr;
    }
}//创建函数调用图灵机器人接口
function callTuling($keyword)
{
    $apiKey = "******"; //填写后台提供的key
    $apiURL = "http://www.tuling123.com/openapi/api?key=KEY&info=INFO"; 

    $reqInfo = $keyword; 
    $url = str_replace("INFO", $reqInfo, str_replace("KEY", $apiKey, $apiURL));
    $ch = curl_init(); 
    curl_setopt ($ch, CURLOPT_URL, $url); 
   curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    $file_contents = curl_exec($ch);
    curl_close($ch); 
//获取图灵机器人返回的数据,并根据code值的不同获取到不用的数据
    $message = json_decode($file_contents,true);
    $result = "";
    if ($message['code'] == 100000){
        $result = $message['text'];
    }else if ($message['code'] == 200000){
        $text = $message['text'];
        $url = $message['url'];
        $result = $text . " " . $url;
    }else if ($message['code'] == 302000){
        $text = $message['text'];
        $url = $message['list'][0]['detailurl'];
        $result = $text . " " . $url;
    }else {
        $result = "好好说话我们还是基佬";
    }
    return $result;
}
?>


2015-04-22 20:30:00 hy245120020 阅读数 907
  • 安卓图灵聊天机器人接入开发

    通过本课程的学习,你将会学会图灵智能聊天机器人的接口开发,通过本次项目实战,你讲学会json数据的生成和解析,API文档的阅读和接口开发,http post 请求,动态增加View等核心知识点

    282 人正在学习 去看看 朱祚华

web.xml配置

  <servlet>
    <servlet-name>weixinServlet</servlet-name>
    <servlet-class>com.imooc.servlet.WeixinServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>weixinServlet</servlet-name>
    <url-pattern>/wx.do</url-pattern>
  </servlet-mapping>

编写java类

package com.imooc.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.DocumentException;
import org.json.JSONException;

import com.imooc.po.TextMessage;
import com.imooc.tuling.TulingApiProcess;
import com.imooc.util.CheckUtil;
import com.imooc.util.MessageUtil;

public class WeixinServlet extends HttpServlet {
    /**
     * 接收微信平台发送的post请求
     */
    private static final long serialVersionUID = 7922920577832311647L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

        String signature = request.getParameter("signature");
        String timestamp = request.getParameter("timestamp");
        String nonce = request.getParameter("nonce");
        String echostr = request.getParameter("echostr");
        /**
        *通过检验 signature 对请求进行校验, 若校验成功则原样返回 echostr, 表示接入
        *成功,否则接入失败
        */

        PrintWriter out = response.getWriter();
        if (CheckUtil.checkSignature(signature, timestamp, nonce)) {
            out.print(echostr);
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

        PrintWriter out = response.getWriter();
        try {
            Map<String, String> map = MessageUtil.xmlToMap(request);
            String toUserName = map.get("ToUserName");
            String fromUserName = map.get("FromUserName");
            String msgType = map.get("MsgType");
            String content = map.get("Content");

            String message = null;

            if ("text".equals(msgType)){
                TextMessage text = new TextMessage();
                text.setFromUserName(toUserName);
                text.setToUserName(fromUserName);
                text.setCreateTime(String.valueOf(new Date().getTime()));
                text.setMsgType("text");
                String reMsg = "";
                try {
                    reMsg = TulingApiProcess.getTulingMessage(content);
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                text.setContent("阿狸:" + reMsg);
                message = MessageUtil.textMessageToXml(text);
            }
            System.out.println(message);
            out.write(message);
        } catch (DocumentException e) {
            e.printStackTrace();
        } finally{
            out.close();
        }
    }
}
package com.imooc.tuling;

import java.io.IOException;
import java.net.URLEncoder;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

//import net.sf.json.JSONObject;

public class TulingApiProcess {
    /**
     * 调用图灵机器人平台接口
     */
    /**
     * 调用图灵机器人平台接口 需要导入的包:commons-logging-1.0.4.jar、 httpclient-4.3.1.jar、httpcore-4.3.jar
     * @throws JSONException 
     */
    public static String getTulingMessage(String context) throws IOException, JSONException {

        String INFO = URLEncoder.encode(context, "utf-8");
        String requesturl = "http://www.tuling123.com/openapi/api?key=你的key&info=" + INFO;
        HttpGet request = new HttpGet(requesturl);
        HttpResponse response = HttpClients.createDefault().execute(request);

        String result = "";

        // 200即正确的返回码
        if (response.getStatusLine().getStatusCode() == 200) {
            result = EntityUtils.toString(response.getEntity());
            System.out.println("返回结果:" + result);
        }
        JSONObject json = new JSONObject(result);
        //以code=100000为例,参考图灵机器人api文档  
        if("100000".equals(json.getString("code"))){  
            result = json.getString("text"); 
//            System.out.println(result);
        } else{
            result = "对不起,你说的话真是太高深了……";
        }
        return result;
    }

}
package com.imooc.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

public class CheckUtil {

    private static final String token = "imooc";

    public static boolean checkSignature(String signature, String timestamp, String nonce) {
        /**
         * 验证
         */
        String[] arr = new String[] { token, timestamp, nonce };
        // 排序
        Arrays.sort(arr);

        // 生成字符串
        StringBuffer context = new StringBuffer();
        for (int i = 0; i < arr.length; i++) {
            context.append(arr[i]);
        }

        // sha1加密
        String temp = SHA1(context.toString());

        return temp.equals(signature);
    }

    public static String SHA1(String decript) {
        /**
         * sha1算法
         */
        try {
            MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
            digest.update(decript.getBytes());
            byte messageDigest[] = digest.digest();
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < messageDigest.length; i++) {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
}
package com.imooc.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.imooc.po.TextMessage;
import com.thoughtworks.xstream.XStream;

public class MessageUtil {
    /**
     * xml转为Map集合
     * @param request
     * @return
     * @throws IOException
     * @throws DocumentException
     */
    public static Map<String, String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException {
        Map<String, String> map = new HashMap<String, String>();
        SAXReader reader = new SAXReader();

        InputStream ins = request.getInputStream();
        Document doc = reader.read(ins);

        Element root = doc.getRootElement();

        List<Element> list = root.elements();

        for (Element e:list){
            map.put(e.getName(), e.getText());
        }
        ins.close();
        return map;
    }
    /**
     * 将文本消息对象转化为xml
     * @return
     */
    public static String textMessageToXml(TextMessage textMessage) {
        XStream xStream = new XStream();
        xStream.alias("xml", textMessage.getClass());
        return xStream.toXML(textMessage);
    }
}
package com.imooc.po;

public class TextMessage {
    // 参数 描述
    // ToUserName 开发者微信号
    // FromUserName 发送方帐号(一个OpenID)
    // CreateTime 消息创建时间 (整型)
    // MsgType text
    // Content 文本消息内容
    // MsgId 消息id,64位整型
    private String ToUserName;
    private String FromUserName;
    private String CreateTime;
    private String MsgType;
    private String Content;
    private String MsgId;

    public String getToUserName() {
        return ToUserName;
    }

    public void setToUserName(String toUserName) {
        ToUserName = toUserName;
    }

    public String getFromUserName() {
        return FromUserName;
    }

    public void setFromUserName(String fromUserName) {
        FromUserName = fromUserName;
    }

    public String getCreateTime() {
        return CreateTime;
    }

    public void setCreateTime(String createTime) {
        CreateTime = createTime;
    }

    public String getMsgType() {
        return MsgType;
    }

    public void setMsgType(String msgType) {
        MsgType = msgType;
    }

    public String getContent() {
        return Content;
    }

    public void setContent(String content) {
        Content = content;
    }

    public String getMsgId() {
        return MsgId;
    }

    public void setMsgId(String msgId) {
        MsgId = msgId;
    }

}

涉及到的lib库:
http://download.csdn.net/detail/hy245120020/8621531
end

2017-10-01 14:51:20 qq_32447301 阅读数 257
  • 安卓图灵聊天机器人接入开发

    通过本课程的学习,你将会学会图灵智能聊天机器人的接口开发,通过本次项目实战,你讲学会json数据的生成和解析,API文档的阅读和接口开发,http post 请求,动态增加View等核心知识点

    282 人正在学习 去看看 朱祚华

首先注册图灵机器人:http://www.tuling123.com/

然后加入图灵机器人:

加入微信进行扫描:

但是:菜单出不来,要进行重新开启!把服务关闭!

2019-01-07 16:17:01 weixin_42980713 阅读数 223
  • 安卓图灵聊天机器人接入开发

    通过本课程的学习,你将会学会图灵智能聊天机器人的接口开发,通过本次项目实战,你讲学会json数据的生成和解析,API文档的阅读和接口开发,http post 请求,动态增加View等核心知识点

    282 人正在学习 去看看 朱祚华

微信开发中,图灵机器人回复、天气、翻译、美食、地图、二维码功能,随处可见。大小网站、APP都在运用这项技术在项目中。今天简单介绍一下图灵机器人回复,天气接口调用、翻译接口,希望对朋友们有用。

效果案例:

思路很简单,首先,token要一致,然后在浏览器上跑起来, 回到微信平台配置后进行提交,显示配置成功,则OK!配置失败,检查token和代码规范,如果还不行,百度上有很多解决办法,不过有的没有用。可以试一试不用框架可不可以执行。

下面不多说,上代码:

<?php
/**
  * wechat php test
  */
 
//define your token
define("TOKEN","token可以随意些");//定义常量token值,与微信中的值进行对比
$wechatObj = new wechatCallbackapiTest();//实例化下面的类
//判断微信传过来的值是否存在
if(!isset($_GET['echostr'])){
//如果微信传过来的值存在执行下面方法
$wechatObj->responseMsg();
}else{
//不存在执行下面方法
$wechatObj->valid();
}
//$wechatObj->valid();
 //封装文件类
class wechatCallbackapiTest
{
    //定义微信传值不存在执行的方法,既然不存在值,那当然也就不需要返回什么了
    public function valid()
    {
        $echoStr = $_GET["echostr"];
 
        //valid signature , option
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }
  //定义微信有值执行的方法
    public function responseMsg()
    {
        //get post data, May be due to the different environments
        $postStr = file_get_contents('php://input');    //全局变量的信息    可以接收
 
        //extract post data
        if (!empty($postStr)){
                //如果$postStr不为空
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $RX_TYPE = trim($postObj->MsgType);
 
                switch($RX_TYPE)
                {
                    case "text":
                        $resultStr = $this->handleText($postObj);
                        break;
                    case "event":
                        $resultStr = $this->handleEvent($postObj);
                        break;
                    default:
                        $resultStr = "Unknow msg type: ".$RX_TYPE;
                        break;
                }
                echo $resultStr;
        }else {
            echo "";
            exit;
        }
    }
    //绑定图灵机器人,返回数据转化为微信使用的格式
    public function handleText($postObj)
    {
        $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";
        	if($keyword=="博客"){
                $contentStr = "YFeng888的博客地址是:https://blog.csdn.net/weixin_42980713";
            }else if($keyword=="天气"){
                 //创建函数调用图灵机器人接口
                $url = "http://apis.haoservice.com/weather?cityname=北京&key=99ae8b89d4a14c0881c2ac64c831cdd6"; 
              $send_info = file_get_contents($url);
              $c = json_decode($send_info,true);
              $contentStr = "【".$c['result']['today']['city']."天气预报】\n"." ".$c['result']['today']['date_y']."时发布"."\n\n实时天气\n".$c['result']['today']['weather'].$c['result']['today']['temperature'].$c['result']['today']['wind']."\n\n温馨提示:".$c['result']['today']['dressing_advice']."\n\n明天\n".$c['result']['future'][1]['temperature']." \n\n后天".$c['result']['future'][2]['temperature']."\n";
          }elseif($keyword=="经典语录"){
             //创建函数调用图灵机器人接口
            $url="http://apis.haoservice.com/lifeservice/JingDianYulu/getTypes?key=你自己的key";
              $send_info = file_get_contents($url);
              $json = json_decode($send_info,true);
              $contentStr=$json['result'];
          }else{
            //翻译接口
            $url = "http://apis.haoservice.com/efficient/robot?info=$keyword&address=&key=你自己的key";
              $send_info = file_get_contents($url);
              $json = json_decode($send_info,true);
              $contentStr =$json['result']['text'];
               file_put_contents("haoyu.txt",$contenStr);//写入日志到haoyu.txt文件内
          }
           
            // $contentStr = "Welcome to wechat world!";
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            echo $resultStr;
        }else{
            echo "Input something...";
        }
    }

    public function handleEvent($object)
    {
        $contentStr = "";
        switch ($object->Event)
        {
            case "subscribe":
                $contentStr = "感谢您关注【最帅男人帮】"."\n"."微信号:shuaigege"."\n"."卓越锦绣,名城苏州,我们为您提供苏州本地生活指南,苏州相关信息查询,做最好的苏州微信平台。"."\n"."目前平台功能如下:"."\n"."【1】 查天气,如输入:苏州天气"."\n"."【2】 查公交,如输入:苏州公交178"."\n"."【3】 翻译,如输入:翻译I love you"."\n"."【4】 苏州信息查询,如输入:苏州观前街"."\n"."更多内容,敬请期待...";
                break;
            default :
                $contentStr = "Unknow Event: ".$object->Event;
                break;
        }
        $resultStr = $this->responseText($object, $contentStr);
        return $resultStr;
    }
    
    public function responseText($object, $content, $flag=0)
    {
        $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[text]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    <FuncFlag>%d</FuncFlag>
                    </xml>";
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
        return $resultStr;
    }
 
    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];    
                
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}
 
?>

ok,亲测可行!

没有更多推荐了,返回首页