redis,nodejs,php,pub/sub 实战: 微信语音识别
2015年5月22日 20:20:20 星期五
效果:
这边对微信说话, 浏览器端及时显示语音识别的文字
注意:
在连接socket.io时, 按下浏览器f12, 如果一直有请求不断的刷, 说明socket.io没有连接成功
代码:
node.js server端
1 var module_path = '/usr/local/web/node/bin/node_modules/'; 2 var html = '<html> <head> <meta charset="utf-8"> <title>微信接口</title> <script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.js"></script> <script src="http://cdn.bootcss.com/socket.io/1.3.5/socket.io.js"></script> </head> <body> <div id="voice"> 语音识别:<br><br> </div> <script type="text/javascript"> var voice = document.getElementById("voice"); var socket = io.connect("http://www.zhangzhibin.com:1337"); socket.on("hello", function(data){console.log(data); socket.emit("hello", {"status":"ok"}); }); socket.on("emit", function(data){var t = data+"<br>"; voice.innerHTML += t; socket.emit("emit", {"get":"data"}); }); </script> </body> </html>'; 3 //链接redis 4 var redis = require(module_path+'redis'); 5 var redis_client = redis.createClient(6379, '127.0.0.1'); 6 redis_client.auth('123456'); 7 redis_client.on('error', function(error){ 8 console.log('redis-error: ' + error); 9 }); 10 11 //创建服务器 12 var http = require('http'); 13 var url = require('url'); 14 var fs = require('fs'); 15 var ch = false; 16 var server = http.createServer(function (req, res) { 17 //获取请求参数 18 var objReqArg = url.parse(req.url, true).query; 19 ch = objReqArg.openid; 20 if (ch) { 21 redis_client.subscribe(ch, function(e){ 22 console.log('channel: '+ ch); 23 }); 24 }; 25 //返回 26 res.writeHead(200, {'Content-Type': 'text/html'}); 27 res.end(html); 28 29 }); 30 server.listen(1337, 'www.zhangzhibin.com'); 31 32 //创建服务器 33 var io = require(module_path + 'socket.io').listen(server); 34 io.sockets.on('connection', function(socket){ 35 socket.on('hello', function(data){ 36 console.log(data); 37 }); 38 socket.emit('hello', function(data){ 39 console.log(data); 40 }); 41 redis_client.on('message', function(error, msg){ 42 socket.emit('emit', msg); 43 }); 44 }); 45 46 console.log('Server running at http://www.zhangzhibin.com:1337');
浏览器端html代码:
就是上边代码的第二行变量 var html='....'
1 <html> 2 <head> 3 <meta charset="utf-8"> 4 <title>微信接口</title> 5 <script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.js"></script> 6 <script src="http://cdn.bootcss.com/socket.io/1.3.5/socket.io.js"></script> 7 </head> 8 <body> 9 <div id="voice"> 语音识别:<br><br> </div> 10 <script type="text/javascript"> 11 var voice = document.getElementById("voice"); 12 var socket = io.connect("http://www.zhangzhibin.com:1337"); 13 socket.on("hello", function(data){ console.log(data); socket.emit("hello", {"status":"ok"}); }); 14 socket.on("emit", function(data){ var t = data+"<br>"; voice.innerHTML += t; socket.emit("emit", {"get":"data"}); }); 15 </script> 16 </body> 17 </html>
微信端:
注意一点, 在语音回调函数中, 将语音识别的结果publish到某一个频道上即可
这时, 会触发上边第41行代码, 将文字发完浏览器端
下边是微信回调的代码:
1 public function voice() 2 { 3 // 每次发送消息都会post 来一份签名相关的数据 4 // $echostr = $this->checkSignature(); 5 // exit($echostr); 6 7 preg_match('#<FromUserName><!\[CDATA\[([a-zA-Z0-9_]+)\]#', $GLOBALS['HTTP_RAW_POST_DATA'], $matches1); 8 preg_match('#<Recognition><!\[CDATA\[([^\]]*)\]#', $GLOBALS['HTTP_RAW_POST_DATA'], $matches2); 9 $openid = !empty($matches1[1]) ? $matches1[1] : '0'; 10 $text = !empty($matches2[1]) ? $matches2[1] : '没听清...'; 11 12 $objRedis = iredis::getInstance(); 13 $objRedis->publish($openid, $text); 14 15 }
测试方法:
1. 关注我的微信公众号"xxx"
2. 发送消息"主播_username"
3. pc端打开 http://www.zhangzhibin.com/wechat/index/zhubolist
4. 点击你刚才输入的用户名, 进入你的对话页面
5. 对微信发送语音消息, 即可在刚才的浏览器页面看到语音识别结果
冷知识点:
$_POST 无法解释二进制流,需要用到 $GLOBALS['HTTP_RAW_POST_DATA'] 或 php://input
$content = $GLOBALS['HTTP_RAW_POST_DATA']; // 需要php.ini设置
$content = file_get_contents('php://input'); // 不需要php.ini设置,内存压力小

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Machine Learning学习笔记(1)Introduction
1、机器学习可以做什么? 搜索引擎、垃圾邮件过滤、人脸识别等等,不仅用于人工智能领域,生物、医疗、机械等很多领域都有应用。 2、机器学习的定义 A computer program is said to learn from experience E with respect to some task T and some performance measure P,if its performance on T,as measured by P,improves with experience E.—-Tom Mitchell 3、监督学习(Supervised Learning) 举个例子:房价预测中,我们可以根据不同的模型预测房价。监督学习又叫回归问题,应该说回归属于监督的一种,意指要预测一个连续值的输出,比如房价预测、肿瘤预测。 4、无监督学习(Unsupervised Learning) 在监督学习的数据集中,比如肿瘤预测,我们可以知道数据集的肿瘤是良性的或者是恶性的,然而在无监督学习的数据集中是没有这种标签的,无监督学习可以把数据集自动分成两种不同的数据簇,所以叫做簇类算法...
- 下一篇
微信公众平台开发教程索引文档 不谢!
微信公众平台开发者可以通过公众平台开发接口来进行消息交互、自定义菜单交互、素材管理、管理微信小店、发放微信卡券等,这里ytkah对微信公众平台开发文档做了一个小索引,方便开发者进行查询,包括实例源码下载 微信团队官方发布的微信公众平台开发者文档 新手指南 接入指南 典型案例介绍 开发者规范 模板消息运营规范 公众号类型的接口权限说明 微信开发者互助问答系统 测试号申请|在线调试 接口调试工具 接口测试号申请 报警排查|返回码 接口频率限制说明 全局接口返回码说明 报警排查指引 微信推送消息与事件说明 消息加解密|消息签名 方案概述 接入指引 技术方案 开发者FAQ 基础接口 获取access_token 获取微信服务器IP地址 接收消息 验证消息真实性 接收普通消息 接收事件推送 接收语音识别结果 发送消息 发送被动回复消息 客服接口 高级群发接口 模板消息接口 获取自动回复规则 素材管理 新增临时素材 获取临时素材 新增永久素材 获取永久素材 删除永久素材 修改永久图文素材 获取素材总数 获取素材列表 用户管理 用户分组管理 设置用户备注名 获取用户基本信息(UnionID机制) 获...
相关文章
文章评论
共有0条评论来说两句吧...