好久,都没去整微信公众平台了。因为对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")); } } ?>