好久,都没去整微信公众平台了。因为对php代码确实不熟,做什么功能,都得一点一点的查,然后一点一点的平凑。

有很多事情要去做,很多想法都要去实现。现实中,却一拖再拖。热情依旧,也许少了点曾经的执着。这个周末,又是阴雨天。于是决定窝在家里,将音乐搜索功能做到微信公众平台里。

过程:
1,去aol搜关键字“php微信公众平台百度音乐”,就可以找到相关的文章。好几篇都大同小异。选择一篇能够让你获取到百度音乐url的文章。

(对php不熟悉,从0开始去写去开发肯定是不靠谱不科学的。能用别人的就用别人的)。

2,在本地建好站点环境。将文章中的代码跑起来。然后测试。看看能不能获取到音乐url。

3,这个百度api能用的参数有两个,一个是歌名,另一个是歌手名。参数可选的。

4,以上步骤做好了,对照之前的项目,以及官方微信公众平台的要求,剥离组织出适合微信公众平台的方法来。整合进之前的代码。

5,这个有局限,好些音乐都不能获取到。要做好没获取到的时候处理,不能让用户(粉丝)干等着。

好了,下边贴出我自己抽离出的代码:

<?php
header('Content-Type:text/html;charset=utf-8');
class MusicManager 
{
    /**
     * 微信平台功能好久没更新了。今天决定将搜歌功能整好。于是,去aol了下,找到了这个代码。
     * 因为之前,返回音乐的接口按照腾讯定义的已经整好。这里只需要获取到音乐的url就可以。
     * 所以这里只公开两个方法来返回音乐的url。
     * function getMusic 获取普通音质的url
     * function getHQMusic 获取高音质url
     * 我的微信:vinifly
     * */
    
    /** 使用方法,在类外边
         <?php
            include 'MusicManager.php';
    
            $musicManager = new MusicManager();
            $song = $musicManager ->getHQMusic("冬天的秘密" , "周传雄");
            echo $song;
         ?>
     */
    public function MusicManager()
    {
    
    }
    
    private function read_child($node)
    {
        global $musicstr ;
        $children = $node->childNodes; //???$node??????????
        foreach($children as $e)
        {
            /*if($e->nodeType == XML_TEXT_NODE) 
             {
            echo $e->nodeValue."---------"."<BR>";
            }*/
            if($e->nodeType == XML_ELEMENT_NODE&&$e->nodeName=='encode') 
            {
                $musicstr.=$e->nodeValue;
            }
            if($e->nodeType == XML_ELEMENT_NODE&&$e->nodeName=='decode') 
            {
                $musicstr.=$e->nodeValue."|";
            }
            if($e->nodeType == XML_ELEMENT_NODE) 
            {
                $this->read_child($e); 
            }
        }
        return  $musicstr ;
    }
    
    /**
     * 通过歌曲名和歌手获取普通音质音乐url
     * params歌曲名 歌手,歌手可选的。
     * */
    public function getMusic($song,$singer = "")
    {
        $urllist = $this -> load($song , $singer);
        $url = $this ->getMusicUrl($urllist);
        return $url;
    }
    
    /**
     * 通过歌曲名和歌手获取高音质音乐url
     * params歌曲名 歌手,歌手可选的。
     * */
    public function getHQMusic($song,$singer = "")
    {
        $urllist = $this -> load($song , $singer);
        $url = $this ->getMusicUrl($urllist);
        return $url;
    }
    
    private function load($song , $singer)
    {
        $dom = new DomDocument(); 
        $dom->load('http://box.zhangmen.baidu.com/x?op=12&count=1&title='.$song.'$$'.$singer.'$$$$'); //??? XML???
        $root = $dom->documentElement; 
        return $this->read_child($root);
    }
    
    private function getMusicUrl($url)
    {
        // echo strpos($url,"&")."musciURL";
        return substr($url,0,strpos($url,"&"));
    }
    
    private function getHQMusicUrl($url)
    {
        //echo  strripos($url,"&")."HQmusicURL";
        return substr($url,strripos($url,"http"),strripos($url,"&")-strripos($url,"http"));
    }
}
?>