微信语音点歌系统

来源:互联网 发布:linux修改内核参数 编辑:程序博客网 时间:2024/06/02 20:51


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

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

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

  下面是我申请的测试账号的二维码,大家可以关注一下测试一下效果,不过测试账号的有效期只有一年,最多只能有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代码,就实现了一个复杂的语音点歌系统。

 

体验:

0 0
原创粉丝点击