做一个微信语音点播系统

最近在做一个微信项目,接触到了微信公众平台。通过公众平台可以很方便的搭建一个功能完善的移动应用。昨天发现:开发者可使用手机号来申请接口测试帐号,体验高级接口。

这篇文章的应用将使用到高级接口中的语音识别,以及音乐回复接口。通过这两个接口,让大家体验一下语音点歌的魅力。

这个应用简单的来说:就是你向微信公众平台报一首歌名,微信公众平台返回这首歌曲给你听。本文将一步一步教你如何实现这个看似复杂的移动应用。

下面是我申请的测试账号的二维码,大家可以关注一下测试一下效果,不过测试账号的有效期只有一年,最多只能有20个关注者。

另外一个是我个人的订阅号,有更多的功能,没有人数限制,但是不能识别语音。说了这么多,不如自己动动手吧。

首先申请测试账号和百度的bae云平台:

微信公众平台测试账号具体见:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

百度bae见:http://developer.baidu.com/bae/

相关配置:

申请完成之后,进行相关的配置:

1、在bae上创建应用并申请域名

2、下载公众平台的php演示代码,并上传到bae上

3、调整php代码,并配置接口

然后准备一下音乐的api:

在网上找到了百度的一个私有的音乐api。具体见:

http://blog.csdn.net/leixiaohua1020/article/details/12927707

接着开始编码:

1、我们先了解一下用到的微信语音识别接口

我们将语音发送给微信服务器,微信服务器会将语音转换成文字。我们拿到文字之后调用音乐api获取音乐,然后通过微信的被动回复中的回复音乐消息将音乐返回给客户端。

代码如下:(此代码可以直接上传到你的百度bae平台,只需要修改token就可以了)

<?php

    define("TOKEN", "yourtoken");
    $wechatObj = new wechatCallbackapiTest();
   // $wechatObj->valid();
    $wechatObj->responseMsg();
    class wechatCallbackapiTest
    {
        public function valid()
        {
            $echoStr = $_GET["echostr"];
            //valid signature , option
            if($this->checkSignature()){
                echo $echoStr;
                exit;
            }
        }

        public function responseMsg()
        {
            //获取post数据
            $postStr =    $GLOBALS["HTTP_RAW_POST_DATA"];
            //解析post数据
            if (!empty($postStr)){

                $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
                $type= $postObj->MsgType;
                switch($type)
                {

                    case "voice";
                        $resultStr=  $this->getMusicContent($postObj);
                        echo   $resultStr;
                        exit;
                        break;
                }
            }

        }

        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 getMusicContent($postObj)
        {
            $ret=   "<xml>
            <ToUserName><![CDATA[%s]]></ToUserName>
            <FromUserName><![CDATA[%s]]></FromUserName>
            <CreateTime>%s</CreateTime>
            <MsgType><![CDATA[music]]></MsgType>
            <Music>
            <Title><![CDATA[%s]]></Title>
            <Description><![CDATA[]]></Description>
            <MusicUrl><![CDATA[%s]]></MusicUrl>
            <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
            <FuncFlag><![CDATA[1]]></FuncFlag>
            </Music>
            </xml>";
            $recognition=$postObj->Recognition;
            $keywordc= urlencode($recognition);
            $musicapi =  "http://box.zhangmen.baidu.com/x?op=12&count=1&title={$keywordc}\$\$";
            $simstr=file_get_contents($musicapi);
            $musicobj=simplexml_load_string($simstr);
            $i=0;
            $musicurl;
            foreach($musicobj->url as $itemobj)
            {
                $encode = $itemobj->encode;
                //处理decode ,发现微信在处理音乐的时候有个问题,所以这里删除一个参数
                $decode = $itemobj->decode;
                $removedecode = end(explode(‘&‘, $decode));
                if($removedecode<>"")
                {
                    $removedecode="&".$removedecode;
                }
                $decode = str_replace($removedecode,"", $decode);
                $musicurl= str_replace(end(explode(‘/‘, $encode))   ,$decode,$encode);
                break;
            }

            $resultStr = sprintf($ret, $postObj->FromUserName, $postObj->ToUserName,time(), $recognition,$musicurl,$musicurl);
            return $resultStr;

        }     

    }

?>

总结:微信的语音识别非常的强大,我的普通话,不算标准,但是每次都能识别出来,另外百度音乐api的音乐应有尽有。

从上面描述可以看到,我只是简单的配置和写了几句简单的php代码,就实现了一个复杂的语音点歌系统。

体验:

时间: 2024-10-26 10:49:18

做一个微信语音点播系统的相关文章

[Other]来做一个微信打印机吧 -- 微信打印的设计思路参考

原文地址:来做一个微信打印机吧 -- 微信打印的设计思路参考 最近微信打印机小火了一把,比如印美团,747微信打印机,都是利用微信公共平台实现照片的打印. 具体流程: 扫描二维码关注公共主页 发送图片 发送微信打印机上的打印码 简单三步,实现微信打印照片的功能. 那么它是怎么实现的呢?在此提供一下自己的思路供大家参考. 源码已经写好了,确实可行. 如果大家有好的思路欢迎一起分享^_^ 微信的后台接口 用户把照片发给微信公共账号,在接收到的时候是有图片的url的,所以我们不用考虑图片的存储问题.

使用.NET REACTOR使用方法,制作软件许可证,做一个简单的许可证系统步骤

