• 10分钟教你打造一个微信语音点歌系统


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

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

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

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

    体验:

    另外,欢迎大家关注一下我的个人订阅号:




     
  • 相关阅读:
    枚举
    泛型
    装箱和拆箱
    使用TryParse()来执行数值转换
    参数数组
    checked和unchecked转换
    字符串不可变
    TCC : Tiny C Compiler (2018-2-6)
    win10 下 protobuf 与 qt
    QWebView 与Js 交互
  • 原文地址:https://www.cnblogs.com/zhuqil/p/3456312.html
Copyright © 2020-2023  润新知