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

原创 2013年12月03日 19:09:13

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

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

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

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

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

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

微信公众平台测试账号具体见:https://mp.weixin.qq.com/cgi-bin/readtemplate?t=news/note-20131202_tmpl&lang=zh_CN

百度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代码,就实现了一个复杂的语音点歌系统。

 

体验:

 

 

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

 

 

从零开始实现实时多人点歌机器人 (来自网易云音乐)

偶然的机会,发现了B站的点歌机器人,觉得挺好玩的就自己做了一个简易版点歌机器人,预览如下: 功能 使用websocket,支持多人同时点歌,发送弹幕聊天 具有搜索sugg...
  • ourpush
  • ourpush
  • 2016年08月28日 20:03
  • 2199

百度音乐API全接口

参考http://www.jianshu.com/p/a6718b11fdf1百度音乐全接口 会利用使用接口找歌简单又快捷http://tingapi.ting.baidu.com/v1/restse...
  • zuiaisha1
  • zuiaisha1
  • 2017年03月10日 16:56
  • 9386

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

最近在做一个微信项目,接触到了微信公众平台。通过公众平台可以很方便的搭建一个功能完善的移动应用。昨天发现:开发者可使用手机号来申请接口测试帐号,体验高级接口。    这篇文章的应用将使用到高级接口中...
  • zhuqilin0
  • zhuqilin0
  • 2013年12月03日 19:09
  • 8912

百度音乐接口

关键字搜索歌手、歌曲 http://sug.music.baidu.com/info/suggestion?word=%E6%B1%AA%E5%B3%B0&_t=1419582077283&forma...
  • u010449335
  • u010449335
  • 2014年12月26日 16:45
  • 439

打造一个微信语音点歌系统

最近在做一个微信项目,接触到了微信公众平台。通过公众平台可以很方便的搭建一个功能完善的移动应用。昨天发现:开发者可使用手机号来申请接口测试帐号,体验高级接口。    这篇文章的应用将使用到高级接口中...
  • p419228530
  • p419228530
  • 2013年12月04日 17:30
  • 4124

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

最近在做一个微信项目,接触到了微信公众平台。通过公众平台可以很方便的搭建一个功能完善的移动应用。昨天发现:开发者可使用手机号来申请接口测试帐号,体验高级接口。    这篇文章的应用将使用到高级接口中...
  • kepoon
  • kepoon
  • 2013年12月06日 23:12
  • 2445

微信公众平台消息接口开发(50)在线点歌/在线音乐

微信 在线听歌 在线点歌 在线点播 音乐API 公众平台 微信公众平台消息接口 微信开发模式   作者:http://www.cnblogs.com/txw1958/ 微信公众平台在年前开放了新...
  • ywwazyj
  • ywwazyj
  • 2013年06月16日 18:20
  • 1445

微信jssdk录音功能开发记录

0.需求描述 在微信浏览器内打开的页面,制作一个按钮,用户按住按钮后开始录音,松手后停止录音并将录音上传并长期保存。 1.开发流程 如果开发的是普通的展示性页面,就和开发普通的页...
  • pretty_fairy
  • pretty_fairy
  • 2016年09月02日 14:12
  • 4919

微信语音点歌系统

最近在做一个微信项目,接触到了微信公众平台。通过公众平台可以很方便的搭建一个功能完善的移动应用。昨天发现:开发者可使用手机号来申请接口测试帐号,体验高级接口。    这篇文章的应用将使用到高级接口中...
  • u012643122
  • u012643122
  • 2015年03月02日 23:12
  • 463

微信开发二三事:功能应用三、点歌系统

首先,得感谢柳峰老师的书,我是看了那本书,才知道有这么一个接口的。 OK,上两篇已经把微信聊天机器人讲完了,今天我们来讲讲微信点歌系统。 相信很多同学都喜欢听歌,但是.....我们也知道,现在的手...
  • u011724770
  • u011724770
  • 2015年04月19日 21:22
  • 1005
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:十分钟教你打造一个微信语音点歌系统
举报原因:
原因补充:

(最多只允许输入30个字)