PHP CURL 图灵机器人
本次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 图灵机器人相关推荐
- ItChat与图灵机器人的结合
前景: 我在知乎关注一位大佬 名字叫 LittleCoder 我是在他开发ItChat包时关注的 ItChat已经完成了微信的个人账号的API接口 已经实现了实时获取用户的即时信息并自动化进行回应 后 ...
- python 图灵机器人_图灵机器人 python 试玩
看一个小伙伴分享的图灵机器人Python玩法,觉得挺好的 linux上,可以尝试更简单的方法.比如说使用curl命令 curl "http://www.tuling123.com/opena ...
- ros+科大迅飞语音包+图灵机器人(三)通过图灵进行语义理解
首先我们需要下载 sduo apt install libcurl3 libcurl4-openssl-dev sudo apt install libjsoncpp0 libjsoncpp-dev ...
- 图灵机器人api接入c语言,apikey创建接入图灵机器人
图灵机器人很多人都听说过,这个开放平台有很多功能,今天来介绍如何用apikey接入图灵机器人.以下是python代码 http://www.turingapi.com import requests ...
- 机器人编程语言python-个人微信接入图灵机器人(基于Python)
开发环境:Ubuntu14.04 编程语言:Python2.7 1.在图灵机器人官网(http://www.tuling123.com)注册账号,创建机器人,如果只是学习的话,可以使用免费版,一个账号 ...
- 专属个人的聊天机器人的实现——图灵机器人
先体验一下:图灵机器人智能聊天体验:http://www.tuling123.com/openapi/cloud/proexp.jsp 1.简单介绍 本篇为大家介绍使用图灵机器人api实现聊天机器人的 ...
- 微信公众号接入图灵机器人实现自动回复消息
2019独角兽企业重金招聘Python工程师标准>>> 1.创建图灵机器人 进入图灵机器人网址:http://www.tuling123.com/ 登录/注册,进入机器人管理,然后点 ...
- Python 技术篇 - 微信调用图灵机器人的api接口实现自动回复实例演示。图灵机器人的注册与使用
这是一个把接收的消息传给图灵机器人,再把图灵机器人回复的消息传回来的函数. def get_response(msg):apiUrl = 'http://www.tuling123.com/opena ...
- Python 微信机器人:属于自己的微信机器人制作,简单易懂。图灵机器人接口api调用
首先你需要安装 itchat 库. 进入 cmd,先直接 pip install itchat 就好了. 我调的是图灵机器人的接口,可以了解一下: 图灵机器人的注册,图灵机器人api获取方式 微信机器 ...
最新文章
- Javascript中的Callback方法浅析
- ldap导入mysql_openLDAP 部署(亲测可用)
- java.lang.OutOfMemoryError:GC overhead limit exceeded
- 艰难的选择_处理艰难对话的6种方法:分享如何衡量成功
- Consul在.Net Core中初体验
- linux 如何查看fb中分辨率_Ubuntu: Linux下查看本机显示器分辨率(xrandr)
- 3. 盒子模型与兼容性
- Nginx二级目录反向代理网站
- css absolute relative 定位
- 道德经和译文_道德经 - 道德经全文及译文 - 道德经全文 - 老子道德经
- CCF计算机职业资格认证系列一CCF软件能力认证
- Dynamics 365 窗体中设置可编辑的子网格
- linux ntpdate同步错误,差一个小时的问题
- MySQL学习教程(超全)
- 【英语竞赛】专项练习之听力
- TypeScript Property ‘XXX‘ does not exist on type ‘never‘.
- centos7 同步网络时间
- 2021年中式烹调师(高级)考试内容及中式烹调师(高级)复审模拟考试
- 论文阅读笔记——[MPN]: Multi-task Learning with Coarse Priors for Robust Part-aware Person Re-identification
- Python一维列矩阵转换成行矩阵
热门文章
- new,delete和malloc,free以及allocatorT
- SharePoint 2010/SharePoint 2013 Custom Action: 基于Site Collection 滚动文字的通知.
- ROS Learning-032 (提高篇-010 Launch)Launch 深入研究 --- (启动文件编程)ROS 的 XML语法简介...
- Gitlab服务器搭建
- 【cs229-Lecture19】微分动态规划
- Checked ==true ? Y:N ;
- input[type=file] 异步上传文件
- 如何让PhpStorm同时打开多个项目?(多项目并存的问题)
- 介绍4种HTML5 Canvas库
- 五 Django 1.5.4 User Authentication 用户认证