1.打开文件 2.选择Settings选项卡, 3.选择LICENSE MANAGER选项卡,点击保存,保存公共密匙,以后用这个来生成注册文件. 4.点击左边的PROTECT 5.使用机器ID生成器(HID.exe),获取用户机器的ID. 7, 制作许可证 打开程序 Open,上次保存的密匙文件,

微信语音红包小程序开发如何提高精准度 红包小程序语音识别精准度 微信小程序红包开发语音红包

公司最近开发的一个微信语音红包,就是前些时间比较火的包你说红包小程序.如何提高识别的精准度呢. 在说精准度之前,先大概说下整个语音识别的开发流程.前面我有文章已经说到过了.具体我就不谈了.一笔带过. 先是通过小程序前端调动语音录制功能拿到客户说的语音,比如mp3格式,然后通过百度的语音识别算法,转为文字.具体看百度语音识别的接口.地址http://yuyin.baidu.com/docs/asr/188 返回的格式如下: // 成功返回 { "err_no": 0, "err

30分钟做一个二维码名片应用,有源码!

前言 30分钟带你用Wex5做一个微信公众号上使用的二维码名片,相应技术点有详细讲解,高清有码!(点击下载全部源码) 二维码现在是无处不在,无孔不入了.大到一辆汽车,小到一包纸巾,身上都印有二维码,明码标价.败家娘们可能会说:没想过要买的,真心的!就是看着漂亮嘛,想拍个照片,谁知道一拍就弹出个支付界面,想按退出但是手抖...(这手抖的,不知道放在菜刀下会不会稳定一点?)    作为个人信息的载体,名片也是天然适合二维码这种形式的.今天小茄就试着用WeX5移动开发工具做一个电子的二维码名片,除了扫

如何做一个自己的开源聊天项目?(仿微信)

万事开头难 在我决定做开源是因为自身工作接触到大多数的项目都是基于开源大佬写的框架,自觉惭愧,工作以来一直忙于业务与功能实现,多多少少做过的几个项目也没能抽出部分好一点的功能业务Maven包什么的提供也同行使用或借鉴,这实在是有悖于自己的初心. 决定做开源是今年(2018)7月末的时候,自己曾做的一个Iot项目刚刚被几个网上的朋友问到,并寻求源码,那么久做了一个Demo,并放到了GitHub上. 之后感觉应该做一个有自己情感注入的项目才行,而不是工作上的现实交易的项目,我想做一个属于自己的项目,

先做一个“小程序”——关于微信应用号的六大猜想

先做一个“小程序”——关于微信应用号的六大猜想 9月 21 日,苦等了9个多月的时间,应用号终于与我们见面了,命名为「小程序」. 01 为什么推出小程序? 考虑到小程序对整个APP市场的影响,毫无疑问会对现有的APP生态带来一定的冲击.但是,之所以推出小程序,最直接的原因可能是为了构建和扩充微信生态链,让微信更具开放性. 如我们所知,目前微信公众号分为三类: • 服务号,连接人和商品,目前很多电商企业,以及在微信端提供产品和服务的企业都用服务号. • 订阅号,微信官方的定位是阅读,连接人和资讯的

创业公司做数据分析(五)微信分享追踪系统

??作为系列文章的第五篇,本文重点探讨数据采集层中的微信分享追踪系统.微信分享,早已成为移动互联网运营的主要方向之一,以Web H5页面(下面称之为微信海报)为载体,利用微信庞大的好友关系进行传播,实现宣传.拉新等营销目的.以下图为例,假设有一个海报被分享到了微信中,用户A与B首先看到了这个海报,浏览后又分享给了自己的好友,用户C看到了A分享的海报,浏览后继续分享给了自己的好友.这便形成了一个简单的传播链,其中蕴含了两种数据: 行为,指的是用户对微信海报的操作,比如打开.分享. 关系,指的是在海

扛住100亿次请求——如何做一个“有把握”的春晚红包系统?(转载)

转载:原文链接 扛住100亿次请求——如何做一个“有把握”的春晚红包系统? 羊年春晚摇一摇活动已经落下帷幕,现在回过头来看看这一全民参与的有趣的活动背后,有着怎样的后台系统?这个系统又是如何被设计与实现出来的? 1.   春晚摇一摇活动形式 在了解这个系统之前,先看看羊年春晚有哪些活动形式?春晚摇一摇复用了摇一摇入口,但提供了全新的界面和交互内容. 在羊年春晚摇一摇界面里,用户摇动手机后,可以看到明星拜年.全家福.好友贺卡等精彩纷呈的活动页:也会有温馨的“休息一下”,或让很多误以为中奖的“挂服务

P2P技术做自有点播系统的加速,还需要和CDN一样部署很多服务器吗?

视频运营者如果把自有的视频点播资源,部署在自己的服务器上,想在全国推广,希望使用本点播系统的用户在看视频时有好的体验,如果用CDN的话,需要在全国布点,成本很高.那如果使用P2P技术的话,视频点播系统也还需要部署很多服务器吗?具体的实现过程是怎样的呢? 我们知道如果想利用CDN方案,实现点播视频在全国各地播放都快,需要大量布点,这个是由CDN的特点决定的.因为用户在发起请求的时候,如果做了CDN布点,是会返回给用户一个离他最近的CDN地址,所以布点是离用户越近越好,但是这种方法也只是通过DNS智