欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > php >内容正文

php

PHP CURL 图灵机器人

发布时间:2025/7/14 php 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 PHP CURL 图灵机器人 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
智能回复机器人,常用于客服、微信自动回复。。。本次我们主要讲解PHP CURL的用法 ——@Author 云天河Blog

本次CURL的使用

是围绕软件工程8大步骤来的

1问题定义 2可行性研究 3需求分析 4总体设计 5详细设计 6编码和单元测试 7综合测试 8软件维护


一、问题定义

我们想获取别人网页上的东西,比如图灵官网上的机器人,现在应该怎么弄呢?


二、可行性研究

因为都是网页上的东西,服务器获取数据的方式总是万变不离其中,当你发送消息的时候,查看HTTP请求就知道其中发生了什么,然后你也就可以进行相应的爬取操作,然后这个小机器人你也自己也可以调用了。


三、需求分析

需要一个官网样例上的机器人的调用接口。



四、总体设计。

通过观察HTTP响应头,了解表单与服务器数据交互的流程,然后仿照类似的方法,去调用服务器数据。


五、详细设计

Step 1进入http://www.tuling123.com/experience/exp_virtual_robot.jhtml?nav=exp

进入与机器人对话的页面



Step 2开启 开发者工具,观察Network的变化



Step 3提交表单后,会新出来了一个POST包,我们这时查看这个包的具体内容



Step 4:分析这个数据包的Header



Step 5现在我们也模拟传包到这个服务器响应地址。

很明显,没有按照它规定的user_id的值,多半会出问题,

比如这里的userid,经我分析,缺少它,机器人会不知道你上一句话说的是什么,就不能达到连续对话的效果了

所以我们主要差的是userid这个值,我们要怎么去获取呢?当然是查看该页面哪个地方存了这个值就好了

现在我们查看http://www.tuling123.com/experience/exp_virtual_robot.jhtml?nav=exp的网页源码

通过浏览器输入userid,尝试是否能查找到类似这个表单的userid格式,如果有类似的存在,多半是找到了,如下面的图



Step 6现在我们要做的是,把这个userid获取下来,并存入$_SESSION['chart_id']变量就可以了。

我们只用匹配到这句话,然后对这句话 用正则表达式取出来userid就好了

window.localStorage.setItem("_userid", '57a2413c-1f19-4e74-95a5-0b79d041e81d');

Step 7接下来我们只需要获取服务器返回的数据就好了


六、编码和单元测试

<?php session_start(); /* * @Name 图灵机器人 * @Function 图灵机器人API * @Author 云天河Blog * @Link http://www.hlzblog.top/ * @date 2016-9-26 19:35:44 */ class TuLing_Robot{/*** @param String $get_unique_uid 通过此网址 可获取与用户 一对一的临时对话 UID* @param String $to_api 图灵机器人的实现接口,它会返回XML* @param String $form_data 格式化用户消息后的 传给图灵服务器的信息*/private $get_unique_uid="http://www.tuling123.com/experience/exp_virtual_robot.jhtml?nav=exp";private $to_api="http://www.tuling123.com/api/product_exper/chat.jhtml";private $form_data;/***析构函数* @param String $say 用户输入数据* @return void*/public function __construct($say="云天河Blog,你知道吗?"){$this->get_char_id();$this->post_data($say);}/**获取机器人与用户的对话的userid,通过正则表达式即可获取* @param $_SESSION['chat_id'] 机器人与用户对话所用的唯一的临时ID* @return void*/public function get_char_id(){//如果用户还没有临时对话变量,则注册一个 $_SESSION['char_id']if( !isset($_SESSION['chat_id']) ){$ch = curl_init(); //开启curl连接curl_setopt($ch, CURLOPT_URL, $this->get_unique_uid); //写入urlcurl_setopt($ch, CURLOPT_HEADER, 0); //是否有写入头信息需要写入=>falsecurl_setopt($ch, CURLOPT_RETURNTRANSFER,true);//返回字符串,而不直接输出$content = curl_exec($ch); //执行curl,并把结果返回给一个字符串curl_close($ch); //关闭curl连接//通过正则表达式提取出与机器人对话的userid$reg="/setItem\(\"\_userid\", \'([^\']+)/i";preg_match($reg,$content,$match);$content=null;//用完了抓取页面的临时变量,就立马释放掉。$_SESSION['chat_id']=$match[1];$match=null;}}/***POST方式获取数据过程,并将XML解析为对象后,获取机器人发给用户的消息* @param boolean $https https协议相关, 默认false* @param method $method curl链接方式,默认POST* @param String @data 格式化后的传入服务器的数据;* @return String 机器人发给用户的消息*/public function curl_request($https = false, $method = 'POST', $data = null){$data=$this->form_data;//请求 URL,返回该 URL 的内容 $ch = curl_init(); // 初始化curlcurl_setopt($ch, CURLOPT_URL, $this->to_api); //设置访问的 URLcurl_setopt($ch, CURLOPT_HEADER, false); //放弃 URL 的头信息curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返回字符串,而不直接输出if($https){ //判断是否是使用 https 协议curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不做服务器的验证curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); //做服务器的证书验证}if($method == 'POST'){ //是否是 POST 请求curl_setopt($ch, CURLOPT_POST, true); //设置为 POST 请求curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //设置POST的请求数据}$content = curl_exec($ch); //开始访问指定URLcurl_close($ch);//关闭 cURL 释放资源$XML_Obj=simplexml_load_string($content, 'SimpleXMLElement', LIBXML_NOCDATA);return $XML_Obj->Content;}/***格式化用户输入的数据参数* @param String $say 用户输入的聊天消息*/public function post_data($say){$say=urlencode($say);//因为要通过post传值,所以转码中文内容为,url传值格式$this->form_data="info=".$say."&userid=".$_SESSION['chat_id'];} }/** *对了,那个服务器返回数据的样式,见下 <xml> <ToUserName><![CDATA[27d7f9f2-106c-47e0-be2d-be44abaf9118]]></ToUserName> <FromUserName><![CDATA[toUser]]></FromUserName> <CreateTime>1474882713061</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[赌大10]]></Content> <FuncFlag>0</FuncFlag> </xml> */@$info=$_GET['content'];//通过GET方式传入聊天信息 $ac_info=new TuLing_Robot($info); echo $ac_info->curl_request();//输出机器人的话

七、综合测试


经过测试代码,没有问题



八、软件维护

待各位小伙伴来维护。。。

总结

以上是生活随笔为你收集整理的PHP CURL 图灵机器人的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。